๐ง AOP ๊ฐ ๋ฌด์์ผ๊น?
Aspect Oriented Programming ๊ด์ ์งํฅ ํ๋ก๊ทธ๋๋ฐ
ํก๋จ ๊ด์ฌ์ฌ(cross-cutting concern)์ ๋ถ๋ฆฌ๋ฅผ ํ์ฉํจ์ผ๋ก์จ
๋ชจ๋์ฑ์ ์ฆ๊ฐ์ํค๋ ๊ฒ์ด ๋ชฉ์ ์ธ ํ๋ก๊ทธ๋๋ฐ ํ๋ฌ๋ค์
์ฌ๋ฌ ๊ฐ์ฒด์ ๊ณตํต์ผ๋ก ์ ์ฉํ ์ ์๋ ๊ธฐ๋ฅ์ ๋ถ๋ฆฌํด์
๊ฐ๋ฐ์๋ ๋ฐ๋ณต ์์ ์ ์ค์ด๊ณ ํต์ฌ ๊ธฐ๋ฅ ๊ฐ๋ฐ์๋ง ์ง์คํ ์ ์์
์ฆ, ์ฌ๋ฌ ๊ฐ์ฒด์ ๊ณตํต์ผ๋ก ์ ์ฉํ ์ ์๋ ๊ธฐ๋ฅ์ ๋ถ๋ฆฌํ์ฌ ์ฌ์ฌ์ฉ์ฑ์ ๋์ฌ์ฃผ๋ ํ๋ก๊ทธ๋๋ฐ ๊ธฐ๋ฒ์ด๋ค.
ํ๋ก์๋?
์์ ์ด ํด๋ผ์ด์ธํธ๊ฐ ์ฌ์ฉํ๋ ค๊ณ ํ๋ ์ค์ ๋์์ธ ๊ฒ์ฒ๋ผ ์์ฅํด์ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ๋ฐ์์ฃผ๋ ๊ฒ(๋๋ฆฌ์ธ, ๋๋ฆฌ์)

์ฌ์ฉ ๋ชฉ์ ์ ๋ฐ๋ผ ๋ถ๋ฅด๋ ์ด๋ฆ์ด ๋ฌ๋ผ์ง๋ค.
- ํด๋ผ์ด์ธํธ๊ฐ ํ๊น์ ์ ๊ทผํ๋ ๋ฐฉ๋ฒ์ ์ ์ด -> ํ๋ก์ ํจํด
- ํ๊น์ ๋ถ๊ฐ์ ์ธ ๊ธฐ๋ฅ์ ๋ถ์ฌ -> ํ ์ฝ๋ ์ดํฐ ํจํด

โ๏ธ AOP ์ ์ฉ์ด๋ค
- Target Object : ๋ถ๊ฐ ๊ธฐ๋ฅ์ ๋ถ์ฌํ ๋์
- Aspect : AOP์ ๊ธฐ๋ณธ ๋ชจ๋
- Advice : ํ๊น์๊ฒ ์ ๊ณตํ ๋ถ๊ฐ ๊ธฐ๋ฅ์ ๋ด์ ๋ชจ๋
- Join Point : ํ๋ก๊ทธ๋จ์ ์คํ ๋ด๋ถ์์ Advice๊ฐ ์ ์ฉ๋ ์ ์๋ ์์น
- Pointcut : Advice์ ์ ์ฉํ JoinPoint๋ฅผ ์ ๋ณํ๋ ์์ ๋๋ ๊ทธ ๊ธฐ๋ฅ์ ์ ์ํ ๋ชจ๋

AOP ๋ฅผ ๊ตฌํํ๋ ๋ฐฉ๋ฒ
- ์ปดํ์ผ ์์ ์ ์ฝ๋์ ๊ณตํต ๊ธฐ๋ฅ ์ฝ์
- ํด๋์ค ๋ก๋ฉ ์์ ์ ๋ฐ์ดํธ ์ฝ๋์ ๊ณตํต ๊ธฐ๋ฅ ์ฝ์
- ๋ฐํ์ ์์ ์ ํ๋ก์ ๊ฐ์ฒด๋ฅผ ์์ฑํ์ฌ ๊ณตํต ๊ธฐ๋ฅ ์ฝ์
Spring ์์ AOP ๋ฅผ ๊ตฌํํ๋ ๋ฐฉ๋ฒ
Spring์ AOP๋ฅผ ๊ตฌํํ๊ธฐ ์ํด ๋ฐํ์ ์์ ์ ํ๋ก์ ๊ฐ์ฒด๋ฅผ ์์ฑํ์ฌ ๊ณตํต ๊ธฐ๋ฅ ์ฝ์ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ค.
- ์ปดํ์ผ๋ฌ๋ ํด๋์ค ๋ก๋ ์กฐ์๊ธฐ๋ฅผ ์ฌ์ฉํ์ง ์์๋ ๋๋ค.
- ํ๋ก์๋ ๋ฉ์๋ ์ค๋ฒ๋ผ์ด๋ฉ ๊ฐ๋ ์ผ๋ก ๋์ํ๊ธฐ ๋๋ฌธ์, ์คํ๋ง AOP๋ ๋ฉ์๋ ์คํ ์์ ์๋ง AOP๋ฅผ ์ ์ฉํ ์ ์๋ค.
- ์คํ๋ง AOP๋ ์คํ๋ง ์ปจํ ์ด๋๊ฐ ๊ด๋ฆฌํ ์ ์๋ ๋น์๋ง AOP๋ฅผ ์ ์ฉํ ์ ์๋ค.
- AspectJ ๋ฅผ ์ง์ ์ฌ์ฉํ์ง ์๊ณ , AspectJ์ ๋ฌธ๋ฒ์ ์ฐจ์ฉํ๊ณ ํ๋ก์ ๋ฐฉ์์ AOP๋ฅผ ์ ์ฉ

Reference