ํ๋ก์ ํฉํ ๋ฆฌ ์คํ๋ง์ ํ๋ก์ ํฉํ ๋ฆฌ๋ ์ธํฐํ์ด์ค์ ๊ตฌ์ฒด ํด๋์ค์ ๋ํ ํ๋ก์๋ฅผ ๋ชจ๋ ์ ์ฉํ๊ธฐ ์ํด์ JDK ๋์ ํ๋ก์์ CGLIB๋ฅผ ํตํด ์ํฉ์ ๋ง๊ฒ ํ๋ก์๋ฅผ ๋ง๋ค์ด์ค๋๋ค. ์ฆ ๊ฐ๋ฐ์๋ ์ธํฐํ์ด์ค์ธ์ง, ๊ตฌ์ฒด ํด๋์ค์ธ์ง์ ์ ๊ฒฝ์ฐ์ง ์๊ณ ๋, ํ๋ก์๋ฅผ ์ป์ ์ ์๊ฒ ๋๋ ๊ฒ์
๋๋ค. Advice ์คํ๋ง ํ๋ก์ ํฉํ ๋ฆฌ๋ JDK ๋์ ํ๋ก์์ CGLIB๋ฅผ ๋ชจ๋ ์ง์ํ๋ค๊ณ ํ์์ต๋๋ค. JDK ๋์ ํ๋ก์๋ InvocationHandler๋ฅผ ํตํด, CGLIB๋ MethodInterceptor๋ฅผ ํตํด ๋ถ๊ฐ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ์ด๋ ํ๋ก์ ํฉํ ๋ฆฌ๋ ๋ถ๊ฐ ๊ธฐ๋ฅ์ ์ํด์ ์ด ๋์ ์ค๋ณตํด์ ๋ง๋ค์ด์ผ ํ๋ค๋ ๋ฌธ์ ์ ์ ๊ฐ์ง๊ฒ ๋ฉ๋๋ค. ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์คํ๋ง์ Advice๋ผ๋ ๊ฐ๋
์ ๋์
ํ์์ต๋๋ค. ๊ฐ๋จํ JDK ๋..
๐๏ธ Spring/AOP
ํก๋จ ๊ด์ฌ์ฌ (cross-cutting concerns) ์ ํ๋ฆฌ์ผ์ด์
์ ๊ธฐ๋ฅ์ ํต์ฌ ๊ธฐ๋ฅ๊ณผ ๋ถ๊ฐ ๊ธฐ๋ฅ์ผ๋ก ๋๋ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ์ํ ์๋งค ์ ํ๋ฆฌ์์
์ ๊ฒฝ์ฐ ์ํ๋ฅผ ์๋งคํ๋ ๊ฒ์ด ํต์ฌ ๋ก์ง์ด๊ณ , ์ด๋ฌํ ํต์ฌ ๊ธฐ๋ฅ์ ๋ณด์กฐํ๊ธฐ ์ํด ๋ก๊ทธ๋ฅผ ๋จ๊ธด๋ค๋์ง ํ๋ ๊ธฐ๋ฅ๋ค์ ๋ถ๊ฐ ๊ธฐ๋ฅ์
๋๋ค. ํต์ฌ ๊ธฐ๋ฅ๊ณผ ๋ถ๊ฐ ๊ธฐ๋ฅ์ ๊ฐ์ด ์ฌ์ฉ๋์ง๋ง, ํ๋์ ์ฝ๋ ์์์ ํต์ฌ ๊ธฐ๋ฅ๊ณผ ๋ถ๊ฐ ๊ธฐ๋ฅ์ด ๋ชจ๋ ๋ค์ด๊ฐ๊ฒ ์ฝ๋๋ฅผ ์์ฑํ๋ค๋ฉด ํต์ฌ ๊ธฐ๋ฅ์ ์ง์คํ๊ธฐ ์ด๋ ค์ ์ง ๊ฒ์
๋๋ค. ๋ํ ๋๋ถ๋ถ์ ๋ถ๊ฐ ๊ธฐ๋ฅ์ ํ๋์ ํต์ฌ ๊ธฐ๋ฅ์ ๋ถ๋ ๊ฒ์ด ์๋๋ผ ์ฌ๋ฌ๊ฐ์ ํต์ฌ ๊ธฐ๋ฅ์ ์ฌ์ฉ๋๊ธฐ ๋๋ฌธ์ ์ค๋ณต๋๋ ์ฝ๋๋ ๋ง์์ง๋๋ค. ์ด๋ ๊ฒ ์ฌ๋ฌ ๊ธฐ๋ฅ์ ๋์ผํ๊ฒ ์ฌ์ฉ๋๋ ๋ถ๊ฐ ๊ธฐ๋ฅ์ ํก๋จ ๊ด์ฌ์ฌ(cross-cutting concerns)๋ผ๊ณ ํฉ๋๋ค. ๋ถ๊ฐ ๊ธฐ๋ฅ์ ์ ..