ํ๋ ์์ํฌ์ ์ฌ์ ์ ์๋ฏธ๋ ๋ผ๋, ๊ทผ๊ฐ์ด๋ค. ๊ทธ๋ฐ๋ฐ, ์น์ ๊ฐ๋ฐํ๋๋ฐ ๋ผ๋๊ฐ ์ ํ์ํ ๊น?
a,b,c๊ฐ ํจ๊ป ์ผํ๋๋ฐ ๋ชจ๋๊ฐ ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก ์ผํ๋ค๋ฉด ์ด๋จ๊น? a์ b๊ฐ ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก ๊ฐ๋ฐํ๊ณ ์ฝ๋๋ฅผ ํฉ์น๊ฒ ๋์์ผ๋ฉด ์์ํ์ง ๋ชปํ ๋ฌธ์ ๋ค์ด ๋ฐ์ํ ๊ฒ ์ด๋ค.
๊ทธ๋์ ํ๋ ์์ํฌ๋ ๋ ์ฌ์์ฒ๋ผ ๊ฐ๋ฐ์ ํ๋ฆ์ ์ ์ดํ๋ค.
๊ฐ๋ฐ์๋ ํ๋ ์์ํฌ๊ฐ ์ ์ดํ๋ ํ๋ฆ์ ๋ฐ๋ผ ๊ฐ๋ฐํ ์ ๋ฐ์ ์๋ค. ์์์ ์๋ก๋ a,b,c์ผ๋ก ์ด๋ฃจ์ด์ง ์ํ๋ฒณ ํ ๋ชจ๋๊ฐ Spring์ ์ด๋ค๊ณ ํด๋ณด์. ๊ทธ๋ผ a์ b๋ ์์ ๋ง์ ๋ฐฉ์๋๋ก ๊ฐ๋ฐํ ์ ์๋ค. ์ค๋ก์ง Spring์ด ์ ์ดํ๋ ํ๋ฆ ์์์ ์์ ์ ์ฝ๋๋ฅผ ์ถ๊ฐํ ๊ฒ์ด๋ค. ๊ทธ๋ ๋ค๋ฉด ์์ ๊ฐ์ ์ผ์ ์ผ์ด๋์ง ์์ ๊ฒ์ด๋ค.
๊ทธ๋ฌ๋๊น ์ด์ ๋ถํฐ๋ ์ง์ ๊ตฌ์กฐ๋ฅผ ์งค ํ์๊ฐ ์์ด, ์คํ๋ง์ด ๋ง๋ค์ด๋์ ๊ตฌ์กฐ ์์ ์ด์ ๋ถ์ด๊ณ ์์ ์น ํ๊ธฐ๋ง ํ๋ฉด ๋๋ค.
๐ก POJO๊ธฐ๋ฐ ๊ตฌ์ฑ
์คํ๋ง์ ๋ด๋ถ์ ์ผ๋ก ๊ฐ์ฒด ๊ฐ์ ๊ด๊ณ๋ฅผ ๊ตฌ์ฑํ ์ ์๋ ํน์ง์ ๊ฐ์ง๊ณ ์๋ค. ์ด๋ ๋ณ๋์ API๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ์ผ๋ฐ์ ์ธ ์๋ฐ ์ฝ๋๋ง์ผ๋ก ๊ฐ์ฒด๋ฅผ ๊ตฌ์ฑํ ์ ์๋ค. ์ด๋ฐ ๊ตฌ์ฑ์ Plain Old Java Object(POJO)๊ตฌ์ฑ์ด๋ผ๊ณ ํ๋ค. ์ด๋ ๊ฒ ํ์ ๋, ์ด๋ค ๊ธฐ์ ์ ์ข ์์ ์ด์ง ์์ผ๋ฏ๋ก ๋ง๋ค๊ธฐ ํธํ๊ณ , ๊ณ ์น๊ธฐ๋ ์ฝ๊ณ , ํ ์คํธํ๊ธฐ๋ ์ข๋ค.
๐ก ์์กด์ฑ ์ฃผ์ Dependency Injection(DI)
์์กด์ฑ์ ํ๋์ ๊ฐ์ฒด๊ฐ ๋ค๋ฅธ ๊ฐ์ฒด ์์ด ์์ ์ ์ญํ ์ ํ ์ ์๋ค๋ ๊ฒ์ ๋งํ๋ค. ์ฃผ์ ์, ๋ฐ์ด๋ฃ๋ ๊ฒ์ด๋ค. ์ด ๋๊ฐ๋ฅผ ํฉ์น๋ฉด ์์กด์ฑ ์ฃผ์ ์ด๋ค. ์ด๋ค ๊ฐ์ฒด๊ฐ ํ์๋ก ํ๋ ๊ฐ์ฒด๋ฅผ ์ฐพ์์ ๋ฐ์ด๋ฃ๋ ๊ฒ์ด๋ค. ๊ทธ๋ ๋ค๋ฉด ์ ์์กด์ฑ ์ฃผ์ ์ ์ด์ฉํ๋ ๊ฒ์ผ๊น? ์์กด์ฑ ์ฃผ์ ์ ๋ฐ๋ ์ ์ฅ์์๋ ์ด๋ค ๊ฐ์ฒด์ธ์ง ์ ๊ฒฝ ์ธ ํ์๊ฐ ์๋ค. ์ด๋ค ๊ฐ์ฒด์ ์์กดํ๋ , ๊ทธ ์ญํ ์ ๋ณํ์ง ์๋๋ค. ์คํ๋ง ์ปจํ ์ด๋์ ์ผ์ข ์ธ Application Context์ ์ํด ์ฃผ์ ๋๋ฉฐ Application Context๋ ๋ ๋๊ธฐํ๋ฉด์ ๋น์ ๊ด๋ฆฌํ๋ค. ๊ทธ๋ฆฌ๊ณ ๋๊ตฐ๊ฐ ๋น์ ์์ฒญํ๋ฉด, ํด๋น ๋น์ ์ฐพ์์ ์ฃผ์ ํ๋ค.
๐ก AOP(Aspect-Oriented-Programmin)
๊ฐ๋ฐํ ๋ ํต์ฌ ๋น์ง๋์ค ๋ก์ง์๋ง ์ง์คํ ์ ์๊ฒ ๋๋ ๊ธฐ๋ฅ์ด๋ค. ์์คํ ์ด ๊ณตํต์ผ๋ก ๊ฐ์ง๊ณ ์๋ ๋ฐ๋ณต์ ์ธ ์ฝ๋๊ฐ ์๋ค. ํต์ฌ ๋ก์ง์ ์๋์ง๋ง, ๋ฐ๋์ ์ฒ๋ฆฌํด์ผ๋ง ํ๋ ๊ท์ฐฎ์ ๊ฒ๋ค, ์ด๊ฒ์ ์คํ๋ง์์๋ ํก๋จ ๊ด์ฌ์ฌ(Cross-concern) ๋ผ๊ณ ํ๋ค. AOP๋ ํก๋จ ๊ด์ฌ์ฌ๋ฅผ ๋ชจ๋๋ก ๋ถ๋ฆฌํ๋ ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์์ด๋ค.
AOP์ ์ฅ์ ์ผ๋ก๋ ๊ฐ๋ฐ์๊ฐ ๋น์ง๋์ค ๋ก์ง์๋ง ์ง์คํ ์ ์๊ฒ ํด์ฃผ๋ฉฐ, ํ๋ก์ ํธ๋ง๋ค ๋ค๋ฅธ ๊ด์ฌ์ฌ๋ฅผ ์ ์ฉํ ๋, ์ฝ๋ ์์ ์ ์ต์ํ ํ ์ ์๋ค. ๋ํ ์ํ๋ ๊ด์ฌ์ฌ์ ์ ์ง๋ณด์๊ฐ ์์ํ ์ฝ๋๋ฅผ ๊ตฌ์ฑํ ์ ์๋ค.
๐ก MVC๊ตฌ์กฐ
Model-view-Controller์ ์ฝ์์ด๋ค.
Model : ๋ชจ๋ธ์ ๋ทฐ๊ฐ ๋ ๋๋งํ๋๋ฐ ํ์ํ ๋ฐ์ดํฐ์ด๋ค. ์๋ฅผ ๋ค์ด ์ฌ์ฉ์๊ฐ ์์ฒญํ ์ํ ๋ชฉ๋ก์ด๋, ์ฃผ๋ฌธ ๋ด์ญ์ด ์ด์ ํด๋น๋๋ค.
View : ์น ์ดํ๋ฆฌ์ผ์ด์ ์์ ๋ทฐ(View)๋ ์ค์ ๋ก ๋ณด์ด๋ ๋ถ๋ถ์ด๋ฉฐ, ๋ชจ๋ธ์ ์ฌ์ฉํด ๋ ๋๋งํ๋ค. ๋ทฐ๋ JSP, JSF, PDF, XML๋ฑ์ผ๋ก ๊ฒฐ๊ณผ๋ฅผ ํํํ๋ค.
Controller : ์ปจํธ๋กค๋ฌ๋ ์ฌ์ฉ์์ ์ก์ ์ ์๋ตํ๋ ์ปดํฌ๋ํธ๋ค. ์ปจํธ๋กค๋ฌ๋ ๋ชจ๋ธ์ ์ ๋ฐ์ดํธํ๊ณ , ๋ค๋ฅธ ์ก์ ๋ค์ ์ํํ๋ค.
๐ก WAS์ ์ข ์์ ์ด์ง ์์
๐ก ํธ๋์ญ์
ํธ๋์ ์ ๊ด๋ฆฌ๋ฅผ ์ด๋ ธํ ์ด์ ์ด๋ XML์ค์ ๋ง์ผ๋ก ๋๋ผ ์ ์๋ค.