์คํ๋ง์ด๋ ?
- Java์ ์น ํ๋ ์์ํฌ๋ก Java์ธ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ฌ์ฉํฉ๋๋ค. Java๋ก ๋ค์ํ ์ดํ๋ฆฌ์ผ์ด์
์ ๋ง๋ค๊ธฐ ์ํ ํ๋ก๊ทธ๋๋ฐ ํ์ด๋ผ ํ ์ ์์ต๋๋ค.
- Java์ ํ์ฉ๋๊ฐ ๋์์ก๊ณ ๊ทธ์ ๋ฐ๋ผ์ ํ๋ก์ ํธ ๊ท๋ชจ๋ ์ปค์ก์ต๋๋ค. Java๋ฅผ ์ด์ฉํ ๊ธฐ์ ์ JSP, MyBatis, JPA ๋ฑ ์ฌ๋ฌ๊ฐ์ง๊ฐ ์๋๋ฐ ์ฆ, ์ด ๊ธฐ์ ๋ค์ด ํ๋ก์ ํธ์ ๋ง์ด ์ฐ์ธ๋ค๊ณ ํ ์ ์์ต๋๋ค. Spring์ ์ด ๊ธฐ์ ๋ค์ ๋ ํธํ๊ฒ ์ฌ์ฉํ๊ธฐ ์ํด ๋ง๋ค์ด์ง ๊ฒ์
๋๋ค.
- ํ๋ก์ ํธ๋ฅผ ์งํํ๋ค ๋ณด๋ฉด ์๋ฌด๋ฆฌ ๋ถ์
์ ํด๋ ๋ถ๋ช
์ค๋ณต๋๋ ์ฝ๋๊ฐ ๋ํ๋ฉ๋๋ค. Spring์ ์ด๋ฐ ์ค๋ณต์ฝ๋์ ์ฌ์ฉ๋ฅ ์ ์ค์ฌ์ฃผ๊ณ , ๋น์ฆ๋์ค ๋ก์ง์ ๋ ๊ฐ๋จํ๊ฒ ํด์ค ์ ์์ต๋๋ค.
- Spring์ ์ฌ์ฉํ๋ฉด ๋ค๋ฅธ ์ฌ๋์ ์ฝ๋๋ฅผ ์ฐธ์กฐํ์ฌ ์ฐ๊ธฐ ํธ๋ฆฌํ๋ฐ ์ด ๋ง์ ์๋ฏธ๋ ์คํ์์ค๋ฅผ ์ข๋ ํจ์จ์ ์ผ๋ก ๊ฐ์ ธ๋ค ์ฐ๊ธฐ ์ข์ ๊ตฌ์กฐ๋ผ๋ ๊ฒ์
๋๋ค.
- ๊ฒฐ๋ก ์ ์ผ๋ก Spring์ด๋ Java ๊ธฐ์ ๋ค์ ๋ ์ฝ๊ฒ ์ฌ์ฉํ ์ ์๊ฒ ํด์ฃผ๋ ์คํ์์ค ํ๋ ์ ์ํฌ์
๋๋ค.
์คํ๋ง ์ฃผ์ ํน์ง
- Spring์ ๊ฐ๋ฐ์ ๋ ์ฝ๊ฒ ํด์ฃผ๋ ํ๋ก๊ทธ๋จ ํ(๋ผ๋)์
๋๋ค. ๊ฐ๋ฐ์ ๋ ์ฝ๊ฒ ํด์ฃผ๋ ๊ธฐ์ ๋ค์ด Spring์ ์กด์ฌํ๋๋ฐ, IoC, Di, AOP ๋ฑ์ด ์์ต๋๋ค.
- ๊ฐ๋ฐ์ ๋ ์ฝ๊ฒ ํด์ฃผ๋ ๊ฒ๋ค ์ค ๋ช๊ฐ์ง๋ฅผ ์์๋ณด๊ฒ ์ต๋๋ค.
1. IoC(Inversion of Control, ์ ์ด ๋ฐ์ )
- ๊ฐ๋ฐ์๋ Java ์ฝ๋ฉ์ new ์ฐ์ฐ์, ์ธํฐํ์ด์ค ํธ์ถ, ๋ฐ์ดํฐ ํด๋์ค ํธ์ถ ๋ฐฉ์์ผ๋ก ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ์๋ฉธ์ํต๋๋ค.
- IoC๋ ์ธ์คํด์ค (๊ฐ์ฒด)์ ์์ฑ๋ถํฐ ์๋ฉธ๊น์ง ๊ฐ์ฒด ์๋ช
์ฃผ๊ธฐ ๊ด๋ฆฌ๋ฅผ ๊ฐ๋ฐ์๊ฐ ํ๋๊ฒ ์๋ ์คํผ๋ง(์ปจํ
์ด๋)๊ฐ ๋์ ํด์ฃผ๋ ๊ฒ์ ๋งํฉ๋๋ค.
- IoC๋ ๊ฐ๋ฐ์๊ฐ ์ค์ํ ์ ์๋ ์๋ช
์ฃผ๊ธฐ ๊ด๋ฆฌ๋ฅผ ๋์ ํด์ค๋๋ค.
- ํ๋ก์ ํธ์ ๊ท๋ชจ๊ฐ ์ปค์ง์๋ก ๊ฐ์ฒด์ ์์์ ์ด์ฉํ๋ ๋ฐฉ๋ฒ์ด ๋ ๋ณต์กํด์ง๊ณ ์ด๋์ ์ฝ๋๊ฐ ๊ผฌ์ผ์ง ๋ชจ๋ฅด๋ ๊ฒ์ Spring์ IoC๋ ์๋์ผ๋ก ๊ด๋ฆฌํด์ค๋๋ค.
- ์ฆ, ์ ์ด๊ถ์ด ๊ฐ๋ฐ์๊ฐ ์๋ IoC์๊ฒ ์์ผ๋ฉฐ IoC๊ฐ ๊ฐ๋ฐ์์ ์ฝ๋๋ฅผ ํธ์ถํ์ฌ ๊ทธ ์ฝ๋๋ก ์๋ช
์ฃผ๊ธฐ๋ฅผ ์ ์ดํ๋ ๊ฒ์
๋๋ค.
2. DI(Dependency Injection, ์์กด์ฑ ์ฃผ์
)
- ํ๋ก๊ทธ๋๋ฐ์์ ๊ตฌ์ฑ์์ ๊ฐ์ ์์กด ๊ด๊ณ๊ฐ ์์ค์ฝ๋ ๋ด๋ถ๊ฐ ์๋ ์ธ๋ถ์ ์ค์ ํ์ผ์ ํตํด ์ ์๋๋ ๋ฐฉ์์
๋๋ค.
- ์ฝ๋ ์ฌ์ฌ์ฉ์ ๋์ฌ ์์ค์ฝ๋๋ฅผ ๋ค์ํ ๊ณณ์ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ ๋ชจ๋๊ฐ์ ๊ฒฐํฉ๋๋ ๋ฎ์ถ ์ ์์ต๋๋ค.
- ์ฝ๊ฒ ๋งํ์๋ฉด ๊ฒ์ ์บ๋ฆญํฐ๋ผ๋ ํ๋์ ๊ฐ์ฒด๊ฐ ์กด์ฌํ๋๋ฐ, ๊ทธ ๊ฐ์ฒด๋ฅผ ๋ ์ ์ด์ฉํ๊ธฐ ์ํด์ ๋ฌด๊ธฐ, ๋ฐฉํจ ๋ฑ ์์ดํ
์ ๊ฐ์ ธ์ ๊ฒฐํฉ์ํค๋ ๊ฒ์
๋๋ค. ์ด ๊ฐ์ฒด๋ ๋ฌด๊ธฐ์ ๋ฐฉํจ๋ฅผ ๋บ๋ค ๊ผ๋ค ์์ ์์ฌ๋ก ํ ์ ์์ผ๋ฉฐ ์์ดํ
์ ๊ฐ์๋ผ์ฐ๋๋ฐ ์ด๋ค ์ํฉ์ ๊ตฌ์ ๋ฐ์ง๋ ์์ต๋๋ค.
- Java์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ๊ฐ์ ธ์ค๋ ๊ธฐ๋ฅ์ ์ธ๋ถ์ Oracle Database๋ฅผ ์ฌ์ฉํ ์๋ ์๊ณ , JDBC, iBatis, JPA ๋ฑ ๋ค๋ฅธ ํ๋ ์ ์ํฌ๋ฅผ ์ด์ฉํด ์งค ์๋ ์์ต๋๋ค. ์ด๋ Spring์ ์ด์ฉํ๋ฉด ๊ทธ๋๋ง๋ค ํ์ํ ๋ถ๋ถ์ ๋บ๋ค ๊ผ๋ค ํ๋ฉด์ ์ ์ ํ ์ํฉ์ ํ์ํ ๊ธฐ๋ฅ์ ํด๋ผ ์ ์์ต๋๋ค. ex) spring-boot-starter-data-jpa, spring-boot-starter-data-mustache
3. AOP(Aspect Object Programming, ๊ด์ ์งํฅ ํ๋ก๊ทธ๋๋ฐ)
- ๋ก๊น
, ํธ๋์ญ์
, ๋ณด์ ๋ฑ ์ฌ๋ฌ ๋ชจ๋์์ ๊ณตํต์ ์ผ๋ก ์ฌ์ฉํ๋ ๊ธฐ๋ฅ์ ๋ถ๋ฆฌํ์ฌ ๊ด๋ฆฌ ํ ์ ์์ต๋๋ค.
- ๊ฐ๊ฐ์ ํด๋์ค๊ฐ ์๋ค๊ณ ๊ฐ์ ํฉ๋๋ค. ๊ฐ ํด๋์ค๋ค์ ์๋ก ์ฝ๋์ ๊ธฐ๋ฅ๋ค์ด ์ค๋ณต๋๋ ๋ถ๋ถ์ด ๋ง์ต๋๋ค. ์ฝ๋๊ฐ ์ค๋ณต๋ ๊ฒฝ์ฐ ์ค์ฉ์ฑ๊ณผ ๊ฐ๋
์ฑ ๋ฐ ๊ฐ๋ฐ ์๋์ ์ข์ง ์์ต๋๋ค. ์ค๋ณต๋ ์ฝ๋๋ฅผ ์ต๋ํ ๋ฐฐ์ ํ๋ ๋ฐฉ๋ฒ์ ์ค๋ณต๋๋ ๊ธฐ๋ฅ๋ค์ ์ ๋ถ ๋นผ๋์ ๋ค ๊ทธ ๊ธฐ๋ฅ์ด ํ์ํ ๋๋ง ํธ์ถํ์ฌ ์ฐ๋ฉด ํจ์ฌ ํจ์จ์ฑ์ด ์ข์ต๋๋ค.
- ์ฆ, AOP๋ ์ฌ๋ฌ ๊ฐ์ฒด์ ๊ณตํต์ผ๋ก ์ ์ฉํ ์ ์๋ ๊ธฐ๋ฅ์ ๊ตฌ๋ถํจ์ผ๋ก์จ ์ฌ์ฌ์ฉ์ฑ์ ๋์ฌ์ฃผ๋ ํ๋ก๊ทธ๋๋ฐ ๊ธฐ๋ฒ์
๋๋ค.
4. POJO(Plain Old Java Object) ๋ฐฉ์
- POJO๋ Java EE๋ฅผ ์ฌ์ฉํ๋ฉด์ ํด๋น ํ๋ซํผ์ ์ข
์๋์ด ์๋ ๋ฌด๊ฑฐ์ด ๊ฐ์ฒด๋ค์ ๋ง๋๋ ๊ฒ์ ๋ฐ๋ฐํ์ฌ ๋ํ๋ ์ฉ์ด์
๋๋ค.
- ๋ณ๋์ ํ๋ ์ ์ํฌ ์์ด Java EE๋ฅผ ์ฌ์ฉํ ๋์ ๋นํด ์ธํฐํ์ด์ค๋ฅผ ์ง์ ๊ตฌํํ๊ฑฐ๋ ์์๋ฐ์ ํ์๊ฐ ์์ด ๊ธฐ์กด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ง์ํ๊ธฐ ์ฉ์ดํ๊ณ , ๊ฐ์ฒด๊ฐ ๊ฐ๋ณ์ต๋๋ค.
- ์ฆ, getter/setter๋ฅผ ๊ฐ์ง ๋จ์ํ ์๋ฐ ์ค๋ธ์ ํธ๋ฅผ ๋งํฉ๋๋ค.
ํด๋น์๋ฃ ์ถ์ฒ๋ ์ฌ๊ธฐ๋ฅผ ํด๋ฆญํด์ฃผ์ธ์!