AOP(Aspect Oriented Programming)๋ ๊ด์ ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ผ๋ก ํ๋์ ๋น์ฆ๋์ค ๋ก์ง์ ๊ด์ฌ์ฌ์ ํต์ฌ์ ์ธ ๋ก์ง์ผ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค.
์ฌ๊ธฐ์ ๊ด์ฌ์ฌ๋ ์์ค ์ฝ๋์์์ ๊ณ์ ๋ฐ๋ณต๋๋ ๋ถ๋ถ์ผ๋ก ์์ธ์ฒ๋ฆฌ, ์ธ์ฆ ๋ฑ์ด ํด๋น๋๋ค. ์ฆ ์ฃผ๋ณ ๋ก์ง, ๋ถ๊ฐ๊ธฐ๋ฅ์ผ๋ก ๋ณผ ์ ์๋ค.
๐ก ๊ด์ฌ์ฌ์ ์
1. ํ๋ผ๋ฏธํฐ๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ๋ค์ด์์๊น??
2. ์ฌ์ฉ์์ ์ธ์ฆ์ ์ ์ ํ ๋ฐ์์์๊น??
3. ์ด ์์ ์์ ๋ฐ์ํ ์ ์๋ ์์ธ ์ฒ๋ฆฌ๋ ์ด๋ป๊ฒ ํด์ผ ํ ๊น??
์ฆ AOP์ ๋ชฉํ๋ ํต์ฌ์ ์ธ ๋ก์ง์์ ๊ด์ฌ์ฌ๋ฅผ ๋ถ๋ฆฌํ์ฌ ์ฌ์ฌ์ฉํ๊ฒ ๋ค๋ ๊ฒ์ด๋ค. ์ด๊ฒ์ ๊ด์ฌ์ฌ์ ๋ถ๋ฆฌ(=Separate concerns)๋ผ๊ณ ๋ถ๋ฅธ๋ค. ๊ด์ฌ์ฌ๋ฅผ ๋ถ๋ฆฌํ๋ฉด ์ฝ๋์ ๋ฐ๋ณต์ ์ค์ผ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
AOP ๊ฐ๋ฐ๋ฐฉ์์์ ๊ฐ๋ฐ์๊ฐ ์ฃผ์ํด์ผ ํ๋ ๊ฒ์ ๋ฌด์์ผ๊น โ
๊ด์ฌ์ฌ์ ํต์ฌ ๋ก์ง์ ์ปดํ์ผ ํน์ ์คํ์๊ฐ์ ๊ฒฐํฉ๋๊ธฐ์ ์ด๋ค ๊ด์ฌ์ฌ๋ฅผ ๋ถ์ผ ๊ฒ์ธ์ง๋ง ๊ณ ๋ คํ๋ฉด ๋๋ค!!
๐ AOP์ฉ์ด ์ดํด๋ณด๊ธฐ

Target : Aspect๋ฅผ ์ ์ฉํ๋ ๊ณณ (ํด๋์ค, ๋ฉ์๋..) ์ฆ, ํต์ฌ ๋น์ฆ๋์ค ๋ก์ง์ ์๋ฏธํ๋ค.
Proxy : ๋ด๋ถ์ ์ผ๋ก ๊ด์ฌ์ฌ๋ค์ ๊ฑฐ์ณ์ Target์ ํธ์ถํ๋๋ก ์๋ ํน์ ์๋์ผ๋ก ์์ฑํ๋ค.
Proxy ๊ฐ์ฒด๋ฅผ ํตํด Target ๊ฐ์ฒด์ JoinPoint์ ํธ์ถํ๋ค.
JoinPoint : Target ๊ฐ์ฒด๊ฐ ๊ฐ์ง๋ ์ฌ๋ฌ ๋ฉ์๋
Aspect๊ณผ JoinPoint๊ฐ ๊ฒฐํฉ๋๋ ๊ฒ์ ์์ธํ ์ดํด๋ณด์ โ

Aspect : ํฉ์ด์ง ๊ด์ฌ์ฌ๋ฅผ ๋ชจ๋ํ ํ ๊ฒ์ ์๋ฏธํ๋ค.
Advice : ์ค์ง์ ์ธ ๋ถ๊ฐ๊ธฐ๋ฅ์ ๋ด์ ๊ตฌํ์ฒด๋ก ๊ด์ฌ์ฌ๋ฅผ ์๋ฏธํ๋ค.
Pointcut : ๊ด์ฌ์ฌ์ ๋น์ฆ๋์ค ๋ก์ง์ด ๊ฒฐํฉ๋๋ ์ง์ ์ ๊ฒฐ์ ํ๋ ๊ฒ์ผ๋ก Joinpoint๊ฐ ๊ฐ์ง๋ ์ฌ๋ฌ ๋ฉ์๋ ์ค ์ด๋ค ๋ฉ์๋๋ก ์ฐ๊ฒฐํ ์ง ์ค์ ํ๋ค.
๐ก Pointcut ์ ์ธ Annotation
| ๊ตฌ๋ถ | ์ค๋ช |
| execution(@excution) | ๋ฉ์๋๋ฅผ ๊ธฐ์ค์ผ๋ก Pointcut ์ค์ |
| within(@within) | ํด๋์ค๋ฅผ ๊ธฐ์ค์ผ๋ก Pointcut ์ค์ |
| this | ์ฃผ์ด์ง ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ๊ฐ์ฒด์ Pointcut ์ค์ |
| args(@args) | ํน์ ํ ํ๋ผ๋ฏธํฐ๋ฅผ ๊ฐ์ง๋ ๋์๋ค์ Pointcut ์ค์ |
| @annotaion | ํน์ ํ ์ด๋ ธํ ์ด์ ์ด ์ ์ฉ๋ ๋์๋ค์ Pointcut ์ค์ |