Aspect : ๊ณตํต ๊ด์ฌ์ฌ (๋ก๊น , ๋ณด์, ํธ๋์ญ์ ์ฒ๋ฆฌ ๋ฑ)๋ก์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐ์ ๊ฑธ์ณ ์ ์ฉ๋ ์ ์๋ ๋ชจ๋
JoinPoint : AOP์์ Aspect๋ฅผ ์ ์ฉํ ์ ์๋ ํน์ ์ง์
Pointcut : JoinPoint๋ฅผ ์ ํํ๋ ํํ์
Advice : Join Point์์ ์ค์ ๋ก ์คํ๋ ๋์์ ์ ์ํ๋ ์ฝ๋ (Before, After Returing, After Throwing, Around, Introduction)
1. ํ๋ก์ ๊ฐ์ฒด ์์ฑ
Spring AOP๋ ์ค์ ๋น์ฆ๋์ค ๋ก์ง์ ์ฒ๋ฆฌํ๋ ๊ฐ์ฒด(Target Object)๋ฅผ ๊ฐ์ธ๋ ํ๋ก์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค.
์ด ํ๋ก์ ๊ฐ์ฒด๋ ๋์ ๊ฐ์ฒด์ ๋ฉ์๋ ํธ์ถ์ ๊ฐ๋ก์ฑ๊ณ , ํ์์ Aspect(๋ถ๊ฐ์ ์ธ ๊ธฐ๋ฅ)๋ฅผ ์คํํ๋ค.
ํ๋ก์๋ JDK ๋์ ํ๋ก์(์ธํฐํ์ด์ค ๊ธฐ๋ฐ) ๋๋ CGLIB ํ๋ก์(ํด๋์ค ๊ธฐ๋ฐ)๋ฅผ ์ฌ์ฉํ์ฌ ์์ฑ๋๋ค.
์ด ํ๋ก์ ๊ฐ์ฒด๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋์ ๊ฐ์ฒด์ ๋์ผํ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๊ฑฐ๋ ์์ํ์ฌ,
ํด๋ผ์ด์ธํธ ์ฝ๋์์ ๋์ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ฒ๋ผ ๋ณด์ธ๋ค.
2. ์กฐ์ธ ํฌ์ธํธ(Join Point) ์ค์
AOP์์๋ Join Point๋ผ๋ ๊ฐ๋
์ ์ฌ์ฉํ์ฌ, ์ด๋ ์์ ์์ Aspect๋ฅผ ์ ์ฉํ ์ง ์ค์ ํ๋ค.
Spring AOP์์ ์กฐ์ธ ํฌ์ธํธ๋ ๋ฉ์๋ ์คํ ์ง์ ์ผ๋ก ์ ์๋๋ค.
์ฆ, ํน์ ๋ฉ์๋๊ฐ ํธ์ถ๋๋ ์์ ์ AOP๊ฐ ์ ์ฉ๋๋ค.
3. ํฌ์ธํธ์ปท(Pointcut) ์ค์
Pointcut์ ์ด๋ค Join Point์ Aspect๋ฅผ ์ ์ฉํ ์ง๋ฅผ ์ ์ํ๋ ํํ์์ด๋ค.
@Before, @After, @Around ๋ฑ์ ์ด๋
ธํ
์ด์
์ ์ฌ์ฉํ์ฌ ํฌ์ธํธ์ปท์ ์ ์ํ ์ ์๋ค.
ํฌ์ธํธ์ปท์ Aspect๊ฐ ์ด๋ค ๋ฉ์๋์ ์ํฅ์ ๋ฏธ์น ์ง ์ ํ์ ์ผ๋ก ์ง์ ํ ์ ์๋ค.
์๋ฅผ ๋ค์ด, ํน์ ํจํค์ง๋ ํด๋์ค์ ๋ฉ์๋๋ง์ ๋์์ผ๋ก ์ค์ ํ ์ ์๋ค.
4. ์ด๋๋ฐ์ด์ค(Advice) ์ ์ฉ
Advice๋ ์กฐ์ธ ํฌ์ธํธ์์ ์คํ๋ ๋์์ด๋ค.
Advice๋ ๋ฉ์๋ ์คํ ์ ์(@Before), ๋ฉ์๋ ์คํ ํ์(@After), ๋๋ ๋ฉ์๋ ์คํ์ ๊ฐ์ธ๋ ํํ(@Around)๋ก ์ ์ํ ์ ์๋ค.
5. ์๋น(Weaving)
Weaving์ ์ค์ ์ฝ๋์ Aspect๋ฅผ ์ ์ฉํ๋ ๊ณผ์ ์ด๋ค. ์ด ๊ณผ์ ์์ Aspect๊ฐ ์ ์ฉ๋๋ ์์ ๊ณผ ๋ฐฉ๋ฒ์ด ๊ฒฐ์ ๋๋ค.
Spring์์๋ ๋ฐํ์ ์๋น ๋ฐฉ์์ ์ฌ์ฉํ๋ค.
์ฆ, Spring AOP๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์คํ๋๋ ๋์ ๋์ ์ผ๋ก ํ๋ก์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ Aspect๋ฅผ ์ ์ฉํ๋ค.
6. ๋ฉ์๋ ํธ์ถ
ํด๋ผ์ด์ธํธ์์ ๋น์ฆ๋์ค ๋ฉ์๋๋ฅผ ํธ์ถํ๋ฉด, ์ค์ ๋ก๋ ๋์ ๊ฐ์ฒด๊ฐ ์๋ ํ๋ก์ ๊ฐ์ฒด๊ฐ ํธ์ถ๋๋ค.
ํ๋ก์ ๊ฐ์ฒด๋ ๋ฉ์๋ ํธ์ถ์ ๊ฐ๋ก์ฑ๊ณ , ์ค์ ๋ Advice(์: ๋ก๊น , ํธ๋์ญ์ ์ฒ๋ฆฌ ๋ฑ)๋ฅผ ์คํํ ํ, ์ค์ ๋ฉ์๋๋ฅผ ํธ์ถํ๊ฑฐ๋, ํ์ํ ์ฒ๋ฆฌ๋ฅผ ์ถ๊ฐํ ์ ์๋ค.
7. ๊ฒฐ๊ณผ ๋ฐํ
ํ๋ก์ ๊ฐ์ฒด๋ ๋์ ๋ฉ์๋์ ์คํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์์, ํ์ํ ํ์ฒ๋ฆฌ(์: ์์ธ ์ฒ๋ฆฌ, ํ์ ์์
๋ฑ)๋ฅผ ํ ํ, ํด๋ผ์ด์ธํธ์๊ฒ ๋ฐํํ๋ค.
| [ํจํค์ง๋ฐ๋ฐฐํฌ] Jar vs War (0) | 2024.12.21 |
|---|---|
| [Spring] @Transactional (0) | 2024.12.13 |
| [์คํ๋ง] AOP์ @Transactional (0) | 2024.11.27 |
| [์คํ๋ง] ๋์์ฑ ๋ฌธ์ , ThreadLocal (0) | 2024.11.25 |
| [Spring] Spring IoC Container, BeanScan, ์๋ช ์ฃผ๊ธฐ, ์ค์ฝํ (0) | 2024.11.20 |