* ์กฐ์ธ ํฌ์ธํธ(Join point)
์ด๋๋ฐ์ด์ค๊ฐ ์ ์ฉ๋ ์ ์๋ ์์น, ๋ฉ์๋ ์คํ, ์์ฑ์ ํธ์ถ, ํ๋ ๊ฐ ์ ๊ทผ, static ๋ฉ์๋ ์ ๊ทผ ๊ฐ์ ํ๋ก ๊ทธ๋จ ์คํ ์ค ์ง์
์กฐ์ธ ํฌ์ธํธ๋ ์ถ์์ ์ธ ๊ฐ๋
์ด๋ค. AOP๋ฅผ ์ ์ฉํ ์ ์๋ ๋ชจ๋ ์ง์ ์ด๋ผ ์๊ฐํ๋ฉด ๋๋ค.
์คํ๋ง AOP๋ ํ๋ก์ ๋ฐฉ์์ ์ฌ์ฉํ๋ฏ๋ก ์กฐ์ธ ํฌ์ธํธ๋ ํญ์ ๋ฉ์๋ ์คํ ์ง์ ์ผ๋ก ์ ํ๋๋ค.
* ํฌ์ธํธ์ปท(Pointcut)
์กฐ์ธ ํฌ์ธํธ ์ค์์ ์ด๋๋ฐ์ด์ค๊ฐ ์ ์ฉ๋ ์์น๋ฅผ ์ ๋ณํ๋ ๊ธฐ๋ฅ
์ฃผ๋ก AspectJ ํํ์์ ์ฌ์ฉํด์ ์ง์
ํ๋ก์๋ฅผ ์ฌ์ฉํ๋ ์คํ๋ง AOP๋ ๋ฉ์๋ ์คํ ์ง์ ๋ง ํฌ์ธํธ์ปท์ผ๋ก ์ ๋ณ ๊ฐ๋ฅ
* ํ์ผ(Target)
์ด๋๋ฐ์ด์ค๋ฅผ ๋ฐ๋ ๊ฐ์ฒด, ํฌ์ธํธ์ปท์ผ๋ก ๊ฒฐ์
* ์ด๋๋ฐ์ด์ค(Advice)
๋ถ๊ฐ ๊ธฐ๋ฅ
ํน์ ์กฐ์ธ ํฌ์ธํธ์์ Aspect์ ์ํด ์ทจํด์ง๋ ์กฐ์น
Around(์ฃผ๋ณ), Before(์ ), After(ํ)์ ๊ฐ์ ๋ค์ํ ์ข
๋ฅ์ ์ด๋๋ฐ์ด์ค๊ฐ ์์
* ์ ์คํํธ(Aspect)
์ด๋๋ฐ์ด์ค + ํฌ์ธํธ์ปท์ ๋ชจ๋ํ ํ ๊ฒ@Aspect
๋ฅผ ์๊ฐํ๋ฉด ๋จ
์ฌ๋ฌ ์ด๋๋ฐ์ด์ค์ ํฌ์ธํธ ์ปท์ด ํจ๊ป ์กด์ฌ
* ์ด๋๋ฐ์ด์ (Advisor)
ํ๋์ ์ด๋๋ฐ์ด์ค์ ํ๋์ ํฌ์ธํธ ์ปท์ผ๋ก ๊ตฌ์ฑ
์คํ๋ง AOP์์๋ง ์ฌ์ฉ๋๋ ํน๋ณํ ์ฉ์ด
* ์๋น(Weaving)
ํฌ์ธํธ์ปท์ผ๋ก ๊ฒฐ์ ํ ํ์ผ์ ์กฐ์ธ ํฌ์ธํธ์ ์ด๋๋ฐ์ด์ค๋ฅผ ์ ์ฉํ๋ ๊ฒ
์๋น์ ํตํด ํต์ฌ ๊ธฐ๋ฅ ์ฝ๋์ ์ํฅ์ ์ฃผ์ง ์๊ณ ๋ถ๊ฐ ๊ธฐ๋ฅ์ ์ถ๊ฐ ํ ์ ์์
AOP ์ ์ฉ์ ์ํด ์ ์คํํธ๋ฅผ ๊ฐ์ฒด์ ์ฐ๊ฒฐํ ์ํ
- ์ปดํ์ผ ํ์(AspectJ compiler)
- ๋ก๋ ํ์
- ๋ฐํ์, ์คํ๋ง AOP๋ ๋ฐํ์, ํ๋ก์ ๋ฐฉ์
* AOP ํ๋ก์
AOP ๊ธฐ๋ฅ์ ๊ตฌํํ๊ธฐ ์ํด ๋ง๋ ํ๋ก์ ๊ฐ์ฒด, ์คํ๋ง์์ AOP ํ๋ก์๋ JDK ๋์ ํ๋ก์ ๋๋ CGLIB ํ๋ก์์ด๋ค.
* ๊น์ํ ๊ฐ์ฌ๋์ ์์ ์๋ฃ๋ฅผ ์ ๋ฆฌํ ๊ธ์ ๋๋ค.
* ์กฐ์ธ ํฌ์ธํธ(Join point)
์ด๋๋ฐ์ด์ค๊ฐ ์ ์ฉ๋ ์ ์๋ ์์น, ๋ฉ์๋ ์คํ, ์์ฑ์ ํธ์ถ, ํ๋ ๊ฐ ์ ๊ทผ, static ๋ฉ์๋ ์ ๊ทผ ๊ฐ์ ํ๋ก ๊ทธ๋จ ์คํ ์ค ์ง์
์กฐ์ธ ํฌ์ธํธ๋ ์ถ์์ ์ธ ๊ฐ๋
์ด๋ค. AOP๋ฅผ ์ ์ฉํ ์ ์๋ ๋ชจ๋ ์ง์ ์ด๋ผ ์๊ฐํ๋ฉด ๋๋ค.
์คํ๋ง AOP๋ ํ๋ก์ ๋ฐฉ์์ ์ฌ์ฉํ๋ฏ๋ก ์กฐ์ธ ํฌ์ธํธ๋ ํญ์ ๋ฉ์๋ ์คํ ์ง์ ์ผ๋ก ์ ํ๋๋ค.
* ํฌ์ธํธ์ปท(Pointcut)
์กฐ์ธ ํฌ์ธํธ ์ค์์ ์ด๋๋ฐ์ด์ค๊ฐ ์ ์ฉ๋ ์์น๋ฅผ ์ ๋ณํ๋ ๊ธฐ๋ฅ
์ฃผ๋ก AspectJ ํํ์์ ์ฌ์ฉํด์ ์ง์
ํ๋ก์๋ฅผ ์ฌ์ฉํ๋ ์คํ๋ง AOP๋ ๋ฉ์๋ ์คํ ์ง์ ๋ง ํฌ์ธํธ์ปท์ผ๋ก ์ ๋ณ ๊ฐ๋ฅ
* ํ์ผ(Target)
์ด๋๋ฐ์ด์ค๋ฅผ ๋ฐ๋ ๊ฐ์ฒด, ํฌ์ธํธ์ปท์ผ๋ก ๊ฒฐ์
* ์ด๋๋ฐ์ด์ค(Advice)
๋ถ๊ฐ ๊ธฐ๋ฅ
ํน์ ์กฐ์ธ ํฌ์ธํธ์์ Aspect์ ์ํด ์ทจํด์ง๋ ์กฐ์น
Around(์ฃผ๋ณ), Before(์ ), After(ํ)์ ๊ฐ์ ๋ค์ํ ์ข
๋ฅ์ ์ด๋๋ฐ์ด์ค๊ฐ ์์
* ์ ์คํํธ(Aspect)
์ด๋๋ฐ์ด์ค + ํฌ์ธํธ์ปท์ ๋ชจ๋ํ ํ ๊ฒ@Aspect
๋ฅผ ์๊ฐํ๋ฉด ๋จ
์ฌ๋ฌ ์ด๋๋ฐ์ด์ค์ ํฌ์ธํธ ์ปท์ด ํจ๊ป ์กด์ฌ
* ์ด๋๋ฐ์ด์ (Advisor)
ํ๋์ ์ด๋๋ฐ์ด์ค์ ํ๋์ ํฌ์ธํธ ์ปท์ผ๋ก ๊ตฌ์ฑ
์คํ๋ง AOP์์๋ง ์ฌ์ฉ๋๋ ํน๋ณํ ์ฉ์ด
* ์๋น(Weaving)
ํฌ์ธํธ์ปท์ผ๋ก ๊ฒฐ์ ํ ํ์ผ์ ์กฐ์ธ ํฌ์ธํธ์ ์ด๋๋ฐ์ด์ค๋ฅผ ์ ์ฉํ๋ ๊ฒ
์๋น์ ํตํด ํต์ฌ ๊ธฐ๋ฅ ์ฝ๋์ ์ํฅ์ ์ฃผ์ง ์๊ณ ๋ถ๊ฐ ๊ธฐ๋ฅ์ ์ถ๊ฐ ํ ์ ์์
AOP ์ ์ฉ์ ์ํด ์ ์คํํธ๋ฅผ ๊ฐ์ฒด์ ์ฐ๊ฒฐํ ์ํ
- ์ปดํ์ผ ํ์(AspectJ compiler)
- ๋ก๋ ํ์
- ๋ฐํ์, ์คํ๋ง AOP๋ ๋ฐํ์, ํ๋ก์ ๋ฐฉ์
* AOP ํ๋ก์
AOP ๊ธฐ๋ฅ์ ๊ตฌํํ๊ธฐ ์ํด ๋ง๋ ํ๋ก์ ๊ฐ์ฒด, ์คํ๋ง์์ AOP ํ๋ก์๋ JDK ๋์ ํ๋ก์ ๋๋ CGLIB ํ๋ก์์ด๋ค.
* ๊น์ํ ๊ฐ์ฌ๋์ ์์ ์๋ฃ๋ฅผ ์ ๋ฆฌํ ๊ธ์ ๋๋ค.