Spring Framework ๋?
JAVA ๊ธฐ๋ฐ์ ๊ธฐ์ ์ฉ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ ์ํ ์คํ ์์ค ์ ํ๋ฆฌ์ผ์ด์ ํ๋ ์์ํฌ์ด๋ค. ๊ธฐ์ ์ฉ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ ๋ด์ธ์ฐ๋ ๋งํผ, ๋๊ท๋ชจ ๋ฐ์ดํฐ ์ฒ๋ฆฌ์ ์ฌ๋ฌ ์ฌ์ฉ์์ ํธ๋์ญ์ ์ฒ๋ฆฌ์ ์ค์ ์ ๋์๋ค. ์ ํ๋ฆฌ์ผ์ด์ ํ๋ ์์ํฌ์ธ ๋งํผ, ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ ์ ๊ณผ์ ์ ๋น ๋ฅด๊ณ ํจ๊ณผ์ ์ผ๋ก ์งํํ ์ ์๋๋ก ๋๋ ๊ฒ ์ผ์ฐจ์ ๋ชฉํ์ด๋ค.
*์คํ ์์ค๋ ์์ค ์ฝ๋๋ฅผ ๊ณต๊ฐํด ๋๊ตฌ๋ ํน๋ณํ ์ ํ ์์ด ๊ทธ ์ฝ๋๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ํ ๊ฒ์ด๋ค.
์์ฃผ ์ค๋๋ ๊ธฐ์ ์ธ ๋งํผ ๊ด๋ จ ์๋ฃ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋ฐฉ๋ํ๊ณ , ์ฐ๋ฆฌ ๋๋ผ์์๋ ์ ์ ์ ๋ถ ํ๋ ์์ํฌ์๋ ์ฌ์ฉ๋์ด ๊ณต๊ธฐ๊ด ์๋น์ค๋ค, ๊ทธ๋ฆฌ๊ณ ์ค๋๋ ๊ธฐ์
์ ์๋น์ค๋ค์ ์ ๋ถ Spring์ผ๋ก ๊ฐ๋ฐ๋์๋ค๊ณ ํด๋ ๋ฌด๋ฐฉํ๋ค. (์๋ฐ ๊ณตํ๊ตญ์ด๋ผ ๋ถ๋ฆฌ๋ ์ด์ ...)
*์ ์ ์ ๋ถ ํ๋ ์์ํฌ๋, ํ๊ตญ์ ๋ณดํ์งํฅ์์์ ๋ง๋ ๊ณต๊ณต์ฌ์ ์ ์์คํ ๊ฐ๋ฐ ์ ํ์ํ ๊ธฐ๋ฅ ๋ฐ ์ํคํ ์ฒ ๋ฑ์ ๊ฐ๋ฐ ํ๊ฒฝ์ ๋ฏธ๋ฆฌ ๋ง๋ค์ด ์ ๊ณตํ๋ ๊ฐ๋ฐ ํ๋ ์์ํฌ ํ์ค์ด๋ค.
Spring ์ ํ์...
์ฌ๋ฏธ ์ผ์ ๋ณด๋ ์คํ๋ง์ ํ์ ๋นํ. J2EE ๊ธฐ์ ์์ ์, ์๊ฐ๊ฐ ์์ ์ ๊ฒฝํ์ ๋ฐํ์ผ๋ก ์๋ฐ ์ํฐํ๋ผ์ด์ฆ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ ์ ๋ต, ์ด์์ ์ธ ์ค๊ณ์ ์ํคํ ์ณ ๋ฑ์ ์ค๋ช ํ๋ฉฐ ์ค์ 3๋ง ์ค ๊ฐ๋์ ์ํ ์ฝ๋๊ฐ ์์ด๊ฐ ๋์๋ค๊ณ ํ๋ค.
Spring์ ํน์ง
์คํ๋ง ํ์ ์ด์ ์ ์๋ฐ ์ํฐํ๋ผ์ด์ฆ ๊ธฐ์ ์ ๋ถํ์ํ๊ฒ ๋ณต์กํ๊ณ ๋ฐฉ๋ํ์ฌ ๊ณ ๊ฐ์ ์น์๋ฒ๊ฐ ํ์ํ๋ค. ์คํ๋ง์ ์ด ๋ฐฉ๋ํจ์ ๋จ์ํํ๋ ๋ฐ ์ด์ ์ ๋์๋ค. ์ํฐํ๋ผ์ด์ฆ ๊ฐ๋ฐ์ ๊ณ ๊ธ ๊ธฐ์ ์ ์ฌ์ฉํ ์ ์์ผ๋ฉด์๋ ์ฝ๋์ ๊ฐ๋ฐ ๊ณผ์ ์ ๋จ์ํ๊ฒ ๋ง๋ค์๊ธฐ ๋๋ฌธ์ ์์ฃผ ๊ฐ๋ฒผ์ด ์น์๋ฒ์ธ ํฐ์บฃ์์๋ ๋์ํ๋ค. ์คํ๋ง์ ๊ฒฝ๋ ํ๋ ์์ํฌ๋ผ๊ณ ํ๋ ์ด์ ๋ค.
๊ธฐ์ ์ฉ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณด์, ์์ ์ฑ, ํ์ฅ์ฑ, ํ ์์คํ ๊ณผ์ ์ฐ๊ณ์ ๊ด๋ จ๋ ๊ธฐ์ ์ค์ํ๊ณ ๊ธฐ์ ์ ํต์ฌ ์ ๋ฌด๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํ ๋ณต์กํ ๋น์ฆ๋์ค ๋ก์ง์ ํด๊ฒฐํ ์ ์์ด์ผ ํ๋ค. ๋ ์ ๋ฌด๊ณผ ์๋ จ๋ ์ ์ฑ ์ด ๋ฐ๋ ๋๋ง๋ค ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ฃผ ์์ ํด์ค์ผํ๊ธฐ ๋๋ฌธ์ ์ ์ง๋ณด์ ๋ถ๋ด์ด ํฌ๋ค. ์ด๋ ๊ฒ ๋น์ฆ๋์ค ๋ก์ง์ด ๋ณต์กํ๊ณ , ํ์ฅ์ ํด์ผ ํ๋ค๊ฑฐ๋ ์์ฃผ ์์ ๋์ด์ผ ํ๋ค๋ ์ ์ ๋ณด๋ค ํจ๊ณผ์ ์ผ๋ก ํด๊ฒฐํ๊ธฐ ์ํด ์คํ๋ง์์๋ ๊ฐ์ฒด ์งํฅ ์ ์ฑํํ๋ค.
Spring์ ํต์ฌ ๊ฐ๋
์๋๋ Spring ์ ํต์ฌ ๊ฐ๋ ์ด๋ค. ๊น๊ฒ ํ๊ณ ๋ค์ง๋ ์์๊ณ ๊ฐ๋จํ๊ฒ ์ดํดํ ์ ์๋ ์ ๋๋ก ์ ๋ฆฌํด๋ณด์๋ค.
IOC (Inversion of Control) & DI(Dependency Injection)
์ผ๋ฐ์ ์ธ ์ํฉ์ด๋ผ๋ฉด ๊ฐ๋ฐ์๋ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ์์กด์ฑ์ ์ฃผ์ ํ๊ณ ์ด๊ธฐํ ๋ฐ ์๋ฉธํ๋ ๋ฑ ์ง์ ๊ด๋ฆฌ ๋ฐ ์ ์ดํ๋ค. IOC ๋ ์ด๋ฐ ๊ฐ์ฒด ์ ์ด๋ฅผ ๋ค๋ฅธ ํน๋ณํ ๊ฐ์ฒด์๊ฒ ๋๊ธฐ๋ ๊ฒ์ด๋ค. ์ฆ, ์ ์ด๊ฐ ์ญ์ ๋๋ ๊ฒ์ด๋ค. ์คํ๋ง์์๋ ์ด๋ฅผ ์ ๋ดํ๋ ์คํ๋ง ์ปจํ ์ด๋๋ผ๋ ๊ฒ์ด ์กด์ฌํ๊ณ , ์ด ์ปจํ ์ด๋์ ์ ์ด๋ฅผ ๋งก๊ธด ๊ฐ์ฒด๋ฅผ ๋น(Bean)์ด๋ผ๊ณ ํ๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ๋น์ ์ฑ๊ธํค ํจํด์ผ๋ก ๋ฑ ํ๋๋ง ์์ฑ๋์ด ์ฌ์ฌ์ฉ๋๋ค.
IOC ๋ DI๋ก ๊ตฌํ๋๋ค. DI ๋ ๊ฐ์ฒด ๋ด๋ถ๊ฐ ์๋, ์ธ๋ถ์์ ๊ฐ์ฒด์ ๊ฐ์ฒด๋ฅผ ์๋์ผ๋ก ์ฐ๊ฒฐํด์ฃผ๋ ๊ฒ์ด๋ค. ์ธ๋ถ์์ ์์กด์ฑ์ ๋ฃ์ด์คฌ๋ค๊ณ ํ์ฌ ์์กด์ฑ ์ฃผ์ ์ด๋ผ๊ณ ํ๋ค.
* ์์กด์ฑ์ด๋ ๋ ๋ชจ๋์ด ์๋ก ์ฐ๊ฒฐ๋ ๊ฒ์ ๋งํ๋ค. ๋ณดํต A ๋ชจ๋์ด B ๋ชจ๋์ ์ฌ์ฉํ๋ฉด A ๋ชจ๋์ด B ๋ชจ๋์ ์์กดํ๊ณ ์๋ค๊ณ ํ๋ค. ์ด ๊ฒฝ์ฐ, B ๋ชจ๋์ด ๋ณ๊ฒฝ๋๋ฉด ์์กดํ A๋ชจ๋๋ ๋ณ๊ฒฝ๋์ด์ผ ํ๋ฏ๋ก ๋ชจ๋๊ฐ ๋์จํ ๊ฒฐํฉ์ ์ถ๊ตฌํ๋ ๊ฐ์ฒด์งํฅ์์๋ ๊ถ์ฅํ์ง ์๊ณ ์๋ค.
์ฐธ๊ณ ๋ก ์๋ฐ์์ new ๋ก ์์ฑํ๋ ๊ฒ๋ ์์ฑ๊ณผ ๋์์ ์ด๊ธฐํํ๋ฏ๋ก ์์กด ๊ฐ์ฒด๊ฐ ๋๋ค. new ๋ก ์ด๊ธฐํํ์ง ์์ผ๋ ค๋ฉด ๋ค๋ฅธ ๊ณณ์์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ์ฐธ์กฐํ๋ฉด ๋๋ค. ์คํ๋ง์ ๋น์ ์ปจํ ์ด๋์ ์์ฑํ๊ณ , ์์กด ๊ด๊ณ๋ฅผ ๋ช ์ํ์ฌ ์๋์ผ๋ก ์ฐ๊ฒฐ์์ผ์ค์ผ๋ก์จ ๋ค๋ฅธ ๊ฐ์ฒด์ ์ฐธ์กฐํ๋ค.
์ด๋ก์จ ๊ฐ๋ฐ์๋ ๊ฐ์ฒด ๊ด๋ฆฌ์ ์ ๊ฒฝ์ฐ์ง ์๊ณ ๋ค๋ฅธ ๋ถ๋ถ์ ๋ ์ง์คํ ์ ์๊ฒ ๋๋ฉฐ, ๊ฐ์ฒด ๊ฐ ์์กด์ฑ์ ๋ฎ์ถฐ ๋์จํ ๊ฒฐํฉ์ผ๋ก ๋ชจ๋์ ์์ฑํ ์ ์๋ค.
POJO(Plain Old Java Object)
ํ์ฅ ๊ฐ๋ฅํ๊ณ ์ฌ์ฌ์ฉ์ด ๊ฐ๋ฅํ ๋ก์ง์ ๊ฐ๋ฐํ๊ธฐ ์ํด ์ด์ ์๋ EJB(Enterprise JavaBeans) ๋ผ๋ ๊ธฐ์ ์ ์ฌ์ฉํ๋ค. EJB๋ ํ ๊ฐ์ง ๊ธฐ๋ฅ์ ๋ถํ์ํ๊ณ ๋ณต์กํ ๋ก์ง์ด ๊ณผ๋ํ๊ฒ ๋ค์ด๊ฐ๋ค๋ ๋จ์ ์ด ์์๋ค. ์ดํ ๋ค์ ์๋ฐ์ ๋จ์ํ ์ค๋ธ์ ํธ๋ฅผ ์ด์ฉํ์๋ ์๊ฒฌ์ด ๋์๊ณ , ์ฌ๋๋ค์ด ๋ง์ด ์ฌ์ฉํ๋๋ก ์ ๋ํ๊ธฐ ์ํด ์์ด ๋ณด์ด๋ ์ด๋ฆ์ ์ฌ์ฉํ ๊ฒ์ด ๋ฐ๋ก POJO ์ด๋ค.
POJO ๋ getter/setter ๋ง ๊ฐ์ง ๋จ์ํ ์๋ฐ ์ค๋ธ์ ํธ๋ค. ๋จ์ํ๋ค๋ ๊ฒ์, ๊ธฐ๋ณธ์ ์ธ ๊ฒ ์ธ์๋ ์ด๋ ํ ๊ฒ์๋ ์ข ์๋์ง ์๋๋ค๋ ๋ง์ด๋ค. ๊ทธ๋ฌ๋ ํน์ ํด๋์ค๋ฅผ ์์ํ์ง ์๊ณ , ์๋ฐ ์ธ์ด์ ๊ผญ ํ์ํ API ์ธ์๋ ์ข ์๋์ง ์์์ผ ํ๋ฉฐ ํน์ ํ๊ฒฝ(์น ๋ฑ) ์๋ ์ข ์๋์ง ์์์ผ ํ๋ค. ์ด๋ฐ ๋จ์ํจ ๋๋ถ์ ์์กด์ฑ์ด ์๊ณ ์ ์ง๋ณด์๊ฐ ๊ฐํธํ๋ค. POJO ๊ธฐ๋ฐ์ผ๋ก ๊ฐ๋ฐํ๊ฒ ๋๋ฉด ๊ฐ์ฒด์งํฅ์ ์ธ ์ค๊ณ ๋ฐ ๊ตฌํ์ด ๊ฐ๋ฅํด์ง๋ค.
AOP(Aspect Oriented Programming)
AOP๋ฅผ ์ง์ญํ๋ฉด, ๊ด์ ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ด๋ค. ๊ฐ์ฒด ์งํฅ์ ์ผ๋ก ์ค๊ณ๋ ์์คํ ์์ ๋ก๊น , ๋ณด์, ํธ๋์ญ์ ๊ฐ์ ๋ถ๊ฐ์ ์ธ ๊ณตํต ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ค ํ๋ฉด, ๊ฐ์ฒด๋ค ์ ๋ฐ์ ๊ฑธ์ณ ๊ณตํต ์ฝ๋๋ฅผ ์ค๋ณต์ผ๋ก ์ฌ์ฉํด์ผ ํ๋ค. AOP๋ ๊ทธ ์ค๋ณต๋๋ ์ฝ๋๋ฅผ ๋ถ๋ฆฌํ๊ณ , ๊ทธ ๊ฐ์ฒด๋ ๋ฑ ์์ ์ ์ฑ ์๋ง ์ง๋๋ก ํ์๋ ๊ฐ๋ ์ด๋ค.
์ฌ๊ธฐ์ ๊ฐ์ฒด๋ค ์ ๋ฐ์ ์ฌ์ฉ๋๋ ๋ถ๊ฐ์ ์ธ ๊ณตํต ๊ธฐ๋ฅ์ ๊ด์ฌ์ฌ(Concerns) ๋ผ๊ณ ํ๊ณ , ์ด ๊ด์ฌ์ฌ๋ฅผ ํก๋จ์ผ๋ก ์๋ผ๋๋ค๊ณ ํ์ฌ AOP๋ฅผ Cross-Cutting ์ด๋ผ๊ณ ๋ ๋ถ๋ฅธ๋ค.
AOP ์์๋ ์ด ๊ด์ฌ์ฌ๋ฅผ Aspect ๋ก ๋ชจ๋ํํ์ฌ ํต์ฌ ๋น์ฆ๋์ค ๋ก์ง์์ ๋ถ๋ฆฌํด ์ฌ์ฌ์ฉํ๋ค. Aspect ๋ ๊ธฐ๋ฅ์ ์ ์ํ Advice ์ ์ด ๊ธฐ๋ฅ์ ์ด๋์ ์ ์ฉํ ์ง์ ๋ํ ์ ๋ณด์ธ Pointcut ์ ๊ฐ์ง๊ณ ์๋ค.
์ ๋ฆฌํ์๋ฉด, OOP ๋ ํต์ฌ ๋น์ฆ๋์ค ๋ก์ง์ ๋ถ๋ฆฌํ์ฌ ๋ชจ๋ํํ๋ ๊ฒ์ ์ด์ ์ ๋์๋ค๋ฉด, AOP ๋ ์ฌ๊ธฐ์์ ๋ถ๊ฐ์ ์ธ ๊ณตํต ๊ธฐ๋ฅ์ ํ๋ฒ ๋ ๋ชจ๋ํํ ๊ฐ๋ ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.
๋ง๋ฌด๋ฆฌํ๋ฉฐ...
Node.js ์ ๋ฌ๋ฆฌ ์คํ๋ง์ ๊ณต๋ถํ๋ค๋ ๊ฑด ๊ฐ์ฒด์งํฅ์ ๊ณต๋ถํ๋ ๊ฒ ๊ฐ์ ์ด ๋๋์ ๋ญ์ง... ๊น๊ฒ๋ ์๋๊ณ ์ ๊น ์์๋ณธ๊ฑด๋ฐ๋ ์ฌ์ฉ๋ฒ์ ์ตํ๊ธฐ๋ณด๋ค๋ ์คํ๋ง์์ ์ถ๊ตฌํ๋ ๊ฐ์ฒด์งํฅ์ ๊ฐ๋ ๋ค์ ์ ์ดํดํ๊ณ ์ ์ฉํ๋ ๊ฒ์ด ์ค์ํ๋ค๋ ๊ฑธ ๋๊ผ๋ค.
์ฐธ๊ณ )
[์คํ๋ง] ์คํ๋ง์ด๋ ๋ฌด์์ธ๊ฐ?