๐ ์คํ๋ง์ ์ฝ์ ํธ(IoC, DI, AOP, PSA) ์ฝ๊ฒ ์ดํดํ๊ธฐ
์คํ๋ง์ ์ค์ํ ์ฝ์ ํธ์ธ IoC(์ ์ด์ ์ญ์ ), DI(์์กด์ฑ ์ฃผ์ ), AOP(๊ด์ ์งํฅ ํ๋ก๊ทธ๋๋ฐ), PSA(์ด์ ๊ฐ๋ฅํ ์๋น์ค ์ถ์ํ)์ ๋ํด ์ ์ค๋ช ๋ ๋ธ๋ก๊ทธ ๊ธ์ด ์์ด ๊ณต์ ๋๋ฆฝ๋๋ค. ๐ IoC(์ ์ด์ ์ญ์ ) ์ ์ด์ ์ญ์ ์ ๋ค๋ฅธ ๊ฐ์ฒด๋ฅผ ์ง์ ์์ฑํ๊ฑฐ๋ ์ ์ดํ๋ ๊ฒ์ด ์๋๋ผ ์ธ๋ถ์์ ๊ด๋ฆฌํ๋ ๊ฐ์ฒด๋ฅผ ๊ฐ์ ธ์ ์ฌ์ฉํ๋ ๊ฒ์ ๋งํฉ๋๋ค. ์คํ๋ง์์๋ ์ ์ด์ ์ญ์ ๊ฐ๋ ์ ์ค์ํ ์ปจ์ ์ผ๋ก ์ผ๊ณ ์์ผ๋ฉฐ, ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ๊ด๋ฆฌํ๋ ์ฃผ์ฒด๋ฅผ โ์คํ๋ง ์ปจํ ์ด๋โ ๋ผ๊ณ ํฉ๋๋ค. ๐ DI(์์กด์ฑ ์ฃผ์ ) DI ๋ Dependency Injection๋ฅผ ์ค์ธ ํํ์ผ๋ก, ์์ ์ค๋ช ๋๋ฆฐ IoC(์ ์ด์ ์ญ์ )์ ๊ตฌํํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋๋ค. ์คํ๋ง์์๋ ์ง์ ๊ฐ์ฒด๋ฅผ ์์ฑํ์ง ์์๋ ์ด๋ ธํ ์ด์ ์ ํตํด โ์คํ๋ง ์ปจํ ์ด๋โ ๊ฐ ๋น์ผ๋ก ์์ฑํ ๊ฐ์ฒด๋ฅผ ์ฃผ์ ํ ์ ์๋๋ก ์ง์ํ๊ณ ์์ต๋๋ค. ๐ AOP(๊ด์ ์งํฅ ํ๋ก๊ทธ๋๋ฐ) AOP ๋ Aspect Oriented Programming ์ ์ค์ธ ํํ์ผ๋ก ํ๋ก๊ทธ๋๋ฐ์ ๋ํ ๊ด์ฌ์ ํต์ฌ ๊ด์ , ๋ถ๊ฐ ๊ด์ ์ผ๋ก ๋๋์ด์ ๊ด์ฌ ๊ธฐ์ค์ผ๋ก ๋ชจ๋ํํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. AOP ์ ๋ํ์ ์ธ ์๋ก ์๋น์ค ๊ธฐ๋ฅ๊ณผ ๋ชจ๋ํฐ๋ง ๊ธฐ๋ฅ(๋ก๊น , ์์์๊ฐ ๋ฑ)์ ๋ถ๋ฆฌํด์ ๋ชจ๋ํ ํ๋๊ฒ์ ์๋ก ๋ค ์ ์์ต๋๋ค. ๐ PSA(์ด์ ๊ฐ๋ฅํ ์๋น์ค ์ถ์ํ) PSA ๋ Portable Service Abstraction ์ ์ค์ธ ํํ์ผ๋ก ์คํ๋ง์์ ์ ๊ณตํ๋ ๋ค์ํ ๊ธฐ์ ๋ค์ ์ถ์ํํด ๊ฐ๋ฐ์๊ฐ ์ฝ๊ฒ ์ฌ์ฉํ๋ ์ธํฐํ์ด์ค๋ฅผ ๋งํฉ๋๋ค. ๋ํ์ ์ธ ์๋ก JPA, MyBatis, JDBC ์ ๊ฐ์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๊ทผํ๊ธฐ ์ํ ๊ธฐ์ ์ด ๋ฌ๋ผ๋ ๋์ผํ ์ธํฐํ์ด์ค๋ฅผ ์ธ์ ์๊ฑฐ๋ ํฐ์บฃ, Undertow, Netty ๋ฑ ๋ค๋ฅธ WAS ๋ฅผ ์ฌ์ฉํ๋๋ผ๋ ๋น์ง๋์ค ๋ก์ง์ ๊ทธ๋๋ก ์ฌ์ฉํ ์ ์๋๊ฒ์ด ์์ต๋๋ค. ์กฐ๊ธ ๋ ์์ธํ ๋ด์ฉ์ ๋ณด๊ณ ์ถ์ผ์๋ค๋ฉด ๊ณต์ ๋๋ฆฐ ๋ธ๋ก๊ทธ๋ฅผ ์ฐธ๊ณ ํด์ฃผ์ธ์. https://shinsunyoung.tistory.com/133