: ์ ํํ ํํ์ '์คํ๋ง ํ๋ ์์ํฌ(Spring Framework)'์ด๋ฉฐ, ์ด๋ ์๋ฐ์์ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ ํ๋ ์์ํฌ์ด๋ค. ์คํ๋ง์ ์ ์๋ ๋ค์๊ณผ ๊ฐ๋ค.
" ์ํฐํ๋ผ์ด์ฆ์ฉ Java ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ ํธํ๊ฒ ํ ์ ์๊ฒ ํด์ฃผ๋ ์คํ์์ค ๊ฒฝ๋๊ธ ์ ํ๋ฆฌ์ผ์ด์ ํ๋ ์์ํฌ "
๐ถ์ฌ์ค ํ ๋ฒ์ ์ดํดํ๊ธฐ์๋ ๋ณต์กํ ์ ์๋ค. ๋ฌด์จ ๋ง์ธ์ง ํ๋์ฉ ์์๋ณด์!
๊ธฐ์ ์์ ์ด์ํ๋ ์น ์๋น์ค์๋ ๋น์ฆ๋์ค ๋ก์ง์ด ์๋ค. ๋น์ฆ๋์ค ๋ก์ง์ ๊ตฌํํ ๋์ ์ด๋ ค์์ ํด๊ฒฐํ๊ธฐ ์ํด EJB(Enterprise JavaBeans)๊ฐ ๋ฑ์ฅํ์ง๋ง, ์ด๋ ์คํ๋ ค ๋ค๋ฅธ ์ฐจ์์ ๋ ํฐ ๋ณต์กํจ์ ๋๊ณ ๋ค์ด์๋ค. ์ด์ ๋์์ผ๋ก ๋ฑ์ฅํ ๊ฒ์ด Spring์ด๋ค.
์คํ๋ง์ ์ด์ ๊ธฐ์ ์ธ EJB์ ๋นํด ์ฌ์ฉ ๋ฐฉ๋ฒ์ด ๋ ๋ณต์กํด์ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์๋ค์ด ์คํ๋ง์ด๋ผ๋ ํ๋ ์์ํฌ๊ฐ ์ ๊ณตํ๋ ๊ธฐ์ ์ด ์๋๋ผ ์์ ์ด ์์ฑํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ก์ง์ ๋ ๋ง์ ๊ด์ฌ๊ณผ ์๊ฐ์ ์๊ฒ ํด ์ค๋ค. ๋ฐ๋ผ์, ๊ฐ๋ฐ ์ด๊ธฐ์ ๊ธฐ๋ณธ์ ์ธ ์ค์ ๊ณผ ์ ์ฉ์ํฌ ๊ธฐ์ ๋ค๋ง ์ ์ ํํด ์ค๋ค๋ฉด, ๊ธฐ์ ๋ณด๋ค๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ก์ง ์์ฒด์ ๋ ์ง์คํ์ฌ ๋น์ฆ๋์ค ๋ก์ง์ ๊ตฌํํ ์ ์๋ค.
โก๏ธ ์ฆ, Spring์ ๋น์ฆ๋์ค ๋ก์ง ๊ตฌํ์ ์ฝ๊ฒ ๋ง๋ค์ด ์ฃผ๋ฉด์๋ ๊ทธ ๊ธฐ์ ์ด ์ด๋ ต์ง ์์ ๋ก์ง ์์ฒด์ ์ง์คํ ์ ์๊ฒ ํ๋ ํ๋ ์์ํฌ์ด๋ค!
์คํ๋ง์ ๋ชจ๋ ์ฌ์ฉ์์๊ฒ ๋ฌด๋ฃ๋ก ์ด๋ ค ์๋ค. ๋ค์ ๋งํด, ๋๊ตฌ๋ ์คํ๋ง์ ์ฌ์ฉํ์ฌ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ ์ ์์ผ๋ฉฐ, ํ์ํ๋ค๋ฉด ์คํ๋ง์ ์ฝ๋๋ฅผ ์ผ๋ถ ์์ ํ์ฌ ์ฌ์ฉํ์ฌ๋ ๋ฌด๊ดํ๋ค. ์ด์ฒ๋ผ ์คํ์์ค๋ก ํ๋ก์ ํธ๋ฅผ ๊ณต๊ฐํด ๋๋ฉด ์ฌ๋ฌ ์ฌ๋์ด ํ๋ก์ ํธ์ ์ฝ๋๋ฅผ ์ฌ์ฉํด ๋ด์ผ๋ก์จ ๋ค์ํ ๊ฒ์ฆ ๊ณผ์ ์ ๊ฑฐ์น ์ ์๋ค๋ ์ฅ์ ์ด ์๋ค.
(+) ํ๋ ์์ํฌ๊ฐ ์์ ์ ์ด์ง ๋ชปํ ๊ฒฝ์ฐ ์๋น์ค ์ ๊ณต์ ๋ถ์์ ์ฑ์ด ์ผ๊ธฐ๋๊ณ , ๊ฒฐ๊ตญ ๊ธฐ์ ์ ์์ต ๊ฐ์๋ก ์ด์ด์ง ์ ์๋ค. ๊ทธ๋ฌ๋ ์คํ๋ง์ ์คํ์์ค ํ๋ ์์ํฌ์์๋ ๋ถ๊ตฌํ๊ณ ์์ ์ ์ธ ๊ฐ๋ฐ๊ณผ ๊ฐ์ ์ด ๋ณด์ฅ๋๋ค. ๋๊ตฌ๋ ์ด์ฉํ ์ ์์ง๋ง, ์คํ๋ง์์ค(SpringSource)๋ผ๋ IT๊ธฐ์ ์์ ๊ด๋ฆฌํ๊ณ ์์ผ๋ฉฐ, ์คํ๋ง์ ์์ค ์ฝ๋๋ฅผ ์์ ํ๊ฑฐ๋ ๊ฐ์ ํ๋ ์์ ์๋ ๋งค์ฐ ํ์ ์ ์ธ ์ธ์๋ง ์ฐธ์ฌํ ์ ์๊ธฐ์ ์์ ํ๋ค.
๐ง์คํ๋ง์ด ๊ฒฝ๋๊ธ์ด๋ผ๋ ๊ฑด ์คํ๋ง ์์ฒด๊ฐ ์์ฃผ ๊ฐ๋ณ๋ค๊ฑฐ๋ ์์ ๊ท๋ชจ์ ์ฝ๋๋ก ์ด๋ฃจ์ด์ก๋ค๋ ๋ป์ ์๋๋ค. ์คํ๋ ค ์คํ๋ง์ ์์ญ๋ง ๋ผ์ธ์ ๋ฌํ๋ ์ฝ๋๋ฅผ ๊ฐ์ง ๋งค์ฐ ๋ฐฉ๋ํ ๊ท๋ชจ์ ํ๋ ์์ํฌ์ด๋ค. ๊ทธ๋ผ ์คํ๋ง์ด ๊ฐ๋ณ๋ค๊ณ ํ๋ ์ด์ ๋ ๋ฌด์์ผ๊น?
๋น์ EJB(Enterprise Java Bean)๋ ๊ธฐ์ ์ ๋ํ ๊ณผ๋ํ ์์ฌ์ผ๋ก ์ธํด ๋ชจ๋ ์ฝ๋๋ฅผ ๋งค์ฐ ๋ฌด๊ฒ๊ณ ๋ณต์กํ๊ฒ ๋ง๋ค์๋ค. EJB๊ฐ ๋์ํ๋ ค๋ฉด ๊ณ ๊ฐ์ ๋๋ฆฌ๊ณ ๋ฌด๊ฑฐ์ด ์๋ฐ ์๋ฒ(WAS)๊ฐ ํ์ํ๊ณ , ํด์ ๋์ ์์ด๋ ๋ค๋ฃจ๊ธฐ ํ๋ ์์๋ค์ด ๋ถ๋ด์ด ๋์ด ๊ณ ๊ฐ์ ๊ฐ๋ฐ ํ๊ฒฝ์ ๊ฐ์ถ์ง ์๊ณ ๋ ๊ฐ๋ฐํ๊ธฐ๊ฐ ํ๋ค์๋ค.
์ด์ ๋ฐํด, ์คํ๋ง์ ๊ฐ์ฅ ๋จ์ํ ์๋ฒ ํ๊ฒฝ์ธ ํฐ์บฃ์ด๋ ์ ํฐ์์๋ ์๋ฒฝํ๊ฒ ๋์ํ๋ค. ๋จ์ํ ๊ฐ๋ฐ ํด๊ณผ ๊ธฐ๋ณธ์ ์ธ ๊ฐ๋ฐ ํ๊ฒฝ์ผ๋ก๋ ์ ํ๋ฆฌ์ผ์ด์
์ ๊ฐ๋ฐํ๊ธฐ์ ์ถฉ๋ถํ๋ค. ๋ฐ๋ผ์ (๋ณต์กํ ๊ธฐ๋ฅ์ด ์๋ฉ ํฌํจ๋) ๊ณ ๊ธ WAS๋ฅผ ๊ตณ์ด ์ฌ์ฉํ ํ์๋ ์๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ์คํ๋ง์ EJB์ ๊ธฐ์กด ๊ธฐ์ ๋ค์ด ๋ถํ์ํ๊ฒ ๋ฌด๊ฒ๊ณ ๋ณต์กํ์์ ์ฆ๋ช
ํ ์
์ด๊ณ , ๊ทธ๋ฐ ๋ฉด์์ ์คํ๋ง์ ๊ตฐ๋๋๊ธฐ ์์ด ๊น๋ํ ๊ธฐ์ ์ ๊ฐ์ง '๊ฒฝ๋๊ธ' ํ๋ ์์ํฌ๋ผ๊ณ ๋ถ๋ฆฐ ๊ฒ์ด๋ค.
์คํ๋ง์ ์ด๋ฌํ ํน์ง์ ๊ฐ๋ฐ ํ๊ฒฝ๊ณผ ์๋ฒ์๋ง ๊ตญํ๋์ง ์๊ณ , ์ฝ๋์์๋ ์ ์ฉ๋์๋ค. EJB์ WAS ๊ฐ์ ๊ธฐ์ , ํ๊ฒฝ์ ์ง์ํ๊ธฐ ์ํด ๋ถํ์ํ๊ฒ ๋ฐ๋ณต์ ์ผ๋ก ๋ฑ์ฅํ๋ ์ฝ๋๋ฅผ ์ ๊ฑฐํจ์ผ๋ก์จ ์ฝ๋์ ๋ณต์ก์ฑ๋ ๋ฎ์ถ์๋ค.
โก๏ธ (์ด์ ์ ๊ธฐ์ ์ธ EJB์ ๋น๊ตํด์) ๊ฒฐ๊ณผ๋ฌผ๋ก ๋ง๋ค์ด์ง ์ฝ๋์ ์์ค์ ๋น์ทํ๋๋ผ๋, ๊ทธ๊ฒ์ ํจ์ฌ ํจ์จ์ ์ด๊ณ ๊น๋ํ๊ฒ ์์ฑํ ์ ์๊ฒ ํด์ ์์ฐ์ฑ, ํ์ง ๋ฉด์์ ์ ๋ฆฌํ๋ค๋ ๊ฒ์ด ๊ฒฝ๋๊ธ์ด๋ผ๋ ๋ง๋ก ํํ๋๋ ์คํ๋ง์ ํน์ง์ธ ๊ฒ์ด๋ค! :>
์ผ๋ฐ์ ์ผ๋ก ํ๋ ์์ํฌ๋ ํ๋์ ๊ธฐ์ ์ ์ง์คํ๋๋ฐ, ์ ํ๋ฆฌ์ผ์ด์ ํ๋ ์์ํฌ๋ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ ํ์ํ ๋ชจ๋ ๊ณผ์ ์ ์ง์คํ๋ค. ๋ค์ ๋งํด, ์ ํ๋ฆฌ์ผ์ด์ ํ๋ ์์ํฌ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ๋ ๋ฐ์ ์์ด ํ์ํ ๋ชจ๋ ์ฝ๋๋ค์ ํ์ ์ ๊ณตํ๋ค.
Spring์ POJO ํ๋ก๊ทธ๋๋ฐ์ ์งํฅํ๋ค.
์ฌ๊ธฐ์ POJO๋, Plain Old Java Object, ์ฆ ์์ Java๋ง์ ํตํด์ ์์ฑํ ๊ฐ์ฒด๋ฅผ ์๋ฏธํ๋ค. ์ด๋ค ๊ฐ์ฒด๊ฐ ์ธ๋ถ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ธ๋ถ์ ๋ชจ๋์ ๊ฐ์ ธ์์ ์ฌ์ฉํ๊ณ ์๋ค๋ฉด, ๊ทธ ๊ฐ์ฒด๋ POJO๋ผ๊ณ ํ ์ ์๋ค. POJO๋ ๋ง ๊ทธ๋๋ก, ๋ค๋ฅธ ๊ธฐ์ ์ ์ฌ์ฉํ์ง ์๋ ์์ํ Java๋ง์ ์ฌ์ฉํ์ฌ ๋ง๋ ๊ฐ์ฒด์ธ ๊ฒ์ด๋ค.
๐POJO๋ ์ ์ค์ํ ๊น?
์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ importํ์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๊ณ ์๋ ๊ฐ์ฒด๊ฐ ์๋ค๊ณ ๊ฐ์ ํด ๋ณด์. ์ด ๊ฐ์ฒด๋ ์์ Java ์ธ์ ์ธ๋ถ ๊ธฐ์ ์ ์ฌ์ฉํ๊ณ ์์ผ๋ฏ๋ก, POJO๊ฐ ์๋๋ค. ์ด๋, ์ด ๊ฐ์ฒด๊ฐ ์ฌ์ฉํ๊ณ ์๋ ๊ธฐ์ ์ด Deprecated(๊ฐ์น๊ฐ ๋จ์ด์ ธ ์ฌ๋ผ์ง) ๋๊ฑฐ๋, ๊ฐ์ ๋ ์ ๊ธฐ์ ์ด ๋ฑ์ฅํ์ฌ ๊ธฐ์กด ๊ธฐ์ ์ ๋์ฒดํ๋ ์ํฉ์ด ๋ฐ์ํ๋ฉด ํด๋น ๊ธฐ์ ์ ์ฌ์ฉํ๊ณ ์๋ ๋ชจ๋ ๊ฐ์ฒด๋ค์ ์ฝ๋๋ฅผ ์ ๋ถ ๋ฐ๊ฟ ์ฃผ์ด์ผ ํ๋ค. ์ด๋ ๊ฐ์ฒด๊ฐ ์ธ๋ถ ๋ชจ๋์ ์ง์ ์ ์ผ๋ก ์์กดํ๊ณ ์๊ธฐ ๋๋ฌธ์ ์์ฐ์ค๋ฝ๊ฒ ๋ฐ์ํ๋ ๋ฌธ์ ์ด๋ค.
๋ฐ๋ฉด, POJO๋ ๋ค๋ฅธ ๋ฌด์ธ๊ฐ์ ์ข ์๋์ง ์์ผ๋ฏ๋ก ๋ณด๋ค ์ ์ฐํ๊ฒ ๋ณํ/ํ์ฅ์ ๋์ฒํ ์ ์๋ค. ์ด๋ฌํ POJO๋ฅผ ์ฌ์ฉํ์ฌ ๋น์ฆ๋์ค ๋ก์ง์ ๊ตฌ์ฑํ๋ฉด ๊ฐ์ฒด ์งํฅ ์ค๊ณ๋ฅผ ์ ํ ์์ด ์ ์ฉํ ์ ์์ผ๋ฉฐ, ์ฝ๋๊ฐ ๋จ์ํด์ ธ ํ ์คํธ์ ๋๋ฒ๊น ๋ํ ์ฌ์์ง๋ค.
Java๋ ๊ฐ์ฒด์งํฅ ์ธ์ด์ด๋ฏ๋ก, Java ์ ํ๋ฆฌ์ผ์ด์ ์์์๋ ๊ฐ์ฒด๋ค ๊ฐ์ ๊ด๊ณ๋ฅผ ์ ์ ํ ๋งบ์ด ์ฃผ๋ ๊ฒ์ด ์ค์ํ๋ค. ์ฌ๊ธฐ์ ๋งํ๋ ๊ด๊ณ์ ๊ฐ๋ ์ ์ด๋ ต์ง ์๋ค. A ์ธ์คํด์ค๊ฐ B ์ธ์คํด์ค์ ๋ฉ์๋๋ฅผ ํธ์ถํ๊ณ ์๋ค๋ฉด A๋ B์ ์์กด ๊ด๊ณ๋ฅผ ๋งบ์ ๊ฒ์ด ๋๋ฉฐ, "A๊ฐ B์ ์์กดํ๋ ๊ด๊ณ"๋ผ๊ณ ํํํ ์ ์๋ค.
class A {
public void methodOfA() {
B b = new B();
b.example();
}
}
class B {
public void example() { ... }
}
์์ A์ B์ ์์กด ๊ด๊ณ๋ ๊ฐ๋ฐ์์ ์ํด ๋ง๋ค์ด์ง๋ค. ๊ทธ๋ฐ๋ฐ ๋ง์ฝ, A๊ฐ ์ฌ์ฉํ ๊ฐ์ฒด๋ฅผ B๊ฐ ์๋ C๋ก ๋์ฒดํ๊ณ ์ ํ๋ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ ๊น? ๋น์ฐํ๊ฒ๋, A์์ ์ฌ์ฉ๋๋ B์ ์์๋ฅผ ๋ชจ๋ ์ง์ ๋ณ๊ฒฝํด์ผ๋ง ํ๋ค( B b = new B();
โก๏ธ C c = new C()
์ ๊ฐ์ด, b.example๋ ๋ง์ฐฌ๊ฐ์ง ). ๋ง์ฝ ๊ธฐ์กด์ B๋ฅผ ์ฌ์ฉํ๋ ๊ฐ์ฒด๊ฐ A๋ฟ๋ง ์๋๋ผ ์์ญ ๊ฐ๊ฐ ์๋ค๋ฉด ๋ชจ๋ ๊ฐ์ฒด์ ์ฝ๋๋ฅผ ํ๋ํ๋ ์์ ํด ์ฃผ์ด์ผ ํ๋ ๊ฒ์ด๋ค.
์คํ๋ง์ ์ฌ์ฉํ๋ฉด ์ด๋ฌํ ์ํฉ์์ ์ต์ํ์ ์์ ๋ง์ผ๋ก ๋ณํ๋ฅผ ์ ์ฐํ๊ฒ ์์ฉํ ์ ์๋ค. ์๋์ ๊ฐ์ด ์ฝ๋๋ฅผ ์์ ํ๋ฉด ๋๋ค. (1)~(5)์ ์ค๋ช ์ ๋ฐ๋ผ๊ฐ๋ฉด ์ฝ๊ฒ ์ดํด๋ ๊ฒ์ด๋ค.
// (1) A๊ฐ ์ฌ์ฉํ๋ ๋ฉ์๋๋ฅผ ์ธํฐํ์ด์ค I์ ์ถ์ ๋ฉ์๋๋ก ์ ์ํ ๋ค์, (์ถ์ํ)
interface I {
void example();
}
class A {
// (3) ๊ทธ ๋ค์, ์ธํฐํ์ด์ค ํ์
์ ํ๋๋ฅผ ์ ์ธํ๊ณ ,
private I i;
// (4) ์์ฑ์๋ฅผ ํตํด ์ธ๋ถ๋ก๋ถํฐ ์ธ์คํด์ค๋ฅผ ๋ฐ์์ i๋ฅผ ์ด๊ธฐํํด์ค๋ค. (๋คํ์ฑ)
public A(I i) {
this.i = i;
}
public void methodOfA() {
// (5) ์ธ๋ถ๋ก๋ถํฐ ๋ฐ์์จ ์ธ์คํด์ค์ ๋ฉ์๋๋ฅผ ํธ์ถํ๋ค.
i.example();
}
}
// (2) A๊ฐ ์ฌ์ฉํ๋ ๋ฉ์๋๋ฅผ ๊ฐ์ง ๊ฐ์ฒด๋ค์ด I๋ฅผ ๊ตฌํํ๋๋ก ํ๋ค.
class B implements I {
public void example() { ... }
}
class C implements I {
public void example() { ... }
}
โก๏ธ ์ ์์ ์์ A๋ ์์ ์ด ์ฌ์ฉํ ๊ฐ์ฒด๋ฅผ ์ค์ค๋ก ์์ฑํ์ง ์๊ณ , ์์ฑ์๋ฅผ ํตํด ์ธ๋ถ๋ก๋ถํฐ ๋ฐ์์ค๊ณ ์๋ค. ๊ทธ๋ ๋ค๋ฉด ๋๊ตฐ๊ฐ A๊ฐ ์ฌ์ฉํ ๊ฐ์ฒด๋ฅผ ๊ฒฐ์ ํ๊ณ ์์ฑํด์ A์ ์ธ์คํด์ค๊ฐ ์์ฑ๋ ๋ ์ธ์๋ก ์ ๋ฌํด ์ฃผ์ด์ผ ํ๋ค. ์ฌ๊ธฐ์, ๊ทธ '๋๊ตฐ๊ฐ'์ ์ญํ ์ ๋ฐ๋ก ์คํ๋ง์ด ํ๋ค. ์คํ๋ง์ ์ฌ์ฉํ๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ก์ง ์ธ๋ถ์์ A๊ฐ ์ฌ์ฉํ ๊ฐ์ฒด๋ฅผ ๋ณ๋๋ก ์ค์ ํ ์ ์๋ค.
๊ฐ๋ฐ์๊ฐ ์ค์ ํด๋์ค ํ์ผ์ A๊ฐ ์ฌ์ฉํ ๊ฐ์ฒด๋ฅผ C๋ก ์ค์ ํด ๋๋ฉด, ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋์ํ๋ฉด์ ์คํ๋ง์ด ์ค์ ํด๋์ค ํ์ผ์ ํด์ํ๊ณ , ๊ฐ๋ฐ์๊ฐ ์ค์ ํด๋ ๋๋ก C ๊ฐ์ฒด๋ฅผ ์์ฑํ์ฌ A์ ์์ฑ์์ ์ธ์๋ก C๋ฅผ ์ ๋ฌํด ์ค๋ค.
โก๏ธ ์ด์ฒ๋ผ ๊ฐ๋ฐ์๊ฐ ์๋ ์คํ๋ง์ด (A๊ฐ ์ฌ์ฉํ ๊ฐ์ฒด๋ฅผ ์์ฑํ์ฌ) ์์กด ๊ด๊ณ๋ฅผ ๋งบ์ด์ฃผ๋ ๊ฒ์ IoC(Inversion of Control, ์ ์ด์ ์ญ์ )๋ผ๊ณ ํ๋ฉฐ, ๊ทธ ๊ณผ์ ์์ C๋ฅผ A์ ์์ฑ์๋ฅผ ํตํด ์ฃผ์
ํด ์ฃผ๋ ๊ฒ์ DI(Dependency Injection, ์์กด์ฑ ์ฃผ์
)๋ผ๊ณ ํ๋ค! :>
AOP๋ Aspect Oriented Programming์ ์ฝ์๋ก, ๊ด์ฌ ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ์๋ฏธํ๋ค. ์ด๋ OOP(๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ)๋ฅผ ๋์ฑ ๋ณด์ํ๊ณ ํ์ฅํ ๊ฐ๋ ์ผ๋ก, ํ๋์ ์ํํธ์จ์ด๊ฐ ํ๋์ ๊ฑฐ๋ํ OOP๋ก์จ ์ค๊ณ ๋ฐ ํ๋ก๊ทธ๋๋ฐ๋์๋ค๋ฉด ์ด๊ฒ์ ๊ฐ ๊ธฐ๋ฅ๋ณ๋ก ๋ชจ๋ํํด์ ๋ถ๋ฆฌํ๋ ๊ฐ๋ ์ด๋ค.
๊ฐ๋ฐ์๋ค์ OOP๋ฅผ ํตํด์ ๊ฐ์ฒด๋ฅผ ์ฌ์ฌ์ฉํจ์ผ๋ก์จ ๋ฐ๋ณต๋๋ ์ฝ๋์ ์์ ๋ง์ด ์ค์ผ ์ ์์๋ค. ํ์ง๋ง, ๊ฐ์ฒด์ ์ฌ์ฌ์ฉ์๋ ๋ถ๊ตฌํ๊ณ ํ์์ ์ผ๋ก ๋ฐ๋ณต๋๋ ์ฝ๋๋ค์ ์์จ ์๋ ์์๋ค. ์ด๋ฅผ '๊ณตํต ๊ด์ฌ ์ฌํญ'์ด๋ผ ํ๋ฉฐ ํธ๋์ญ์ , ๋ก๊น , ์ฑ๋ฅ ๋ถ์ ๋ฑ์ด ์๋ค(์๋์ ์ค๋ช ์ฐธ๊ณ ). ๊ณตํต ๊ด์ฌ ์ฌํญ์ ์ ๊ฐ๊ฐ์ OOP ์์ค์ฝ๋์์ ์ ๊ฑฐํ๊ณ ๋ณ๋์ ๊ฐ์ฒด๋ก ๋ถ๋ฆฌํด๋ด์ ํ๋์ ๊ณตํต ๋ชจ๋๋ก ๋ง๋๋ ๊ฒ์ด ๊ธฐ์กด์ OOP์ AOP ๊ด์ ์ ๋ํด ๋ฐ์ ์ํจ ๊ธฐ๋ฒ์ด๋ฉฐ, ์ด๊ฒ์ด AOP์ ํต์ฌ์ธ '๊ด์ฌ์ ๋ถ๋ฆฌ'์ด๋ค.
์ฆ, ์ ํ๋ฆฌ์ผ์ด์
์ ๋ฐ์ ๊ฑธ์ณ ์ ์ฉ๋๋ ๊ณตํต ๊ธฐ๋ฅ์ ๋น์ฆ๋์ค ๋ก์ง์ผ๋ก๋ถํฐ ๋ถ๋ฆฌํด ๋ด๋ ๊ฒ์ด ๊ด์ฌ ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ด๋ค. ์ด๋ฅผ ํตํด์ ์ค๋ณต ์ฝ๋ ์ ๊ฑฐ, ํจ์จ์ ์ธ ์ ์ง ๋ณด์, ๋์ ์์ฐ์ฑ, ์ฌํ์ฉ์ฑ ๊ทน๋ํ ๋ฑ์ ์ด์ ์ ์ป์ ์ ์๋ค.
(+) ๊ณตํต ๊ด์ฌ ์ฌํญ / ํต์ฌ ๊ด์ฌ ์ฌํญ ?
์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ ๋์ ๊ตฌํํด์ผ ํ๋ ๊ธฐ๋ฅ๋ค์ ํฌ๊ฒ ๊ณตํต ๊ด์ฌ ์ฌํญ[ํก๋จ ๊ด์ฌ์ฌ]๊ณผ ํต์ฌ ๊ด์ฌ ์ฌํญ์ผ๋ก ๋ถ๋ฅํ ์ ์๋ค. ๋จผ์ , ํต์ฌ ๊ด์ฌ ์ฌํญ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ํต์ฌ ๊ธฐ๋ฅ๊ณผ ๊ด๋ จ๋ ๊ด์ฌ ์ฌํญ์ผ๋ก, ์ผํ ์ ํ๋ฆฌ์ผ์ด์ ์ ์๋ก ๋ ๋ค๋ฉด ์ํ ๋ฑ๋กํ๊ธฐ, ์ฃผ๋ฌธํ๊ธฐ, ์ฃผ๋ฌธ ๋ณ๊ฒฝํ๊ธฐ ๋ฑ์ด ์์ ๊ฒ์ด๋ค. ๋ฐ๋ฉด, ๊ณตํต ๊ด์ฌ ์ฌํญ์ ๋ชจ๋ ํต์ฌ ๊ด์ฌ ์ฌํญ์ ๊ณตํต์ ์ผ๋ก ์ ์ฉ๋๋ ๊ด์ฌ ์ฌํญ๋ค์ ์๋ฏธํ๋ค. ์๋ฅผ ๋ค์ด, ์ํ ๋ฑ๋กํ๊ธฐ, ์ฃผ๋ฌธํ๊ธฐ, ์ฃผ๋ฌธ ๋ณ๊ฒฝํ๊ธฐ ๋ฑ ๋ชจ๋ ํต์ฌ ๊ด์ฌ ์ฌํญ์๋ ๋ก๊น ์ด๋ ๋ณด์ ๋ฑ๊ณผ ๊ด๋ จ๋ ๊ธฐ๋ฅ๋ค์ด ๊ณตํต์ ์ผ๋ก ์ ์ฉ๋์ด์ผ๋ง ํ๋ค.
์ด๋ ํต์ฌ ๊ด์ฌ ์ฌํญ๊ณผ ๊ณตํต ๊ด์ฌ ์ฌํญ์ ์ฝ๋๊ฐ ๋ชจ์ฌ ์์ผ๋ฉด ๊ณตํต ๊ด์ฌ ์ฌํญ๊ณผ ๊ด๋ จ๋ ์ฝ๋๊ฐ ์ค๋ณต๋๊ธฐ ๋ง๋ จ์ธ๋ฐ, ์ด ๊ฒฝ์ฐ ๊ณตํต ๊ด์ฌ ์ฌํญ ์ํ์ ๋ก์ง์ด ๋ณ๊ฒฝ๋๋ฉด ๋ชจ๋ ์ค๋ณต ์ฝ๋๋ฅผ ์ฐพ์ ์ผ์ผ์ด ์์ ํด ์ฃผ์ด์ผ ํ๋ ๋ฌธ์ ๊ฐ ์๋ค.
Portable Service Abstraction์ ์ฝ์์ธ PSA๋ '์ผ๊ด๋ ์๋น์ค ์ถ์ํ'๋ฅผ ๋ปํ๋ค. ์ด๋ ์คํ๋ง์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋น์ค๋ฅผ ์ถ์ํํ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํด ์ฃผ๊ธฐ ๋๋ฌธ์ ์คํ๋ง์ ์ฌ์ฉํ๋ฉด ๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค(MySQL, Oracle, MariaDB, MongoDB ๋ฑ)์ ์ฌ์ฉ ๋ฐฉ๋ฒ์ ๊ด๊ณ์์ด ๋์ผํ ์ฌ์ฉ ๋ฐฉ๋ฒ์ ์ ์งํ ์ฑ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ฐ๊ฟ ์ ์๋ค๋ ๋ง์ด๋ค.
๋ค์ ๋งํด, ์คํ๋ง์ Java๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๊ทผํ๋ ๋ฐฉ๋ฒ์ ๊ท์ ํ ์ธํฐํ์ด์ค(JDBC : Java DataBase Cconnectivity)๋ฅผ ์ ๊ณตํ๋๋ฐ, ์ด์ฒ๋ผ ํน์ ๊ธฐ์ ๊ณผ ๊ด๋ จ๋ ์๋น์ค๋ฅผ ์ถ์ํํ์ฌ ์ผ๊ด๋ ๋ฐฉ์์ผ๋ก ์ฌ์ฉ๋ ์ ์๋๋ก ํ ๊ฒ์ 'PSA, ์ผ๊ด๋ ์๋น์ค ์ถ์ํ'๋ผ๊ณ ํ๋ค.
(+) ์ด๋ ๊ฒ ๊ฐ์ฒดํ ๋ชจ๋ธ๊ณผ ๊ด๊ณํ ๋ชจ๋ธ์ ์ฌ์ด๋ฅผ ๋งคํํด์ฃผ๋ ๊ฒ์ ORM(Object Relational Mapping) ๊ธฐ์ ์ด๋ผ ํ๋ฉฐ, ORM์ ๊ตฌํํ๋ ๋ํ์ ์ธ ํ๋ ์์ํฌ๊ฐ Hibernate, ์ด๋ฅผ Java ํ์ค ๋ฐฉ์์ผ๋ก ์ ์ํ ๊ฒ์ด JPA์ด๋ค.
์คํ๋ง ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ XML ์ค์ ํ์ผ (web.xml, rootContext.xml, ServletContext.xml ๋ฑ) ์ ์์ฑํด์ผ ํ๋๋ฐ, ์ด๋ฅผ ๋ค ์ธ์ฐ๋ ๊ฑด ์ฌ์ค์ ๋ถ๊ฐ๋ฅํ๊ธฐ์ ๊ธฐ์กด์ ์ฌ์ฉ์ค์ ์ ์ฌ์ฌ์ฉ ํ๊ฑฐ๋ ๊ฐ๋ฐ์๊ฐ ํ๋ํ๋ ์ค์ ํด ์ฃผ์ด์ผ ํ๋ค. ์คํ๋ง ๋ถํธ๋ ์ด๋ฌํ ์คํ๋ง ์ด๊ธฐ ์ค์ ์ ๋ง์ ๋ถ๋ถ์ ์๋ํํ์ฌ ๊ฐํธํ ์ฒ๋ฆฌํด ์ฃผ๊ธฐ ์ํด ๋ฑ์ฅํ ๋ณ๋์ ํ๋ ์์ํฌ์ด๋ค. ์ฆ, ์คํ๋ง ๋ถํธ๋ ์คํ๋ง์ ๋ ์ฝ๊ฒ ์ด์ฉํ๊ธฐ ์ํ ๋๊ตฌ์ด๋ค.
: ์คํ๋ง ๋ถํธ๋ ๋ณต์กํ ์ค์ ์์ด ๋น ๋ฅด๊ฒ ํ๋ก์ ํธ๋ฅผ ์์ํ ์ ์๋๋ก ๋์์ค๋ค. ์คํ๋ง์ ๋ณต์กํ ์ค์ ๋๋ฌธ์ ๊ฐ๋ฐ์๋ค์ ๋ง์ ์ด๋ ค์์ ๊ฒช์๋ค. ์ฌ์ง์ด ํ๋ฒ ์ค์ ํ ๊ธฐ๋ฅ๋ค์ด ์คํ๋ง์ ๋ฒ์ ์ ์ผ๋ก ๋ณ๊ฒฝ๋๊ฑฐ๋ ์์ด์ง๋ ์ผ๋ ๋น์ผ๋น์ฌํ๋ค. ํ์ง๋ง ์คํ๋ง ๋ถํธ๋ ์คํ๋ง์ ๋ณต์กํ ์ค์ ์ ์๋ํยท๋จ์ํํ์ฌ ๋๊ตฌ๋ ์ฝ๊ฒ ์คํ๋ง์ ์ฌ์ฉํ ์ ์๋๋ก ํ๋ค.
: ์คํ๋ง ๋ถํธ๋ ๋ด์ฅ๋ ์์กด์ฑ ๊ด๋ฆฌ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค. ์ด๋ฅผ ํตํด ํ๋ก์ ํธ์์ ์ฌ์ฉํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ฒ์ ์ ์ฝ๊ฒ ๊ด๋ฆฌํ๊ณ , ํธํ์ฑ ๋ฌธ์ ๋ฅผ ์ต์ํํ ์ ์๋ค.
// (์ผ์ผ์ด ๊ด๋ จ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฐพ์ ์ถ๊ฐํ ํ์ ์์ด) spring-boot-starter-web์ ์ถ๊ฐํ๋ฉด ๊ด๋ จ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ฐ์ ์จ๋ค.
: ์คํ๋ง ๋ถํธ ๋์ ์คํ๋ง๋ง ์ฌ์ฉํ์ฌ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ๋ค๋ฉด ์คํํ ์ ์๋ ํฐ์บฃ๊ณผ ๊ฐ์ WAS(Web Application Server)๊ฐ ํ์ํ๋ค. WAS์ ์ข ๋ฅ๋ ๋งค์ฐ ๋ค์ํ๋ฉฐ ์ค์ ๋ฐฉ์๋ ์ ๊ฐ๊ฐ์ด์ด์ WAS๋ง์ผ๋ก๋ ๊ณต๋ถํด์ผ ํ ๋ด์ฉ๋ ์๋นํ๋ค. ํ์ง๋ง ์คํ๋ง ๋ถํธ์๋ ํฐ์บฃ/์ ํฐ ๋ฑ์ ์น ์๋ฒ๊ฐ ๋ด์ฅ๋์ด ์๊ธฐ์ ๋ณ๋์ ์น ์๋ฒ ์ค์น ์์ด ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํ ์ ์๋ค.
: ์คํ ๊ฐ๋ฅํ JAR ๋๋ WAR ํ์ผ๋ก ํจํค์ง ํด์ ๋ฐฐํฌํ ์ ์๋ค. ์น ํ๋ก์ ํธ๋ผ๋ฉด WAR ํ์ผ๋ก ํจํค์ง ํด์ผ ํ๋๋ฐ ์คํ๋ง ๋ถํธ๋ ๋ด์ฅ ์๋ฒ(ํฐ์บฃ ๋ฑ)๋ฅผ ์ง์ํ๊ธฐ ๋๋ฌธ์ JAR ํ์ผ๋ก ํจํค์ง ํด์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํ์ํฌ ์ ์๋ค.
โ JAR? WAR?
๊ธฐ๋ณธ์ ์ผ๋ก JAR, WAR ๋ชจ๋ Java์ jar ์ต์ (java -jar)์ ์ด์ฉํด ์์ฑ๋ ์์ถ(์์นด์ด๋ธ) ํ์ผ๋ก, ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฝ๊ฒ ๋ฐฐํฌํ๊ณ ๋์์ํฌ ์ ์๋๋ก ๊ด๋ จ ํ์ผ์ ํจํค์ง ํ ๊ฒ์ด๋ค.
JAR (Java Archive)
- JAVA ์ดํ๋ฆฌ์ผ์ด์ ์ด ๋์ํ ์ ์๋๋ก ์๋ฐ ํ๋ก์ ํธ๋ฅผ ์์ถํ ํ์ผ : Class (JAVA๋ฆฌ์์ค, ์์ฑ ํ์ผ), ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ์ผ์ ํฌํจํจ
- JRE(JAVA Runtime Environment)๋ง ์์ด๋ ์คํ ๊ฐ๋ฅํจ (java -jar ํ๋ก์ ํธ๋ค์.jar)
WAR (Web Application Archive)- Servlet / Jsp ์ปจํ ์ด๋์ ๋ฐฐ์นํ ์ ์๋ ์น ์ ํ๋ฆฌ์ผ์ด์ (Web Application) ์์ถํ์ผ ํฌ๋งท : ์น ๊ด๋ จ ์์(JSP, Servlet, JAR, Class, XML, HTML, Javascript)์ ํฌํจํจ
( ์ฆ, JARํ์ผ์ ์ผ์ข ์ผ๋ก ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฒด๋ฅผ ํจํค์ง ํ๊ธฐ ์ํ JAR ํ์ผ์ด๋ค. )- ๋ณ๋์ ์น์๋ฒ(WEB) or ์น ์ปจํ ์ด๋(WAS) ํ์
๐ Spring์ ์คํ๋ง ํ๋ ์์ํฌ๋ฅผ ๋ณด๋ค ์ธ๋ฐํ๊ฒ ์ ์ดํ๊ณ ์ ํ๋ ๊ฒฝ์ฐ์, Spring Boot๋ ๋น ๋ฅด๊ณ ๊ฐ๋จํ๊ฒ ์คํ๋ง ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ๊ณ ์ ํ๋ ๊ฒฝ์ฐ์ ์ฌ์ฉ๋๋ค. ์ฌ์ค Spring์ ์ฌ์ฉํ๊ฒ ๋ ์ผ์ (๊ฑฐ์) ์์ด, ์ฅ์ ์ด ๋๋ฌด๋ ๋ง์ Spring Boot๋ฅผ ์ฐ๊ฒ ๋ ๊ฒ์ด๋ค :>