SpringFramework 02. DI - swkim0128/PARA GitHub Wiki
EJB๋ฅผ ์ฌ์ฉํ๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์์ฑ์ ์ฝ๊ฒ ํ ์ ์๋ค.
Low Level์ ํธ๋์ญ์ ์ด๋ ์ํ๊ด๋ฆฌ, ๋ฉํฐ ์ฐ๋ ๋ฉ, ๋ฆฌ์์ค ํ๋ง๊ณผ ๊ฐ์ ๋ณต์กํ Low Level์ API ๋ฐ์๋ฅผ ์ดํดํ์ง ๋ชปํ๋๋ผ๋ ์๋ฌด ๋ฌธ์ ์์ด ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ ์ ์๋ค.
EJB ํ์ค์์์ ๋ฐ์์ ์ด๋ ต๋ค.
- ์ฝ๋ ์์ ํ ๋ฐ์ํ๋ ๊ณผ์ ์์ฒด๊ฐ ๊ฑฐ์ฐฝํด ๊ธฐ๋ฅ์ ์ข์ง๋ง ๋ณต์กํ ์คํ์ผ๋ก ์ธํ ๊ฐ๋ฐ์ ํจ์จ์ฑ์ด ๋จ์ด์ง.
- ์ดํ๋ฆฌ์ผ์ด์ ์ ํ ์คํธํ๊ธฐ ์ํด์๋ ๋ฐ๋์ EJB์๋ฒ๊ฐ ํ์ํ๋ค.
์น ์ฌ์ดํธ๊ฐ ์ ์ ์ปค์ง๋ฉด์ ์ํฐํ๋ผ์ด์ฆ๊ธ์ ์๋น์ค๊ฐ ํ์ํ๊ฒ ๋จ
- ์ธ์ ๋น์์ Transaction ๊ด๋ฆฌ๊ฐ ์ฉ์ดํจ.
- ๋ก๊ธด, ๋ถ์ฐ์ฒ๋ฆฌ, ๋ณด์ ๋ฑ
์๋ฐ ์ง์์์๋ EJB๊ฐ ์ํฐํ๋ผ์ด์ฆ ๊ธ ์๋น์ค๋ก ๊ฐ๊ด์ ๋ฐ๊ฒ ๋จ
- EJB ์คํ์ ์ ์๋ ์ธํฐํ์ด์ค์ ๋ฐ๋ผ ์ฝ๋๋ฅผ ์์ฑํ๋ฏ๋ก ๊ธฐ์กด์ ์์ฑ๋ POJO๋ฅผ ๋ณ๊ฒฝํด์ผ ํจ
- ์ปจํ ์ด๋์ ๋ฐฐํฌ๋ฅผ ํด์ผ ํ ์คํธ๊ฐ ๊ฐ๋ฅํด ๊ฐ๋ฐ ์๋๊ฐ ์ ํ๋จ
- ๋ฐฐ์ฐ๊ธฐ ์ด๋ ต๊ณ , ์ค์ ํด์ผ ํ ๋ถ๋ถ์ด ๋ง์.
- EJB๋ RMI๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ์๋ฒ์ด๋ฏ๋ก ๋ฌด๊ฑฐ์ด Container์ด๋ค.
Rod Johnson์ด 'Expert One-on-One J2EE Development without EJB'๋ผ๋ ์ ์์์ EJB๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ์ํฐํ๋ผ์ด์ฆ ์ดํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ๋ ๋ฐฉ๋ฒ์ ์๊ฐํจ(์คํ๋ง์ ๋ชจํ)
- AOP๋ DI๊ฐ์ ์๋ก์ด ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ๋ฒ๋ก ์ผ๋ก ๊ฐ๋ฅ
- POJO๋ก ์ ์ธ์ ์ธ ํ๋ก๊ทธ๋๋ฐ ๋ชจ๋ธ์ด ๊ฐ๋ฅํด์ง
์ ์ฐจ POJO + ๊ฒฝ๋ ํ๋ ์ ์ํฌ๋ฅผ ์ฌ์ฉํ๊ธฐ ์์
POJO(Plain Old Java Object)
- ํน์ ํ๋ ์์ํฌ๋ ๊ธฐ์ ์ ์์กด์ ์ด์ง ์์ ์๋ฐ ๊ฐ์ฒด
- ํน์ ๊ธฐ์ ์ ์ข ์์ ์ด์ง ์๊ธฐ ๋๋ฌธ์ ์์์ฑ, ์ด์์ฑ ํฅ์
- Plain : component interface๋ฅผ ์์๋ฐ์ง ์๋ ํน์ง (ํน์ ํ๋ ์์ํฌ์ ์ข ์๋์ง ์๋)
- Old : EJB ์ด์ ์ java class๋ฅผ ์๋ฏธ
๊ฒฝ๋ ํ๋ ์์ํฌ
- EJB๊ฐ ์ ๊ณตํ๋ ์๋น์ค๋ฅผ ์ง์ํด ์ค ์ ์๋ ํ๋ ์์ํฌ
- Hiberante, jDO, iBatis(MyBatis), Spring)
POJO + Frmawork
- EJB์๋ฒ์ ๊ฐ์ ๊ฑฐ์ฐฝํ ์ปจํ ์ด๋๊ฐ ํ์์๋ค.
- ์คํ์์ค ํ๋ ์์ํฌ๋ผ ์ฌ์ฉ์ด ๋ฌด๋ฃ.
- ๊ฐ์ข ๊ธฐ์ ์ฉ ์ดํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ ํ์ํ ์๋นํ ๋ง์ ๋ผ์ด๋ธ๋ฒ๋ฆฌ๋ฝ ์ง์
- ์คํ๋ง ํ๋ ์์ํฌ๋ ๋ชจ๋ ํ๋ซํผ์์ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
- ์คํ๋ง์ ์น ๋ถ์ผ ๋ฟ๋ง ์๋๋ผ ์ดํ๋ฆฌ์ผ์ด์ ๋ฑ ๋ชจ๋ ๋ถ์ผ์ ์ ์ฉ์ด ๊ฐ๋ฅํ ๋ค์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
์ํฐํ๋ฆฌ์ด์ฆ ๊ธ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค๊ธฐ ์ํ ๋ชจ๋ ๊ธฐ๋ฅ์ ์ข ํฉ์ ์ผ๋ก ์ ๊ณตํ๋ ๊ฒฝ๋ํ ๋ ์๋ฃจ์ ์ด๋ค.
JEE(Java Enterprise Edition)๊ฐ ์ ๊ณตํ๋ ๋ค์์ ๊ธฐ๋ฅ์ ์ง์ํ๊ณ ์๊ธฐ ๋๋ฌธ์ JEE๋ฅผ ๋์ฒดํ๋ Framework๋ก ์๋ฆฌ์ก๊ณ ์๋ค.
SpringFramework๋ JEE๊ฒ ์ ๊ณตํ๋ ๊ฐ์ํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ๊ฒ ๋ฟ๋ง ์๋๋ผ, DI(Dependency Injection)์ด๋ AOP(Aspect Oriented Programming)์ ๊ฐ์ ๊ธฐ๋ฅ๋ ์ง์ํ๋ค.
์คํ๋ง ํ๋ ์์ํฌ๋ ์๋ฐ๋ก ์ํฐํ๋ผ์ด์ฆ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค ๋ ํฌ๊ด์ ์ผ๋ก ์ฌ์ฉํ๋ ํ๋ก๊ทธ๋๋ฐ ๋ฐ Configuration Model์ ์ ๊ณตํด ์ฃผ๋ Framework๋ก Applicatoin ์์ค์ ์ธํ๋ผ ์คํธ๋ญ์ณ๋ฅผ ์ ๊ณต
์ฆ, ๊ฐ๋ฐ์๊ฐ ๋ณต์กํ๊ณ ์ค์ํ๊ธฐ ์ฌ์ด Low level์ ์ ๊ฒฝ ์ฐ์ง ์๊ณ Business Login๊ฐ๋ฐ์ ์ ๋ ํ ์ ์๋๋ก ํด์ค๋ค.
-
POJO
ํน์ ํ๊ฒฝ์ด๋ ๊ธฐ์ ์ ์ข ์ก์ ์ด์ง ์์ ๊ฐ์ฒด์งํฅ ์๋ฆฌ์ ์ถฉ์คํ ์๋ฐ ๊ฐ์ฒด
ํ ์คํธํ๊ธฐ ์ฉ์ดํ๋ฉฐ, ๊ฐ์ฒด ์งํฅ ์ค๊ณ๋ฅผ ์์ ๋กญ๊ฒ ์ ์ฉํ ์ ์๋ค.
-
PSA
๊ด๊ฒฝ๊ณผ ์ธ๋ถ ๊ธฐ์ ์ ๋ณ๊ฒฝ๊ณผ ๊ด๊ณ์์ด ์ผ๊ด๋ ๋ฐฉ์์ผ๋ก ๊ธฐ์ ์ ์ ๊ทผํ ์ ์๊ฒ ํด์ฃผ๋ ์ค๊ณ ์์น
ํธ๋์ญ์ ์ถ์ํ, OXM ์ถ์ํ, ๋ฐ์ดํฐ ์ก์ธ์ค์ Exception ๋ณ๊ด ๊ธฐ๋ฅ ๋ฑ ๊ธฐ์ ์ ์ธ ๋ณต์กํจ์ ์ถ์ํ๋ฅด ํตํด Low Level์ ๊ธฐ์ ๊ตฌํ ๋ถ๋ถ๊ณผ ๊ธฐ์ ์ ์ฌ์ฉํ๋ ์ธํฐํ์ด์ค๋ก ๋ถ๋ฆฌ
์๋ฅผ ๋ค์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ด๊ณ์์ด ๋์ผํ๊ฒ ์ ์ฉํ ์ ์๋ ํธ๋์ญ์ ์ฒ๋ฆฌ๋ฐฉ์.
-
IoC
DI๋ ์ ์ฐํ๊ฒ ํ์ฅ ๊ฐ๋ฅํ ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด ๋๊ณ ๊ฐ์ฒด๊ฐ์ ์์กด ๊ด๊ณ๋ ์ธ๋ถ์์ ๋ค์ด๋๋ฏนํ๊ฒ ์ค์ .
-
AOP
๊ด์ฌ์ฌ์ ๋ถ๋ฆฌ๋ฅผ ํตํด์ ์ํํธ์จ์ด์ ๋ชจ๋์ฑ์ ํฅ์
๊ณตํต ๋ชจ๋์ ์ฌ๋ฌ ์ฝ๋์ ์ฝ๊ฒ ์ ์ฉ๊ฐ๋ฅ.
-
๊ฒฝ๋์ปจํ ์ด๋
์คํ๋ง์ ์๋ฐ๊ฐ์ฒด๋ฅผ ๋ด๊ณ ์๋ ์ปจํ ์ด๋์ด๋ค.
์คํ๋ง ์ปจํ ์ด๋๋ ์ด๋ค ์๋ฐ ๊ฐ์ฒด์ ์์ฑ๊ณผ ์๋ฉธ๊ณผ ๊ฐ์ ๋ผ์ดํ ์ฌ์ดํด์ ๊ด๋ฆฌ
์ธ์ ๋ ์ง ์คํ๋ง ์ปจํ ์ด๋๋ก๋ถํฐ ํ์ํ ๊ฐ์ฒด๋ฅผ ๊ฐ์ ธ์ ์ฌ์ฉํ ์ ์๋ค.
-
DI ํจํด ์ง์
์คํ๋ง์ ์ค์ ํ์ผ์ด๋, ์ด๋ ธํ ์ด์ ์ ํตํด์ ๊ฐ์ฒด ๊ฐ์ ์์กด ๊ด๊ณ๋ฅผ ์ค์ ํ ์ ์๋ค.
๋ฐ๋ผ์, ๊ฐ์ฒด๋ ์์กดํ๊ณ ์๋ ๊ฐ์ฒด๋ฅผ ์ง์ ์์ฑํ๊ฑฐ๋ ๊ฒ์ํ ํ์๊ฐ ์๋ค.
-
AOP ์ง์
AOP๋ ๋ฌธ์ ๋ฅผ ๋ฐ๋ผ๋ณด๋ ๊ด์ ์ ๊ธฐ์ค์ผ๋ก ํ๋ก๊ทธ๋๋ฐํ๋ ๊ธฐ๋ฒ์ด๋ค.
์ด๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฝํ๊ธฐ ์ํ ํต์ฌ๊ด์ฌ ์ฌํญ๊ณผ ์ ์ฒด์ ์ ์ฉ๋๋ ๊ณตํต๊ด์ฌ ์ฌํญ์ ๊ธฐ์ค์ผ๋ก ํ๋ก๊ทธ๋๋ฐํจ์ผ๋ก์ ๊ณตํต ๋ชจ๋์ ์ฌ๋ฌ ์ฝ๋์ ์ฝ๊ฒ ์ ์ฉํ ์ ์๋๋ก ํ๋ค.
์คํ๋ง์ ์์ฒด์ ์ผ๋ก ํ๋ก์ ๊ธฐ๋ฐ์ AOP๋ฅผ ์ง์ํ๋ฏ๋ก ํธ๋์ญ์ ์ด๋, ๋ก๊น , ๋ณด์๊ณผ ๊ฐ์ด ์ฌ๋ฌ ๋ชจ๋์์ ๊ณตํต์ผ๋ก ํ์๋ก ํ์ง๋ง ์ค์ ๋ชจ๋์ ํต์ฌ์ด ์๋ ๊ธฐ๋ฅ๋ค์ ๋ถ๋ฆฌํ์ฌ ๊ฐ ๋ชจ๋์ ์ ์ฉ์ด ๊ฐ๋ฅํ๋ค.
-
POJO ์ง์
ํน์ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๊ฑฐ๋ ๋๋ ํด๋์ค๋ฅผ ์์ํ์ง ์๋ ์ผ๋ฐ ์๋ฐ ๊ฐ์ฒด ์ง์.
์คํ๋ง ์ปจํ ์ด๋์ ์ ์ฅ๋๋ ์๋ฐ ๊ฐ์ฒด๋ ํน์ ํ ์ธํฐํ์ด์ฌ๋ฅด ๊ตฌํํ๊ฑฐ๋, ํด๋์ค ์์ ์์ด๋ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
์ผ๋ฐ์ ์ธ ์๋ฐ ๊ฐ์ฒด๋ฅผ ์นญํ๊ธฐ ์ํ ๋ณ์นญ ๊ฐ๋ ์ด๋ค.
-
IoC
IoC๋ ์คํ๋ง์ด ๊ฐ๊ณ ์๋ ํต์ฌ์ ์ธ ๊ธฐ๋ฅ์ด๋ค.
์๋ฐ์ ๊ฐ์ฒด ์์ฑ ๋ฐ ์์กด ๊ด๊ณ์ ์์ด ๋ชจ๋ ์ ์ด๊ถ์ ๊ฐ๋ฐ์์๊ฒ ์์๋ค.
Servlet๊ณผ EJB๊ฐ ๋ํ๋๋ฉด์ ๊ธฐ์กด์ ์ ์ด๊ถ์ด Servlet Container ๋ฐ EJB Container์๊ฒ ๋์ด๊ฐ๊ฒ ๋๋ค.
๋จ, ๋ชจ๋ ๊ฐ์ฒด์ ์ ์ด๊ถ์ด ๋์ด๊ฐ ๊ฒ์ ์๋๊ณ Servlet, EJB์ ๋ํ ์ ์ด๊ถ์ ์ ์ธํ ๋๋จธ์ง ๊ฐ์ฒด ์ ์ด๊ถ์ ๊ฐ๋ฐ์๋ค์ด ๋ด๋นํ๊ณ ์๋ค.
์คํ๋ง์์๋ ๊ฐ์ฒด์ ๋ํ ์์ฑ๊ณผ ์๋ช ์ฃผ๊ธฐ๋ฅผ ๊ด๋ฆฌํ ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๊ณ ์๋๋ฐ ์ด๋ฐ ์ด์ ๋ก [Spring Container] ๋๋ [IoC Container]๋ผ๊ณ ๋ถ๋ฅด๊ธฐ๋ ํ๋ค.
-
์คํ๋ง์ ํธ๋์ญ์ ์ฒ๋ฆฌ๋ฅผ ์ํ ์ผ๊ด๋ ๋ฐฉ๋ฒ์ ์ ๊ณต
JDBC, JTA ๋๋ ์ปจํ ์ด๋๊ฐ ์ ๊ณตํ๋ ํธ๋์ญ์ ์ ์ฌ์ฉํ๋ , ์ค์ ํ์ผ์ ํตํด ํธ๋์ญ์ ๊ด๋ จ ์ ๋ณด๋ฅผ ์ ๋ ฅํ๊ธฐ ๋๋ฌธ์ ํธ๋์ญ์ ๊ตฌํ์ ์๊ด์์ด ๋์ผํ ์ฝ๋๋ฅผ ์ฌ๋ฌ ํ๊ฒฝ์์ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
-
์คํ๋ง์ ์์์ฑ๊ณผ ๊ด๋ จ๋ ๋ค์ํ API๋ฅผ ์ง์
์คํ๋ง์ JDBC๋ฅผ ๋น๋กฏํ์ฌ iBatis, MyBatis, Hibernate, JPA ๋ฑ DB์ฒ๋ฆฌ๋ฅผ ์ํด ๋๋ฆฌ ์ฌ์ฉ๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฐ๋์ ์ง์ํ๊ณ ์๋ค.
-
์คํ๋ง์ ๋ค์ํ API์ ๋ํ ์ฐ๋์ ์ง์
์คํ๋ง์ JMS, ๋ฉ์ผ, ์ค์ผ์ฅด๋ง ๋ฑ ์ํฐํ๋ผ์ด์ฆ ์ดํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ ํ์ํ ๋ค์ํ API๋ฅผ ์ค์ ํ์ผ๊ณผ ์ด๋ ธํ ์ด์ ์ ํตํด์ ์์ฝ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ์ง์ํ๊ณ ์๋ค.