#0 ์คํ๋ง, ์๋ฐ์ ๋ด์ด ์ค๊ธฐ๊น์ง
by JiwonDevํด๋น ๊ธ์ ๊น์ํ๋์ ์ธํ๋ฐ ๊ฐ์๋ฅผ ๊ณต๋ถํ๊ณ ์ ๋ฆฌํ ๋ด์ฉ์ ๋๋ค.
# EJB ์ง์ฅ
์๋ฐ๊ฐ ๋์จ 2000๋ ๋, ๊ทธ ๋น์ ์๋ฐ ์งํ์์๋ EJB (Enterprise Java Beans) ํ๋ ์์ํฌ๋ฅผ ๋น์ฆ๋์ค ๊ธฐ์ ์คํ์ผ๋ก ์ ๊ณตํ์์ต๋๋ค. EJB๋ "๋๊ท๋ชจ์ด๊ณ ๊ตฌ์กฐ๊ฐ ๋ณต์กํ ๋ถ์ฐ ๊ฐ์ฒด ํ๊ฒฝ"์ ์ฝ๊ฒ ๊ตฌํํ๊ธฐ ์ํด์ ๋ฑ์ฅํ์๊ณ , ๊ทธ ๋น์ EJB ์์ ๋ น์๋ ๊ฐ์ฒด์งํฅ์ ์ค๊ณํ๊ธฐ ์ํ ์ด๋ก ๋ค์ ์ข์์ต๋๋ค.
[ WebServer - EJB - DB ]์ 3๊ณ์ธต์ผ๋ก ๋๋ ๋น์ฆ๋์ค ๋ก์ง๊ณผ UI๋ฅผ ๋๋ ์ ์์์ต๋๋ค. ๋ํ ๋น์ฆ๋์ค ๊ฐ์ฒด๋ฅผ ๊ด๋ฆฌํ๋ ์ปจํ ์ด๋๋ฅผ ๋ง๋ค์ด ํ์ํ ๋ ๋ง๋ค ์ปจํ ์ด๋๋ก๋ถํฐ ๊ฐ์ฒด๋ฅผ ๋ฐ๋ ๊ฐ๋ , ์ฌ์ฌ์ฉ์ฑ์๋ ์ปดํฌ๋ํธ ๊ฐ๋ฐ, ๋ค๋ฅธ ๊ณณ์ ๋จ์ด์ง EJB ์๋ฒ์ ๋ฉ๋ชจ๋ฆฌ์ ์๋ ํด๋์ค๋ฅผ ์ฐธ์กฐํ ์ ์๋๋ฑ ๋๊ท๋ชจ ๋ถ์ฐ ํ๊ฒฝ์์ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ํ๋ค๋ฉด EJB๊ฐ ์ ๋ง '๋งค๋ ฅ์ ์ผ๋ก' ๋ณด์์ต๋๋ค.
์ทจ์ง๋ ์ข์์ผ๋, ์๋น์ค๊ฐ ๊ตฌํํด์ผํ๋ ๋น์ฆ๋์ค ๋ก์ง๋ณด๋ค EJB ์ปจํ
์ด๋๋ฅผ ์ฌ์ฉํ๊ธฐ์ํ ๊ธฐ๋ณธ ์ฝ๋๋ค์ด ๋๋ฌด ๋ง๋ค๋ ํฐ ๋จ์ ๊ณผ ํจ๊ป ์๋์ ๊ฐ์ ๋ฌธ์ ๋ค๋ ์์์ต๋๋ค. ์ด๋ ๊ฐ๋ฐ์๋ค์ ์ ๋ง ๋จธ๋ฆฌ์ํ๊ฒ ๋ง๋ค์์ฃ .
- EJB๋ก ๋ง๋ ์ปดํฌ๋ํธ๋ ๋ฌด๊ฒ์ต๋๋ค. ๊ฐ๋ฒผ์ด ๊ฐ์ฒด๋ก๋ ๊ฐ๋ฅํ ์ผ์ ๊ตณ์ด EJB๋ก ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค.
- ๋ณต์กํ ์ปจํ ์ด๋๋ฅผ ๊ตฌํํ ๊ณ ๊ฐ์ ์๋ฐ WAS ์๋ฒ๊ฐ ํ์ํ์ต๋๋ค. ํจํค์ง๊ณผ ๋ฐฐํฌ๊ฐ ์ด๋ ค์ด๊ฑด ๋ค.
- ๋ฒค๋ ์ฌ๋ง๋ค EJB ์ปจํ ์ด๋๋ฅผ ๊ตฌํํ ๋ด์ฉ์ด ๋ฌ๋์ต๋๋ค. ์ปจํ ์ด๋์ ์ค์ ๊ณผ ๋ณ๊ฒฝ์ด ์๋นํ ์ด๋ ค์ ์ต๋๋ค.
- ์์ 3๊ฐ์ง ๋ฌธ์ ๋๋ฌธ์ ํ๋ก์ ํธ ์์ฒด๊ฐ ํน์ ๊ธฐ์ , ์ปจํ ์ด๋์ ์ข ์์ ์ผ๋ก ๋ง๋ค์ด์ง๋๋ค. ์ฌ์ฌ์ฉ์ด ์๋ฉ๋๋ค.
- EJB ์ฝ๋์ ์์ฐ์ฑ, ์ ์ง๋ณด์๋ ์ต์ ์ด์๊ณ EJB๊ฐ ๊ฐ์ง ๊ฐ๋ ์ ์์ํ ์๋ฐ์ฝ๋๋ก ์ถฉ๋ถํ ๋์ฒด ๊ฐ๋ฅํ์ต๋๋ค.
ํนํ DB ์ฒ๋ฆฌ์ ๊ด๋ จํด์๋, ์ด๊ฒ ์ ๋ง ๊ธฐ์ ์์ ๋ง๋ ๊ธฐ์ ์ด ๋ง๋ ์ถ์์ ๋๋ก ๋๋ฆฌ๊ณ ์๋๋ ๊ฒ์ด ๋ง์๋ค๊ณ ํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ค๋ฌด ๊ฐ๋ฐ์๋ค์ด EJB ์ง์ฅ์์ ์ฝ๋ฉํ ๋ฐ์ ๋ด๊ฐ ์ง์ ์์ํ ์๋ฐ์ฝ๋๋ก ์๋ก ๋ง๋ค๊ฒ ๋ค. ๋ผ๊ณ ๋งํ๋ฉฐ ์์ ์๋ฐ๋ฅผ ์ด์ฉํ ๊ฐ๋ฐ์ฉ ๋ฐฉ๋ฒ๋ก ๊ณผ ์คํ์์ค๊ฐ ๋์ค๊ธฐ ์์ํฉ๋๋ค.
# Java์ ๋์ฒ, EJB์ ๋ชฐ๋ฝ
EJB๋ ๋๋ฌด๋ ๊ตฌ๋ ธ๊ธฐ์ ๋ฒ๋ ค์ง๋๊ฑด ๋น์ฐํ ์์์ด์๋ค. ๊ทธ๋์ Java ์งํ์์ ์ด๋๋ก๊ฐ๋ค๊ฐ Java๊ฐ ๋งํ ์๋ ์๋ค๋ ์๊ฐ์ EJB๊ฐ ๊ตฌ๋ฆฐ ๊ฒ์ ์ธ์ ํ๊ณ , Hibernate์ ๊ฐ๋ฐ์๋ฅผ ๋ฐ๋ ค์ ํด๋น ๊ธฐ์ ์ ์๋ฐ์ ํ์ค์ผ๋ก ๋ง๋ค๊ธฐ ์์ํ์๋ค. ๊ทธ๋ฆฌ๊ณ ๋๊ฐ์ ๋ด์ฉ์ ์ด๋ฆ์ ๋ฐ๊ฟ 2006๋ ์ ์ ์์ถ์ํ๊ฒ์ด Java Persistence API, ๋ฐ๋ก JPA ์ด๋ค.
2021.06.13 - [Backend/JDBC & JPA] - #1 JPA ๊ฐ์
๋ค๋ฅธ ํํธ์ผ๋ก๋ 2003๋ ์ ๋น์ ์์ฒญ ์ ๋ช ํ๋ ์๋ฐ ์ํฐํ๋ผ์ด์ฆ ๊ฐ๋ฐ์๋ค(์ ๊ฒ ํ ๋ก, ์ ์นด๋กํ)์ด ๋กญ ์กด์จ์ ์์ ํ์ฌ ์ฑ ์ ์ฃผ์ ๊ฐ๋ ์ ๊ทธ๋๋ก ์ ์ฉํ ์๋ฐ ์คํ์์ค ํ๋ ์์ํฌ๋ฅผ ๋ง๋ค์๊ณ ์ ์ํ์๋๋ฐ, ์ด๊ฒ์ด ๋ฐ๋ก Spring Framework ์ ์์ด์๋ค. ๊ทธ ๋น์ ์คํ์์ค ํ๋ ์์ํฌ๋ ์๋นํ ํ์ ์ ์๋๋ฐ, ์์ํ ์คํ ์์ค๋ก ์ด์ํ๋ค๋ณด๋ ๊ด๋ฆฌ๊ฐ ์ด๋ ค์ ๊ณ ์์ฌ์ด์ ์ด ๋ง์๊ธฐ์ 2009๋ ์ VMware ํ์ฌ๊ฐ ์คํ๋ง ํ๋ ์์ํฌ๋ฅผ ์ธ์ํ์ฌ ๊ด๋ฆฌํ๊ณ ์๋ค. (๋ผ์ด์ ์ค๋ ๊ทธ๋๋ก Apache License 2.0 ์คํ์์ค๋ฅผ ์ ์งํ์๋ค.)
์ฐธ๊ณ ๋ก Spring์ด๋ผ๋ ์ด๋ฆ์ ์ ์นด๋กํ๊ฐ EJB๋ฅผ ์ฌ์ฉํ๋ ์๋ฐ ๊ฐ๋ฐ์๋ค์ ์ง์ฅ๊ฐ์ ๊ฒจ์ธ์ ๋๋ผ, ์๋ก์ด ๋ด(Spring)์ด๋ผ๋ ์๋ฏธ๋ก ์ง์๋ค๊ณ ํ๋ค. ํ์ฌ(2021)์๋ ์คํ๋ง์ ํต์ฌ ์ฝ๋๋ฅผ ์ ๊ฒ ํ ๋ฌ, ๋กญ ์กด์จ, ์ ์นด๋กํ๊ฐ ๊ฐ๋ฐํ๊ณ ์๋ค.
์ฐธ๊ณ ๋ก ์คํ๋ง์ด ํ์ ์ ์ฌ์ฉ๋๊ธฐ ์์ํ ๋๋ 2006๋ ์ธ๋ฐ, ๊ทธ๋ ๋น์ ์๋ฐ ๊ฐ๋ฐ์๋ค์ SSH๋ผ๊ณ ๋ถ๋ฅด๋ ๊ตฌ์ฑ์ผ๋ก ์น ์๋ฒ๋ฅผ ๊ตฌ์ฑํ์๋ค. SSH๋ ์คํ๋ง ์ฝ์ด(Spring) + ์คํธ๋ฟ์ธ (Strutcs) + ํ์ด๋ฒ๋ค์ดํธ (Hibernate) ๋ก ๊ตฌ์ฑํ์๊ณ ์คํ๋ง์ด ์ ๊ณตํ๋ DI์ AOP ๊ธฐ๋ฅ์ ์ค์ฌ์ผ๋ก ๋ค์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ ์กฐํฉํ์ฌ ์ฌ์ฉํ์๋ค.
๊ทธ๋ฆฌ๊ณ ์๋ก์ด ํ๋ ์์ํฌ๋ค์ด ๋์ค๋ฉฐ ์คํธ๋ฟ์ธ ์ ์ฌ์ฉ๋ฅ ์ด ์ค๋ค๊ฐ, 2013๋ ์ ๊ณต์ ์ง์์ด ์ข ๋ฃ๋์๊ณ ์์ฐ์ค๋ฝ๊ฒ ์คํธ๋ฟ์ธ -> ์คํ๋ง MVC or ๋ค๋ฅธ ํ๋ ์์ค์ผ๋ก ๋์ด์ค๊ฒ ๋๋ค. ์ฐธ๊ณ ๋ก ์ ์ธ๊ณ์ ์ผ๋ก ์๋ฐ ๊ฐ๋ฐ์ ์คํ๋ง, JPA์ ์ฌ์ฉ๋ฅ ์ ๋์์ง๋ง ํ๊ตญ๊ณผ ์ค๊ตญ์ ๊ฒฝ์ฐ ๊ฑฐ์ ์ฌ์ฉํ์ง ์๋ค์ถ์ด ํ๋ค๊ณ ํ๋ค. ์ ๊ธฐ์ ์ ๋ณด์์ ์ธ ์ ์ฅ๋ ์๊ฒ ์ง๋ง, ์ฐธ๊ณ ํ ๊ณต์๋ฌธ์๊ฐ ์ ๋ถ ์๋ฌธ์ด๋ผ ์ด๋ ค์๋ ๋ง์๋ค๊ณ ํ๋ค. ํ๊ตญ์์ ๋ณธ๊ฒฉ์ ์ผ๋ก ์ปค๋ฎค๋ํฐ๊ฐ ํ์ฑ๋๊ณ ๊ธฐ์ ์ ๋ฐ์๋ค์ด๊ธฐ ์์ํ๊ฒ 2015๋ ๋ฌด๋ ต์ด๋ค.
# Spring Framework ๊ฐ ์ ๊ณตํ๋ ํต์ฌ ๊ธฐ๋ฅ
์คํ๋ง์ด ๊ฐ์ง ํต์ฌ ๊ธฐ๋ฅ์, ์น ์ดํ๋ฆฌ์ผ์ด์
์ ๋ง๋ค๊ฑฐ๋ DB๋ฅผ ํธํ๊ฒ ์ ๊ทผํด์ฃผ๊ธฐ ์ํ ๋๊ตฌ๊ฐ ์๋๋ค. ์ด๋ ๊ฐ์ฒด์งํฅ์ ์ผ๋ก ์ค๊ณํด์ ์ป๋ ์ด์ ์ผ ๋ฟ์ด๊ณ ์คํ๋ง์ ๋ณธ์ง์ '์์ํ Java๋ก ์ข์ ๊ฐ์ฒด์งํฅ์ ์ค๊ณํ๋๋ก ๋์์ฃผ๋ ํ๋ ์์ํฌ' ์ด๋ค. ์คํ๋ง ํ๋ ์์ํฌ๋ ๋กญ ์กด์จ์ ์ฑ
์ ์๋ ๋ค์๊ณผ ๊ฐ์ ๊ฐ๋
๋ค์ ๋์
ํ์ฌ ๊ฐ์ฒด์งํฅ์ ์ธ ์ฝ๋๋ฅผ ๋ง๋ค ์ ์๋๋ก ๋์์ฃผ๊ณ ์๋ค.
- ๊ฒฝ๋ ์ปจํ
์ด๋๋ก์ ์๋ฐ ๊ฐ์ฒด๋ฅผ ์ง์ ๊ด๋ฆฌ
- ๊ฐ๊ฐ์ ๊ฐ์ฒด ์์ฑ, ์๋ฉธ๊ณผ ๊ฐ์ ๋ผ์ดํ ์ฌ์ดํด์ ๊ด๋ฆฌํ๋ฉฐ ์คํ๋ง์ผ๋ก๋ถํฐ ํ์ํ ๊ฐ์ฒด๋ฅผ ์ป์ด์ฌ ์ ์๋ค. - POJO(Plain Old Java Object) ๋ฐฉ์์ ํ๋ ์์ํฌ
- ์ผ๋ฐ์ ์ธ J2EE ํ๋ ์์ํฌ (EJB)์ ๋นํด ๊ตฌํ์ ์ํด ํน์ ํ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๊ฑฐ๋ ์์์ ๋ฐ์ ํ์๊ฐ ์๋ค. ์ฆ ๊ธฐ์กด์ ์กด์ฌํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฑ์ ๊ทธ๋๋ก ์ง์ํ๊ธฐ์ ์ฉ์ดํ๊ณ ๊ฐ์ฒด๊ฐ ๊ฐ๋ณ๋ค. - ์ ์ด ๋ฐ์ (๋๋ ์ ์ด์ ์ญ์ )(IoC: Inversion of Control)์ ์ง์
- ์ปจํธ๋กค์ ์ ์ด๊ถ์ด ์ฌ์ฉ์๊ฐ ์๋๋ผ ํ๋ ์์ํฌ์ ์์ด์ ํ์์ ๋ฐ๋ผ ์คํ๋ง์์ ์ฌ์ฉ์์ ์ฝ๋๋ฅผ ํธ์ถํ๋ค. - ์์กด์ฑ ์ฃผ์
(DI: Dependency Injection)์ ์ง์
- ๊ฐ๊ฐ์ ๊ณ์ธต์ด๋ ์๋น์ค๋ค ๊ฐ์ ์์กด์ฑ์ด ์กด์ฌํ ๊ฒฝ์ฐ ํ๋ ์์ํฌ๊ฐ ์๋ก ์ฐ๊ฒฐ์์ผ์ค๋ค. - ๊ด์ ์งํฅ ํ๋ก๊ทธ๋๋ฐ(AOP: Aspect-Oriented Programming)์ ์ง์
- ํธ๋์ญ์ ์ด๋ ๋ก๊น , ๋ณด์๊ณผ ๊ฐ์ด ์ฌ๋ฌ ๋ชจ๋์์ ๊ณตํต์ ๊ธฐ๋ฅ์ ๊ฒฝ์ฐ ๋ถ๋ฆฌํ์ฌ ๊ด๋ฆฌํ ์ ์๋ค. - ํ์ฅ์ฑ์ด ๋์
- ์คํ๋ง ํ๋ ์์ํฌ์ ํตํฉํ๊ธฐ ์ํด ๊ฐ๋จํ๊ฒ ๊ธฐ์กด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ฐ์ธ ์คํ๋ง์์ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
- ์๋ง์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ด๋ฏธ ์คํ๋ง์์ ์ง์๋๊ณ ์๊ณ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ณ๋๋ก ๋ถ๋ฆฌํ๊ธฐ๋ ์ฉ์ดํ๋ค. - ์คํ๋ง์ ๊ธฐ์ ๋ค์ 20์ฌ๊ฐ์ ๋ชจ๋๋ก ์ธ๋ถํ ๋์ด์๊ณ ๋ค๋ฅธ ํ๋ ์์ํฌ๋ค์ ํตํฉ์ด ์ฉ์ดํ๊ฒ ๋ง๋ค์ด์ก๋ค.
'๐ฑ Spring Framework > Spring Core' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
IoC, DI, ๊ทธ๋ฆฌ๊ณ ์ปจํ ์ด๋ (0) | 2021.08.02 |
---|---|
#4 ๊ด์ฌ์ฌ์ ๋ถ๋ฆฌ(SOC), ์์กด์ฑ ์ฃผ์ (DI) (0) | 2021.08.02 |
#3 ์คํ๋ง ํต์ฌ ์๋ฆฌ - ๊ธฐ์กด์ ๋ถํธํ ์ค๊ณ ๋ฐฉ์ (0) | 2021.08.01 |
#2 ์คํ๋ง ํ๋ก์ ํธ ์์ฑ (0) | 2021.07.25 |
#1 ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ (0) | 2021.07.25 |
๋ธ๋ก๊ทธ์ ์ ๋ณด
JiwonDev
JiwonDev