
AOP ๋
AOP ๋ ๊ด์ ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ด๋ค.
๊ด์ฌ์ฌ (Aspect) ๋ฅผ ๋ถ๋ฆฌํ์ฌ ์ฌ์ฌ์ฉํ์ฌ ๊ด๋ฆฌํ๋ ๋ฐฉ์
(์ฝ๋ ์ฌ์ฌ์ฉ์ฑ, ์ ์ง๋ณด์์ ํจ๊ณผ์ )
- Spring ์์๋ ๋น์ง๋์ค ๋ก์ง์๋ง ์ง์คํ๊ฒ ํ๊ธฐ ์ํด์ ์ฌ์ฉ๋๋ค.
- ๋น์ง๋์ค ๋ก์ง์ด ์๋ ์ด์ธ์
๋ณด์, ๋ก๊ทธ, ํธ๋์ญ์ ๋ฑ
์ํก๋จ ๊ด์ฌ์ฌ (cross-concern)
๋ผ๊ณ ๋ถ๋ฅธ๋ค - Spring ์ ์ด ํก๋จ๊ด์ฌ์ฌ๋ฅผ ๋ถ๋ฆฌํด์ ์์ ๊ฐ๋ฅํ๋ค.
- ์ฆ, ํก๋จ ๊ด์ฌ์ฌ๋ฅผ ๋ชจ๋๋ก ๋ถ๋ฆฌํ๋ ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์์ด๋ค.
โ ๋ฐ๋ณต์ ์ธ ์ฝ๋๋ฅผ ์ ๊ฑฐ
โ ์ปดํ์ผ or ๋ฐํ์ ์์ ์ ๊ฒฐํฉ
โ ๊ธฐ์กด ์ฝ๋ ์์ ์์ด, ์ํ๋ ๊ธฐ๋ฅ๊ณผ ๊ฒฐํฉ
AOP ํค์๋
- Aspect (๊ด์ ) ๊ณตํต ๊ธฐ๋ฅ(๋ก๊น , ๋ณด์ ๋ฑ)์ ๋ชจ๋ํํ ๊ฐ์ฒด
- JoinPoint (์กฐ์ธํฌ์ธํธ) AOP๊ฐ ์ ์ฉ๋ ์ ์๋ ์คํ ์ง์ (๋ฉ์๋ ์คํ, ์์ธ ๋ฐ์ ๋ฑ)
- PointCut (ํฌ์ธํธ์ปท) AOP๊ฐ ์ ์ฉ๋ ํน์ JoinPoint๋ฅผ ํํฐ๋งํ๋ ํํ์
- Advice (์ด๋๋ฐ์ด์ค) ์ค์ ๋ก ์ํํ ๊ณตํต ๊ธฐ๋ฅ(๋ก๊น , ํธ๋์ญ์ ๋ฑ)
- Weaving (์๋น) Advice๋ฅผ ํต์ฌ ๋ก์ง์ ์ ์ฉํ๋ ๊ณผ์ (์ปดํ์ผ, ๋ฐํ์, ๋ก๋ ํ์์ ์ํ ๊ฐ๋ฅ)
AOP ์ฌ์ฉ
- Logging (๋ก๊น
)
๋ฉ์๋ ์คํ ์ ํ ๋๋ ์์ธ ๋ฐ์ ์ ๋ก๊น
@Before, @AfterReturning, @AfterThrowing ์ฌ์ฉ ๊ฐ๋ฅ - Transaction (ํธ๋์ญ์
๊ด๋ฆฌ)
@Transactional์ ํตํด ํธ๋์ญ์ ์์, ์ปค๋ฐ, ๋กค๋ฐฑ ์ฒ๋ฆฌ - Security (๋ณด์ ์ฒ๋ฆฌ)
๋ฉ์๋ ์ ๊ทผ ๊ถํ ๊ฒ์ฆ (@PreAuthorize, @PostAuthorize) - Exception Handling (์์ธ ์ฒ๋ฆฌ)
์์ธ ๋ฐ์ ์ ํน์ ๋ก์ง ์ํ (@AfterThrowing) - Caching (์บ์ฑ ์ฒ๋ฆฌ)
๋์ผํ ์์ฒญ์ ์บ์ฑํ์ฌ ์ฑ๋ฅ ํฅ์ (@Cacheable)