๋ฐ์ํ
์์ ์ฝ๋์ ์์ธํ ์ฌ์ฉ๋ฒ์ ๋ค์ ํฌ์คํ ์์ ๋ค๋ฃน๋๋ค.
AOP๋
- Aspect-Orineted Programing, ๊ด์ ์งํฅ ํ๋ก๊ทธ๋๋ฐ
- ์ ํ๋ฆฌ์ผ์ด์
์ ์ฝ๋์์ ํต์ฌ ๋น์ฆ๋์ค ๋ก์ง๊ณผ ํน์ ๊ด์ฌ์ฌ(๊ธฐ๋ฅ)์ ๋ถ๋ฆฌํ ํ์ฌ ์บก์ํ
- ๋ชจ๋ํ ํฅ์
- cross-cutting concerns (ํก๋จ ๊ด์ฌ์ฌ) ์ฒ๋ฆฌ์ ์ ์ฉ
- ๋ก๊น , ํธ๋์ญ์ ๊ด๋ฆฌ, ์ธ์ฆ/๊ถํ ๋ถ์ฌ, ์ฑ๋ฅ ๋ชจ๋ํฐ๋ง ๊ตฌํ๊ณผ ๊ฐ์ ํน์ ๊ด์ฌ์ฌ ๋ถ๋ฆฌ์ ์ฌ์ฉ๋ ์ ์์
AOP๋ ์ ํ์ํ ๊น?
- ๋ฐ๋ณต์ ์ผ๋ก ์ฌ์ฉ๋๋ ํน์ ๊ธฐ๋ฅ์ธ ํก๋จ ๊ด์ฌ์ฌ๋ฅผ ๋น์ฆ๋์ค ๋ก์ง๊ณผ ๋ถ๋ฆฌํ์ฌ ์ฝ๋์ ์ฌ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋๋ก ํด์ค
- ํก๋จ ๊ด์ฌ์ฌ
- ํต์ฌ ๋น์ฆ๋์ค ๋ก์ง๊ณผ ์ง์ ์ ์ธ ๊ด๋ จ์ด ์๋ ๊ด์ฌ์ฌ
- ํก๋จ ๊ด์ฌ์ฌ๋ฅผ ๋ฉ์๋ ๋ง๋ค ์ถ๊ฐํ๊ฒ ๋๋ฉด ๋ฐ๋ณต๋๋ ์ฝ๋๋ก ์ธํด ์ฝ๋๊ฐ ์ง์ ๋ถํด์ง๊ณ , ๋ณ๊ฒฝ์ ์ฌ๋ฌ ๊ณณ์ ๋ณ๊ฒฝํด์ผ ํ๊ธฐ ๋๋ฌธ์ ์ ์ง๋ณด์๊ฐ ์ด๋ ต๋ค.
- ex
- ๋ก๊ทธ ์์ฑ - ๋ฉ์๋ ํธ์ถ๋ ๋ ๋ง๋ค ๋ก๊ทธ๋ฅผ ๋จ๊ธฐ๋ ์ฝ๋
- ํธ๋์ญ์ - ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ผ๊ด์ฑ์ ์ํด ์ฌ๋ฌ ์์ ์ ํ๋์ ํธ๋์ญ์ ์ผ๋ก ๋ฌถ๋ ๊ธฐ๋ฅ
- ์ธ์ฆ ๋ฐ ๊ถํ ๊ฒ์ฌ - ์ฌ์ฉ์๊ฐ ํน์ ๋ฉ์๋ ํธ์ถ ์ ๊ถํ์ ํ์ธํ๋ ๊ธฐ๋ฅ
- ๊ณตํต ๊ธฐ๋ฅ์ ํ ๊ณณ์์ ๊ด๋ฆฌ
- ๋ฉ์ธ ๋ก์ง์ธ ๋น์ฆ๋์ค ๋ก์ง๊ณผ ๋ถ๋ฆฌํ์ฌ ๋ ๋ฆฝ์ ์ผ๋ก ๊ด๋ฆฌ ํ ์ ์๊ฒ ํด์ค
AOP ์ฃผ์ ๊ฐ๋ ๊ณผ ์๋ฆฌ
Aspect
- ๋น์ฆ๋์ค ๋ก์ง์์ ๋ถ๋ฆฌํด๋ธ ํน์ ๊ด์ฌ์ฌ๋ฅผ ๋ชจ๋ํํ ๋จ์
- ๋ก๊น ์ ์ํํ๋ aspect
- ์ํ ์์คํ ์ด ์๋ค๊ณ ํ ๋ ๋ณด์ ๊ฒ์ฌ๋ฅผ ํ๊ฒ ๋ค๋ ๊ฒ์ ํน์ ๊ด์ฌ์ฌ์ธ aspect์ ํด๋น๋ ์ ์๋ค.
- ์ ๊ทธ๋ฆผ์์ ํน์ ์์ ์ ์ํํ ํน์ ๊ด์ฌ์ฌ์ธ ๊ธฐ๋ฅ์ ์ฝ๋๋ก ํํํ๊ณ ์๋ค
Join Point
- Join Point๋ ํน์ ๊ด์ฌ์ฌ๋ฅผ ์คํํ ์ ์๋ ํ๋ณด ์ง์ ๋ค๋ก ํํํ ์ ์๋ค
- AOP์ ์๋ฐ ์ธํฐํ์ด์ค์ Join Point ๊ฐ๋
์ด ๋ค๋ฅด๋ค
- ์คํ๋ง : ์คํ ์์ ์ ์ ๋ณด๋ฅผ ๋ด๊ณ ์๋ "๊ฐ์ฒด". ์ธํฐํ์ด์ค๋ก์ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ค
- ๊ฐ๋ ์ : ์คํ ์์ ์ ์๋ฏธํ๋ฉฐ ๋ฉ์๋ ์คํ, ์์ฑ์ ํธ์ถ, ํ๋ ๊ฐ ๋ณ๊ฒฝ ๋ฑ์ด Joint Point๊ฐ ๋ ์ ์๋ค
- ์ ๊ทธ๋ฆผ์ ์ฐธ๊ณ ํ๋ฉด ํน์ ํด๋์ค์ ๋ฉ์๋, ๊ทธ๋ฆผ์๋ ๋์ ์์ง ์์ ์์ฑ์ ํธ์ถ, ํ๋ ๊ฐ ๋ณ๊ฒฝ ๋ฑ ๋ชจ๋ ์์ ๋ค์ด Join Point๊ฐ ๋ ์ ์์ผ๋ฉฐ ๋์์ Pointcut์ ํ๋ณด์ด์ Advice๊ฐ ์ฝ์ ๋ ์ ์๋ ์ง์ ์ด ๋๋ค
- ์๋ฅผ ๋ค์ด ์ํ ์์คํ ์์ Join Point๋ ๊ณ์ข ์์ฑ, ์ถ๊ธ, ์ ๊ธ ๋ฑ์ด ํน์ ๊ด์ฌ์ฌ๋ฅผ ์คํํ ์ ์๋ ํ๋ณด ์ง์ ๋ค์ด๋ค.
Pointcut
- Advice๋ฅผ ์ ์ฉํ ๋ฉ์๋์ ๋ฒ์๋ฅผ ์ง์ ํ๋ค
- ์๋ฅผ ๋ค์ด ์ํ ์์คํ ์์ ํฌ์ธํธ ์ปท์ ๊ณ์ข ์์ฑ, ์ถ๊ธ ๋ฑ์ด ๋ ์ ์๋ค. ํ๋ณด ์ง์ ์ค ํน์ ๊ด์ฌ์ฌ์ธ ๋ณด์ ๊ฒ์ฌ๋ฅผ ์ํํ ์ง์ .
- ์คํ๋ง์์๋ Advice๊ฐ ์คํ๋ Join Point๋ฅผ ํํฐ๋ง ํ๋ ํํ์์ด ์์ผ๋ฉฐ ๋ฉ์๋ ์ด๋ฆ, ํจํค์ง, ๋งค๊ฐ๋ณ์ ๋ฑ์ ๋ฐ๋ผ ์ ์ํ ์ ์๋ค
- ํํ์์ ๋ฆฌํดํ์ ํจํค์ง๊ฒฝ๋ก ํด๋์ค๋ช ๋ฉ์๋๋ช (๋งค๊ฐ๋ณ์) ๋ก ํํ๋ ์ ์๋ค.
Advice
- ์ธ์ ์ด๋ป๊ฒ ํ๊ฒ ๋ค์ ํด๋นํจ. ์ง์ ํ ๊ทธ ์ง์ (Pointcut)์์ ์ํํ ๋์(Aspect)๊ณผ ๊ทธ ๋์์ ์ํํ ์์
- Aspect๊ฐ ์ธ์ ์ด๋ป๊ฒ ๋์ํ ์ง ์ ์ํ๋ค
- ์๋ฅผ ๋ค์ด ์ํ ์์คํ ์์๋ ์ถ๊ธ์ ๋ณด์ ๊ฒ์ฌ๋ฅผ ์ํํ๋ค๋ก ํํ ํ ์ ์๋ค.
- ์คํ๋ง์์๋ ์ด๋๋ฐ์ด์ค ๋์ ์ง์ ์ ์ ๋ํ
์ด์
์ผ๋ก ์ ๊ณตํ๋ค
- Before : ๋ฉ์๋ ์คํ ์
- After : ๋ฉ์๋ ์คํ ํ
- AfterReturning : ๋ฉ์๋๊ฐ ์ ์์ ์ผ๋ก ์ข ๋ฃ๋ ํ
- AfterThrowing : ๋ฉ์๋์ ์์ธ๊ฐ ๋ฐ์ ํ ์ ๋์
- Around : ๋ฉ์๋ ์คํ ์ ํ ์์ ์ ๋์
Weaving
- ํฌ์ธํธ์ปท์ผ๋ก ์ง์ ํ ํต์ฌ ๊ด์ฌ ๋ฉ์๋๊ฐ ํธ์ถ๋ ๋ ์ด๋๋ฐ์ด์ค์ ํด๋นํ๋ ํก๋จ ๊ด์ฌ ๋ฉ์๋(Advice)๊ฐ ์ฝ์ ๋๋ ๊ณผ์ ์ ์๋ฏธํ๋ค.
- AOP์์ ๋ฐํ์์ ํ๋ก์๋ฅผ ํตํด ์๋น์ด ์ผ์ด๋๋ค
์ถ๊ฐ ์์
ํก๋จ๋ณด๋
- JoinPoint : ๊ฑด๋ ์ ์๋ ํก๋จ๋ณด๋๋ค
- Pointcut : ์ค์ ๋ก ์ด๋ ํก๋จ๋ณด๋๋ฅผ ๊ฑด๋ ๊ฒ์ธ์ง.
- Advice : ์ค์ ๋ก ์ธ์ ๊ฑด๋ ๊ฒ์ธ์ง, ์ ํธ๋ฑ์ด ์ด๋ก๋ถ๋ก ๋ฐ๋๊ณ ๋ ํ ๊ฑด๋๊ฒ ๋ค
๋ก๊น
- JoinPoint : ๋ก๊น ์ ์ด๋ ์์ ์๋ ๋จ๊ธธ ์ ์๋ค. ์ ์ ์์ฑ์ ๋ก๊น , request, response์์ ๋ก๊น ๋ฑ
- PointCut : createUser ๋ฉ์๋์์ ๋ก๊น ์ ์ํํ๊ฒ ๋ค
- Advice : ์์ ์ ์ง์ . ์ ์ ๋ฅผ ์์ฑํ ํ ์ฌ์ฉ์์ ์ ๋ณด๋ฅผ ๋ก๊ทธ๋ก ๋จ๊น
AOP์ ์ฅ๋จ์
์ฅ์
- ์ ์ง๋ณด์์ฑ : ๊ณตํต ๊ธฐ๋ฅ์ ํ๋์ Aspect์ ์ ์ํด ๋์ด ๊ฐ ๋ฉ์๋๋ง๋ค ๋ฐ๋ณต๋๋ ์ฝ๋๋ฅผ ์์ฑํ์ง ์์๋ ๋์ด ์ฝ๋๋ฅผ ๊น๋ํ๊ฒ ์ ์งํ ์ ์๊ณ ์ ์ง๋ณด์๊ฐ ์ฉ์ดํ๋ค
- ์ฌ์ฌ์ฉ์ฑ : ๋ก๊น ๊ณผ ๊ฐ์ ๊ณตํต ๊ธฐ๋ฅ์ ํ ๋ฒ ์ ์ํด ์ฌ๋ฌ ๊ณณ์์ ์ฌ์ฉ ๊ฐ๋ฅ
- ๊ด์ฌ์ฌ ๋ถ๋ฆฌ : ํต์ฌ ๋น์ฆ๋์ค ๋ก์ง๊ณผ ํก๋จ ๊ด์ฌ์ฌ๋ฅผ ๋ถ๋ฆฌํด ๊ฐ๋ ์ ์ ๋์ผ ์ ์์
๋จ์
- ๋ณต์ก๋ ์ฆ๊ฐ : ์ฝ๋์ ์คํ ํ๋ฆ์ ํ๋์ ํ์ธํ ์ ์๋ ๋ฐฉ์์ผ๋ก ์ ์ฉ๋์ด ์ ๋ชป ์ฌ์ฉ์ ๋๋ฒ๊น ์ด ์ด๋ ค์์ง๊ณ ์ฝ๋๊ฐ ๋ณต์กํด ์ง ์ ์๋ค
- ๋ฐํ์ ์ค๋ฒํด๋ : ๋ฉ์๋ ์คํ ์์ ์ Advice๊ฐ ์ ์ฉ๋์ด ์๋ชป ์ฌ์ฉ์ ์ฑ๋ฅ์ ์ํฅ์ ์ค ์ ์์
728x90
๋ฐ์ํ
'BE > ๐ Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Spring Boot] AOP๋ฅผ ํ์ฉํ ์ปค์คํ ์ ๋ ธํ ์ด์ ๋ง๋ค๊ธฐ (0) | 2024.11.19 |
---|---|
[Spring Boot] AOP ์ฌ์ฉ ๋ฐฉ๋ฒ๊ณผ ์์์ฝ๋ (0) | 2024.11.18 |
[MQTT] Spring Boot ์์ MQTT(mosquitto) ์ฌ์ฉํ๊ธฐ (4) | 2024.11.13 |
[Spring Boot] Custom Validation annotation (0) | 2024.11.10 |
[Spring Boot] RestControllerAdvice๋ก Validation Exception ํธ๋ค๋งํ๊ธฐ (1) | 2024.11.09 |
๋๊ธ