[Spring] Spring์ ์ฐ๋ ์ด์ : Spring์ ๋ฑ์ฅ ๋ฐฐ๊ฒฝ๊ณผ ํน์ง feat. EJB
๐ ๋ค์ด๊ฐ๋ฉด์
์ Spring์ ์ฌ์ฉํ ๊น?
ํ์ฌ ํ์
์์ ๊ฐ์ฅ ๋ง์ด ์ฐ์ด๋ ํ๋ ์์ํฌ๋ ๋จ์ฐ Spring์ด 1์์ด๋ค.
๊ทธ๋์ ๋๋ Spring, SpringBoot๋ฅผ ๋ฐฐ์ฐ๊ณ ์์ง๋ง Spring์ ์ด๋ค ์ ์ด ์ข์์ง, Spring์ ์ ์ฐ๋์ง๋ ๋ชฐ๋๋ค.
๊ทธ๋ฅ ๋จ๋ค ๋ง์ด ์ฐ๊ธธ๋ ์์ํ์ง๋ง ์ผ์ง..ใ
๋ฐฐ์ฐ๋ค ๋ณด๋ ์๊ฐ๋ณด๋ค ๊ต์ฅํ ํธ๋ฆฌํ๋ฉด์๋ ๋น ์ฃผ์
์์๋ ์์กด์ฑ ๋ฌธ์ ๋ฑ ์ดํดํด์ผ ํ ๋ถ๋ถ์ด ๋ง์ ๋ธ๋ก๊ทธ์ Spring์ ์๋ฆฌ๋ฅผ ์ ๋ฆฌํด๊ฐ๋ฉฐ ์ ๋๋ก ๊ณต๋ถํด๋ณด๊ณ ์ถ๋ค๊ณ ์๊ฐํ๊ฒ ๋์๋ค. ๋จ์ํ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ ๊ฐ๋ฐ์๊ฐ ์๋๋ผ ํ์ฅ์ฑ, ์ ์ง๋ณด์๊น์ง ๊ณ ๋ คํ๋ ์ค๊ณ ๋ฅ๋ ฅ์ ๊ฐ์ถ ๊ฐ๋ฐ์๊ฐ ๋๊ณ ์ถ๊ธฐ ๋๋ฌธ์ด๋ค.
๊ฐ์ ๋ค์ ๋ด์ฉ์ ์ต๋ํ ๊ตฌ๊ธ๋ง ํ๊ณ ์์ด ์์๋ ์ฐพ์๋ณด๋ฉฐ ํ ๋ฒ ์ฐพ์๋ณด์๋ค.
๐ก ์ฃผ์
์ด๋ฒ ํฌ์คํ ์์๋ ๊ทธ ๋ค์ง์ ์ฒซ ๋ฒ์งธ ๋์ฝ์ผ๋ก, Spring Framework๊ฐ ํ์ํ๊ฒ ๋ ๋ฐฐ๊ฒฝ๊ณผ Spring์ด ํด๊ฒฐํ๊ณ ์ ํ๋ ์ด์ ํ๋ ์์ํฌ์ ๋ฌธ์ ์ , Spring์ ํต์ฌ์ ์ธ ํน์ง์ ๋ํด ์์๋ณด๊ณ ์ ํ๋ค.
โ๏ธ Spring ์ด์ ์ "EJB"๊ฐ ์์๋ค
Spring์ EJB์ ํ๊ณ๋ฅผ ๊ทน๋ณตํ๊ธฐ ์ํด ๋ฑ์ฅํ๋ค๊ณ ํ๋ค. ๊ทธ๋ ๋ค๋ฉด EJB๋ ๋ฌด์์ธ๊ฐ?
EJB๋?
- Enterprise JavaBean
- ์๋ฐ ํ๋ซํผ์ ๊ธฐ๋ฐ์ผ๋ก ํ ์๋ฒ ์ฌ์ด๋ ์ปดํฌ๋ํธ ๋ชจ๋ธ
- ์ํฐํ๋ผ์ด์ฆ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ ๋จ์ํํ๊ณ ํ์คํ๋ ๋ฐฉ๋ฒ์ผ๋ก ๋น์ฆ๋์ค ๋ก์ง์ ๊ตฌํํ ์ ์๋๋ก ์ค๊ณ๋จ
1990๋
๋ ํ๋ฐ- 2000๋
๋ ์ด๋ฐ๊น์ง ๊ธฐ์
์ ํ๋ฆฌ์ผ์ด์
์ ๋ณต์ก์ฑ์ด ๊ธ๊ฒฉํ๊ฒ ์ฆ๊ฐํ๋ฉฐ,
๋๊ท๋ชจ ํธ๋์ญ์
์ฒ๋ฆฌ, ๋ถ์ฐ ์์คํ
, ๋ณด์ ์๊ตฌ์ฌํญ ๋ฑ ๊ฐ๋ฐ์๋ค์ ๋ณต์กํ ์๊ตฌ์ฌํญ๋ค์ ๊ด๋ฆฌํด์ผ ํ๋ค.
์ด๋ฅผ ์ง์ํ๊ธฐ ์ํด ๋น์ฆ๋์ค ๋ก์ง์ ์บก์ํํ๋ ํ์คํ๋ ์ปดํฌ๋ํธ ๋ชจ๋ธ์ ์ ๊ณตํ์ฌ ์ผ๊ด๋ ๊ฐ๋ฐ ๋ฐฉ์์ ์ง์ํ๋ EJB๊ฐ ์๋ฐ EE(Enterprise Edition)์ ํต์ฌ ์ปดํฌ๋ํธ๋ก ๋์ ๋์๋ค.
EJB์ ์ฃผ์ ๋ชฉ์
- ํ์คํ๋ ์ปดํฌ๋ํธ ๋ชจ๋ธ ์ ๊ณต: ์ผ๊ด๋ ๋ฐฉ์์ผ๋ก ๋น์ฆ๋์ค ๋ก์ง์ ๊ตฌํํ ์ ์๋๋ก ํ์คํ๋ ์ปดํฌ๋ํธ ๋ชจ๋ธ์ ์ ๊ณต.
- ์ธํ๋ผ ์๋น์ค ์๋ํ: ํธ๋์ญ์ ๊ด๋ฆฌ, ๋ณด์, ์๊ฒฉ ์ ๊ทผ ๋ฑ ์ํฐํ๋ผ์ด์ฆ ์ ํ๋ฆฌ์ผ์ด์ ์ ํ์์ ์ธ ์ธํ๋ผ ์๋น์ค๋ฅผ ์๋์ผ๋ก ์ฒ๋ฆฌํ์ฌ ๊ฐ๋ฐ์๊ฐ ๋น์ฆ๋์ค ๋ก์ง์ ์ง์คํ ์ ์๊ฒ ์ง์.
- ํ์ฅ์ฑ ๋ฐ ๋ถ์ฐ ์ฒ๋ฆฌ ์ง์: ๋ถ์ฐ ํ๊ฒฝ์์์ ์ ํ๋ฆฌ์ผ์ด์ ํ์ฅ์ฑ๊ณผ ์ฑ๋ฅ์ ์ง์ํ์ฌ ๋๊ท๋ชจ ํธ๋์ญ์ ์ฒ๋ฆฌ๋ฅผ ์ฉ์ดํ๊ฒ ํจ.
๐ Spring์ ๋ฑ์ฅ ๋ฐฐ๊ฒฝ
EJB์ ํ๊ณ
EJB๋ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ง๋ง ๋ช ๊ฐ์ง ๋จ์ ์ด ์์๋ค.
1. ํ
์คํธ์ ์ด๋ ค์
๋ถ์ฐ ์ ํ๋ฆฌ์ผ์ด์
์ ๋จ์ผ JVM์์ ์คํ๋๋ ์ ํ๋ฆฌ์ผ์ด์
๋ณด๋ค ํญ์ ํ
์คํธํ๊ธฐ๊ฐ ๋ ์ด๋ ต๋ค.
์๊ฒฉ ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๋ ๋ก์ปฌ ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๋ EJB ์ ํ๋ฆฌ์ผ์ด์
์
์ปจํ
์ด๋ ๋ด์์๋ง ์คํํ ์ ์์ด ์ปจํ
์ด๋ ์๋น์ค์ ๋ํ ์์กด์ฑ์ด ๋์ ๋จ์ ํ
์คํธ๊ฐ ์ด๋ ต๋ค.
2. ๋ณต์กํ ๊ฐ๋ฐ ๊ณผ์
Home Interface: EJB ์ธ์คํด์ค ์์ฑ/์ ๊ฑฐ ๋ด๋น, Remote Interface: ํด๋ผ์ด์ธํธ๊ฐ ํธ์ถํ ๋ฉ์๋ ์ ์, Bean Class: ์ค์ ๋น์ฆ๋์ค ๋ก์ง์ ์ํํ๋ ๊ตฌํ์ฒด
๋ฑ ์ฌ๋ฌ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํด์ผ ํ๊ณ , XML ์ค์ ํ์ผ์ ํ์์ ์ผ๋ก ์์ฑํด์ผ ํ๋ค.
์ด๋ก ์ธํด ๊ฐ๋ฐ ์๋๊ฐ ๋๋ ค์ง๊ณ , XML ์ค์ ์ ์ ์ง๋ณด์๋ ์ด๋ ค์ ๋ค.
3. ๋ฌด๊ฑฐ์ด ์ปจํ ์ด๋
EJB๋ฅผ ์ฌ์ฉํ๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์์ฑ์ ํธํ๊ฒ ํ ์ ์๋ค. ๋ก์ฐ๋ ๋ฒจ์ ํธ๋์ญ์ ์ด๋ ์ํ ๊ด๋ฆฌ, ๋ฉํฐ์ค๋ ๋ฉ, ๋ฆฌ์์ค ํ๋ง๊ณผ ๊ฐ์ ๋ณต์กํ ๋ก์ฐ๋ ๋ฒจ์ API ๋ฐ์๋ฅผ ์ดํดํ์ง ๋ชปํ๋๋ผ๋ ์๋ฌด๋ฐ ๋ฌธ์ ์์ด ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ ์ ์๋ค.
EJB์ ๋ชฉํ๋ ํธ๋ฆฌํ ์ ํ๋ฆฌ์ผ์ด์
๊ฐ๋ฐ์ด์์ง๋ง, ๊ธฐ์ ์ ๋ํด ๊ณผ๋ํ ์์ฌ์ ๋ถ๋ฆฐ ํ์ ๋ถํ์ํ๊ฒ ๋ฌด๊ฑฐ์ ๋ค.
EJB ๊ฐ์ฒด์ ์์ฑ, ์ ๊ฑฐ, ํธ๋์ญ์
๊ด๋ฆฌ, ๋ณด์ ์ค์ ๋ฑ์ ์๋์ผ๋ก ์ฒ๋ฆฌํ์ง๋ง, ์ด๋ก ์ธํด ๋ถํ์ํ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ, ์ค๋ฒํค๋๊ฐ ๋ฐ์ํ๋ค.
4. ์์กด์ฑ ๊ฐํ ์ค๊ณ
EJB๋ JNDI(Java Naming and Directory Interface)๋ฅผ ํตํด ๊ฐ์ฒด๋ฅผ ์ฐพ๋ ๊ตฌ์กฐ๋ก ํน์ ์๋ฒ ํ๊ฒฝ๊ณผ ๋ฐ์ ํ๊ฒ ๊ฒฐํฉ๋ ๊ตฌ์กฐ์ด๋ค.
์ด๋ ์ฝ๋์ ๊ฒฐํฉ๋๋ฅผ ์ฆ๊ฐ์์ผ ์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํ๊ฑฐ๋ ์๋ฒ๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฒ์ด ์ด๋ ต๊ณ , ์ ์ง๋ณด์๋ฅผ ์ด๋ ต๊ฒ ๋ง๋ค์๋ค.
์ด๋ก ์ธํด ๋ฐฐํฌ๋ ์ด๋ ต๊ณ , ์คํ๋ ์ด๋ ต๊ณ , ์ฌ๋ฌ๋ชจ๋ก ๋นํจ์จ์ ์ธ ๋ฉด์ด ์์๊ณ
ํด๊ฒฐํด์ผ ํ ๋ฌธ์ ๋ก ๋จ๊ฒ ๋์๋ค.
Spring์ ๋ฑ์ฅ ๊ณ๊ธฐ
์ด๋ฌํ EJB์ ๋จ์ ์ ํด๊ฒฐํ๊ธฐ ์ํด 2003๋ ๋ก๋ ์กด์จ์ด "Expert One-on-One J2EE Design and Development"๋ผ๋ ์ฑ ์ ์ถ๊ฐํ๋ฉฐ Spring Framework๋ฅผ ๋ฐํํ๋ค.
์ฑ ์ด๋ฐ๋ถ์์ ๋ก๋ ์กด์จ์ EJB๋ ๋ค์๊ณผ ๊ฐ์ ๊ทผ๊ฑฐ๋ก EJB์ ๋ฌธ์ ์ ์ ์ง์ ํ๋ค.
- ํ ์คํธํ๊ธฐ ์ด๋ ต๋ค
- ๋ฐฐํฌ๋ ์ด๋ ต๋ค.
- Remote Interface๋ฅผ ์ฌ์ฉํ๋ EJB๋ ์ค๊ณ๋ ์ด๋ ต๋ค.
EJB๋ฅผ ๋์ฒดํ ๋ฐฉ์์ 3๋ง ๋ผ์ธ ์ ๋์ ์ํ ์ฝ๋๋ฅผ ์์๋ก ๋ค๋ฉฐ ์ค๋ช ํ๋๋ฐ ์ฌ๊ธฐ์์ ์ฌ์ฉ๋ ์์์ฉ ํ๋ ์์ํฌ๊ฐ ๋งค์ฐ ํฅ๋ฏธ๋ก์ ๋ ๊ฐ๋ฐ์๋ค์ด ๋ก๋ ์กด์จ์ ์ค๋ํ์ฌ ์คํ์์ค ํ๋ก์ ํธ๋ฅผ ์์ํ๊ฒ ๋๋ค๊ณ ํ๋ค. ๊ทธ๋ ๊ฒ ์ฐ๋ฆฌ์๊ฒ ์ต์ํ ์คํ๋ง ํ๋ ์์ํฌ๊ฐ ๋ฑ์ฅํ๋ค.
โจ Spring
Spring์ ์ ์: ์คํ๋ง ํ๋ ์์ํฌ๋?
๊ทธ๋ ๋ค๋ฉด ์คํ๋ง์ ๋ญ๋ฐ EJB์ ๋ฌธ์ ์ ์ ํด๊ฒฐํ์๊น? ์ด ์ ์์ ์คํ๋ง์ ํน์ง์ด ๋ค ๋ค์ด๊ฐ ์๋ค.
์๋ฐ ์ํฐํ๋ผ์ด์ฆ ๊ฐ๋ฐ์ ํธํ๊ฒ ํด์ฃผ๋ ์คํ์์ค ๊ฒฝ๋๊ธ ์ ํ๋ฆฌ์ผ์ด์ ํ๋ ์์ํฌ
ํ๋ํ๋ ๋ฏ์ด๋ณด์.
1. ์คํ ์์ค
- ์์ ๋ฑ์ฅ ๊ณ๊ธฐ์์ ์ค๋ช ํ๋ฏ ์คํ ์์ค ํ๋ก์ ํธ๋ก ๋ฐ์ ๋ Spring์ Apache 2.0 ๋ผ์ด์ ์ค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ ์คํ์์ค ํ๋ ์์ํฌ์ด๋ค.
- ๋ฌด๋ฃ์ด๋ฉฐ, ์ ์ธ๊ณ ๊ฐ๋ฐ์๋ค์ด ์ง์์ ์ผ๋ก ๋ฐ์ ์ ์ฐธ์ฌํ๊ณ , ์ปค๋ฎค๋ํฐ๋ ํ๋ฐํ๋ค.
2. ๊ฒฝ๋๊ธ
- ๊ธฐ์กด EJB์ ๋ฌด๊ฒ๊ณ ๋ณต์กํ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ ํ๋ค.
- ํน์ ์ปจํ ์ด๋๊ฐ ๋ฐ๋์ ํ์ํ๋ EJB์ ๋ฌ๋ฆฌ POJO(Plain Old Java Obejct) ๊ธฐ๋ฐ์ผ๋ก ์ค๊ณ๋ ์คํ๋ง์ Tomcat, Jetty, Undertow ๊ฐ์ ๊ฐ๋ฒผ์ด ์น ์๋ฒ์์๋ ์คํ ๊ฐ๋ฅํ๋ค.
- ์ฆ, ๊ฐ๋ฐ์๊ฐ ์ํ๋ ํ๊ฒฝ์์ ์ ์ฐํ๊ฒ ์คํ๋ ์ ์๋ค.
- ๋ํ Java ์ฝ๋์ ์ด๋ ธํ ์ด์ ๊ธฐ๋ฐ์ ์ค์ ์ ์ง์ํ๋ฉฐ XML ์ค์ ๋ ์ต์ํ๋์ด ๊ฐ๋ณ๊ณ ๋จ์ํ๋ค.
3. ์ ํ๋ฆฌ์ผ์ด์ ํ๋ ์์ํฌ
- ์ ํ๋ฆฌ์ผ์ด์ ํ๋ ์์ํฌ: ํน์ ๊ณ์ธต์ด๋, ๊ธฐ์ , ์ ๋ฌด ๋ถ์ผ์ ๊ตญํ๋์ง ์๊ณ ์ ์ธจ๋ฆฌ์ผ์ด์ ์ ์ ์์ญ์ ํฌ๊ดํ๋ ๋ฒ์ฉ์ ์ธ ํ๋ ์์ํฌ
- ๊ฐ๋ฐ์๊ฐ ๋น์ฆ๋์ค ๋ก์ง๋ง ์์ฑํ๋ฉด ๋๋จธ์ง ๊ธฐ๋ฅ(ํธ๋์ญ์ , ๋ณด์, ๊ฐ์ฒด ๊ด๋ฆฌ ๋ฑ)์ ํ๋ ์์ํฌ๊ฐ ์์์ ์ฒ๋ฆฌํ๋ค๋ ๊ฒ ํฌ์ธํธ์ด๋ค.
- EJB, Spring ๋ชจ๋ ์ ํ๋ฆฌ์ผ์ด์ ํ๋ ์์ํฌ์ง๋ง EJB๋ณด๋ค ๊ฐ๋จํ๊ณ ์ ์ฐํ๋ค.
4. ํธํ ์๋ฐ ์ํฐํ๋ผ์ด์ฆ ๊ฐ๋ฐ
- ์คํ๋ง์ ๋ชฉํ๋ ์ฌ๋ฌ ๊ฐ์ง ํต์ฌ ๊ธฐ๋ฅ์ผ๋ก ๋ณต์กํ ๊ฐ๋ฐ์ ๊ฐ๋จํ๊ฒ ํด์ฃผ๋ ๊ฒ์ด๋ค.
Spring์ ํต์ฌ ๊ฐ๋
EJB์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ ํธํ๊ฒ ์๋ฐ ์ํฐํ๋ผ์ด์ฆ๋ฅผ ๊ฐ๋ฐํ๋ ๊ฒ์ ๋ชฉํ๋ก ์คํ๋ง์ ๋ค์๊ณผ ๊ฐ์ ๊ธฐ๋ฅ์ ๊ฐ์ง๊ณ ์๋ค.
๊ฒฝ๋ ์ปจํ ์ด๋
์คํ๋ง์ด ๊ฒฝ๋๊ธ ์ ํ๋ฆฌ์ผ์ด์
ํ๋ ์์ํฌ์ธ ์ด์ ๋,
๊ฒฝ๋ ์ปจํ
์ด๋๋ฅผ ์ฌ์ฉํ์ฌ ์ ํ๋ฆฌ์ผ์ด์
๋ด ํ๋ฆ์ ๊ด๋ฆฌํ๊ณ , ๋ถํ์ํ ๋ฌด๊ฑฐ์ด ์๋ฒ๋ ๋ณต์กํ ์ค์ ์์ด ํ์ํ ๊ธฐ๋ฅ๋ง ์ ๊ณตํ๊ธฐ ๋๋ฌธ์ด๋ค.
- ๊ฐ์ฒด์ ๋ผ์ดํ์ฌ์ดํด ๊ด๋ฆฌ
๊ฐ์ฒด์ ์๋ช ์ฃผ๊ธฐ๋ฅผ ๊ฐ๋ฐ์๊ฐ ์๋๋ผ ์ปจํ ์ด๋์์ ๊ด๋ฆฌํ๋ค. - ์์กด์ฑ ์ฃผ์
์ฒ๋ฆฌ
๊ฐ ๊ฐ์ฒด์์ ์ง์ ํ์ํ ์์กด์ฑ์ ์์ฑํ๊ฑฐ๋ ์ฐพ๋ ๊ฒ์ด ์๋๋ผ ์ปจํ ์ด๋๊ฐ ๊ฐ์ฒด์ ํ์ํ ์์กด์ฑ์ ์ฃผ์ ํ๋ค. - ์ค์ ๊ธฐ๋ฐ ๋์
์ปจํ ์ด๋๋ ์ค์ ํ์ผ+์ด๋ ธํ ์ด์ ์ ๊ธฐ๋ฐํด์ ๊ฐ์ฒด(์คํ๋ง ๋น)์ ์์ฑํ๋ค.
๊ธฐ์กด์ ๋ฌด๊ฑฐ์ด EJB์ ์ปจํ
์ด๋์ ๋ฌ๋ฆฌ ํ์ํ ๊ธฐ๋ฅ๋ง ์ ๊ณตํ์ฌ ์ ํ๋ฆฌ์ผ์ด์
์ ์ฑ๋ฅ์ ์ต์ ํํ๊ณ ,
Spring์ ๋ด์ฅํ ์๋ฒ(์: Tomcat, Jetty ๋ฑ)๋ฅผ ์ฌ์ฉํ์ฌ ๋ณ๋์ ๋ณต์กํ ์ ํ๋ฆฌ์ผ์ด์
์๋ฒ ์ค์ ์์ด ์ ํ๋ฆฌ์ผ์ด์
์ ์คํ ๋ฐ ๋ฐฐํฌํ ์ ์๋ค.
์ ์ด์ ์ญ์ (Inversion of Control, IoC)
๊ฒฝ๋ ์ปจํ
์ด๋์ ํฌ์ธํธ๋ "๊ฐ์ฒด ์๋ช
์ฃผ๊ธฐ ๊ด๋ฆฌ์ ์ฃผ์ฒด"์ด๋ค.
์ ์ด์ ์ญ์ ์ ๊ฒฝ๋ ์ปจํ
์ด๋์ ๊ธฐ๋ฐ์ด ๋๋ ์์น์ด๋ค.
์ ํต์ ์ธ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์์์๋ ๊ฐ๋ฐ์๊ฐ ์ ํ๋ฆฌ์ผ์ด์
์ ํ๋ฆ์ ์ ์ดํ๋ค.
๊ฐ๋ฐ์๊ฐ ์ธ์ ์ด๋ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ํ๊ธฐํ ์ง ์ด๋ค ํ๋ฆ์ผ๋ก ์คํํ ์ง๋ฅผ ๋ชจ๋ ์ ํ๋ค.
์ด๋ ๊ฐ๋ฐ์๊ฐ ๊ฐ์ฒด์ ์๋ช
์ฃผ๊ธฐ๋ฅผ ์ง์ ์๊ฐํด์ผ ํ๋ค๋ ๋ป์ด๋ค.
๊ทธ๋ฌ๋ ์ธ๋ถ ํ๋ ์์ํฌ๋ ์ปจํ
์ด๋๊ฐ ์ ์ด ํ๋ฆ์ ์ ์ดํ๊ฒ ํ๋ค๋ฉด
๊ฐ๋ฐ์๋ ๊ฐ์ฒด์ ์์ฑ, ์ด๊ธฐํ, ์๋ฉธ, ๊ทธ๋ฆฌ๊ณ ์์กด์ฑ ์ฃผ์
์ ์ ๊ฒฝ ์ธ ํ์ ์๋ค.
์ด์ฒ๋ผ ์ ํ๋ฆฌ์ผ์ด์
ํ๋ฆ์ ์ ์ดํ๋ ์ฃผ์ฒด๊ฐ '๊ฐ๋ฐ์'์์ 'ํ๋ ์์ํฌ'๋ก ์ญ์ ๋์ด
๊ฐ๋ฐ์๋ ๊ฐ์ฒด์ ์๋ช
์ฃผ๊ธฐ๋ฅผ ์ธ์ธํ๊ฒ ์ ๊ฒฝ์ฐ์ง ์๊ณ
์ค์ง ๋น์ฆ๋์ค ๋ก์ง์๋ง ์ง์คํ ์ ์๊ฒ ๋์๋ค.
์์กด์ฑ ์ฃผ์ (Dependency Injection, DI)
IoC๋ฅผ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์๋ ์์กด์ฑ ์ฃผ์ (DI)์ ์์กด์ฑ๊ฒ์(DL) ๋ฑ์ด ์๋๋ฐ ์คํ๋ง์ ๊ธฐ๋ณธ์ ์ผ๋ก DI ๋ฐฉ์์ ์ฌ์ฉํ๋ค.
์์กด์ฑ ์ฃผ์
์ ๊ฐ์ฒด ๊ฐ์ ์์กด์ฑ์ ์ง์ ์ค์ ํ๋ ๋์ , ํ์ํ ๊ฐ์ฒด๋ฅผ ์ธ๋ถ์์ ์ฃผ์
ํ๋ ๊ธฐ์ ์ด๋ค.
์ฆ, ํด๋์ค ๊ฐ์ ์์กด๊ด๊ณ๋ฅผ Bean ์ค์ ์ ๊ธฐ๋ฐํ์ฌ ์ปจํ
์ด๋๊ฐ ์๋์ผ๋ก ์ฐ๊ฒฐํด์ฃผ๋ ๋ฐฉ์์ด๋ค.
์์กด์ฑ์ ์ฃผ์ ๋ฐ๋ ๋ฐฉ๋ฒ์ ํฌ๊ฒ 3๊ฐ์ง๊ฐ ์๋ค.
- ์์ฑ์ ์ฃผ์
- ์ธํฐ ์ฃผ์
- ํ๋ ์ฃผ์
์์กด์ฑ ์ฃผ์ ์ ์ฅ์ ์ ๋ค์๊ณผ ๊ฐ๋ค.
- ๊ฒฐํฉ๋ ๊ฐ์: ๊ฐ์ฒด ๊ฐ์ ์ง์ ์ ์ธ ์์กด์ฑ์ด ์ค์ด๋ ๋ค.
- ์ ์ฐ์ฑ ํฅ์: ์์กด์ฑ์ ์ฝ๊ฒ ๊ต์ฒดํ๊ฑฐ๋ ํ์ฅํ ์ ์๋ค.
- ํ ์คํธ ์ฉ์ด์ฑ: Mock ๊ฐ์ฒด๋ฅผ ์ฃผ์ ํ์ฌ ๋จ์ ํ ์คํธ๋ฅผ ์ํํ ์ ์๋ค.
- ์ฌ์ฌ์ฉ์ฑ ์ฆ๊ฐ: ๋ชจ๋ ๊ฐ์ ๋ ๋ฆฝ์ฑ์ด ๋์์ ธ ์ฌ์ฌ์ฉ์ด ์ฉ์ดํ๋ค.
๊ด์ ์งํฅ ํ๋ก๊ทธ๋๋ฐ(Aspect-Oriented Programming, AOP)
๊ด์ ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ํ๋ก๊ทธ๋จ์ ๊ตฌ์ฑํ๋ ํต์ฌ ๋น์ฆ๋์ค ๋ก์ง(์ฃผ๋ ๊ด์ฌ์ฌ)๊ณผ ๊ณตํต์ ์ผ๋ก ํ์ํ ๋ถ๊ฐ ๊ธฐ๋ฅ(ํก๋จ ๊ด์ฌ์ฌ)์ ๋ถ๋ฆฌํ์ฌ ๋ชจ๋ํํ๋ ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์์ด๋ค.
ํก๋จ ๊ด์ฌ์ฌ
์ ํ๋ฆฌ์ผ์ด์
์ ์ฌ๋ฌ ๋ชจ๋์ด๋ ์ปดํฌ๋ํธ์ ๊ฑธ์ณ ๊ณตํต์ ์ผ๋ก ์ ์ฉ๋๋ ๊ธฐ๋ฅ์ผ๋ก
๋ก๊น
, ๋ณด์, ํธ๋์ญ์
๊ด๋ฆฌ, ์์ธ ์ฒ๋ฆฌ๊ฐ ๋ํ์ ์ธ ์์์ด๋ค.
๋ค์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ์ฌ๋ฌ ๋ชจ๋์ ํก๋จ ํํ๋ก ํฌํจ๋๋ค๋ ์๋ฏธ์์ ๋ถ์ฌ์ง ์ด๋ฆ์ด๋ค.
๊ณตํต ๋ชจ๋์ ํ์ํ ์์ ์ ๋น์ฆ๋์ค ๋ก์ง์ ์ฝ์
๋์ด ์คํ๋์ด
์ฝ๋์ ์ค๋ณต์ ์ค์ด๊ณ , ์ ์ง๋ณด์๋ฅผ ์ฉ์ดํ๊ฒ ํ๋ค.
์ ๋ฆฌ: EJB์ Spring ๋น๊ต
์คํ๋ง์ ์ด๋ค ์ ์ด ์ข์ ์คํ๋ง์ ์ฐ๋์ง ์์๋ณด์๋ค.
Spring vs EJB
- ๊ฒฝ๋ํ: Spring์ ํ์ํ ๊ธฐ๋ฅ๋ง ์ ๊ณตํ๊ณ , ๋ณต์กํ ์ค์ ์์ด ๊ฐ๋ณ๊ฒ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ฑํ ์ ์๋๋ก ํ๋ค. EJB๋ ๋ฌด๊ฑฐ์ด ์ปจํ ์ด๋๋ก, ์ฑ๋ฅ์ ๋ถ๋ด์ ์ฃผ๊ณ ๋ณต์กํ ์ค์ ์ ์๊ตฌํ๋ค.
- ๋ฐฐํฌ ์ฉ์ด์ฑ: Spring์ ๋ด์ฅ ์๋ฒ๋ฅผ ์ง์ํ์ฌ, ๋ณ๋์ ๋ณต์กํ ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ ์ค์ ์์ด ์ฝ๊ฒ ๋ฐฐํฌํ ์ ์๋ค. EJB๋ ๋ณ๋์ ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ๊ฐ ํ์ํด ๋ฐฐํฌ๊ฐ ๋ณต์กํ๋ค.
- ์์กด์ฑ ์ฃผ์ (DI): Spring์ IoC(์ ์ด์ ์ญ์ ) ์์น์ ์ ์ฉํ์ฌ ๊ฐ์ฒด ๊ด๋ฆฌ์ ์์กด์ฑ ์ฃผ์ ์ ์๋์ผ๋ก ์ฒ๋ฆฌํ๋ค. EJB๋ ์ด๋ฌํ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ง ์์๊ณ , ๊ฐ์ฒด ์์ฑ๊ณผ ์์กด์ฑ ๊ด๋ฆฌ๊ฐ ๋นํจ์จ์ ์ด์๋ค.
- ๊ด์ ์งํฅ ํ๋ก๊ทธ๋๋ฐ(AOP): Spring์ AOP๋ฅผ ํตํด ๊ณตํต ๊ธฐ๋ฅ์ ๋น์ฆ๋์ค ๋ก์ง์์ ๋ถ๋ฆฌํ์ฌ ๊ด๋ฆฌํ๋ค.
ํน์ง | Spring | EJB (Enterprise JavaBeans) |
---|---|---|
์ปจํ ์ด๋ | ๊ฒฝ๋ ์ปจํ ์ด๋ (Spring IoC ์ปจํ ์ด๋) | ๋ฌด๊ฑฐ์ด ์ปจํ ์ด๋ (EJB ์ปจํ ์ด๋) |
๊ฐ์ฒด ๊ด๋ฆฌ | ๊ฐ์ฒด์ ์๋ช ์ฃผ๊ธฐ์ ์์กด์ฑ ๊ด๋ฆฌ๊ฐ Spring ์ปจํ ์ด๋์์ ์๋์ผ๋ก ์ฒ๋ฆฌ | ๊ฐ์ฒด์ ์๋ช ์ฃผ๊ธฐ ๊ด๋ฆฌ๊ฐ ํด๋ผ์ด์ธํธ ์์ฒญ์ ๋ฐ๋ผ EJB ์ปจํ ์ด๋์์ ์ฒ๋ฆฌ, ์ค์ ๋ณต์ก๋ ๋์ |
์ค์ | XML ์ค์ ๋๋ ์ด๋ ธํ ์ด์ ๊ธฐ๋ฐ์ผ๋ก ์ค์ ๊ฐ๋ฅ | ๋๋ถ๋ถ XML ์ค์ ์ด ํ์ํ๊ณ ์ค์ ์ด ๋ณต์กํจ |
๋ฐฐํฌ | ๋ด์ฅ ์๋ฒ ์ง์ (์: Spring Boot๋ก Tomcat, Jetty ๋ฑ ์ฌ์ฉ) | EJB ์ปจํ ์ด๋๊ฐ ๋ฐ๋์ ํ์ |
์์กด์ฑ ๊ด๋ฆฌ | ์์กด์ฑ ์ฃผ์ (DI)์ ํตํด ๊ฐ์ฒด ๊ฐ ์์กด์ฑ ๊ด๋ฆฌ | EJB ์ปจํ ์ด๋์์ ๊ฐ์ฒด ์์ฑ ๋ฐ ์์กด์ฑ ๊ด๋ฆฌ |
์ฑ๋ฅ | ๊ฒฝ๋ํ๋ ์ค๊ณ๋ก ์ฑ๋ฅ ์ต์ ํ ๊ฐ๋ฅ | ๋ฌด๊ฒ๊ณ ๋ณต์กํ์ฌ ์ฑ๋ฅ์ด ๋ฎ์ ์ ์์ |
ํธ๋์ญ์ ๊ด๋ฆฌ | AOP๋ฅผ ์ฌ์ฉํ์ฌ ํธ๋์ญ์ ๊ด๋ฆฌ ๊ฐ๋ฅ | EJB ๋ด์ฅ ํธ๋์ญ์ ๊ด๋ฆฌ ๊ธฐ๋ฅ ์ฌ์ฉ |
ํ์ฅ์ฑ | ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ฝ๊ฒ ํ์ฅ ๊ฐ๋ฅ | ์ ์ง๋ณด์์ ํ์ฅ ๋ชจ๋ ์ด๋ ค์ |
ํ ์คํธ ์ฉ์ด์ฑ | Mock ๊ฐ์ฒด ํ์ฉ ๊ฐ๋ฅํ๊ณ ๋จ์ ํ ์คํธ๊ฐ ์ฌ์ | ํ ์คํธ๊ฐ ์ด๋ ต๊ณ , EJB ์ปจํ ์ด๋์ ์์กด |
๊ณตํต ๊ด์ฌ์ฌ ์ฒ๋ฆฌ | AOP๋ก ๊ณตํต ๊ธฐ๋ฅ(๋ก๊น , ๋ณด์, ํธ๋์ญ์ ๋ฑ)์ ๋ถ๋ฆฌ | ๋ณต์กํ ์ค์ ์ด ํ์ |
๐ ์ฐธ๊ณ ์๋ฃ
์ถ์ฒ
[์คํ๋ง] ์คํ๋ง์ด๋ ๋ฌด์์ธ๊ฐ? : ๋ก๋ ์กด์จ์ ์ฑ ์ ๊ฐ์ฅ ์ ์ ๋ฆฌํ ๊ธ์ด๋ผ๊ณ ๋ณธ๋ค. ๊ฐ์ถ!
[Spring] Spring vs EJB :Spring๋ฟ๋ง ์๋๋ผ EJB์ ํน์ง์ ๋ํด ์์ธํ ๊ธฐ์ ํ ๊ธ์ด๋ค.
"์คํ๋ง 5 ๋ง์คํฐ 2/e", ๋๊ฐ ๋ผ์ค ์นด๋ผ๋จ, ์์ด์ฝ์ถํ์ฌ, 2020