๊ด์ ์งํฅ ํ๋ก๊ทธ๋๋ฐ (AOP)
- ํต์ฌ ๊ด์ฌ ์ฌํญ(core concern)๊ณผ ๊ณตํต ๊ด์ฌ ์ฌํญ(cross-cuttin concern)
- ๊ธฐ์กด OOP (๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ)์์๋ ๊ณตํต๊ด์ฌ์ฌํญ์ ์ฌ๋ฌ ๋ชจ๋์์ ์ ์ฉํ๋๋ฐ ์์ด ์ค๋ณต๋ ์ฝ๋๋ฅผ ์์ํ๋ ํ๊ณ๊ฐ ์กด์ฌํจ.
- ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด AOP๊ฐ ๋ฑ์ฅ
- AOP๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ํต์ฌ ๊ด์ฌ ์ฌํญ๊ณผ ์ ์ฒด์ ์ ์ฉ๋๋ ๊ณตํต ๊ด์ฌ ์ฌํญ์ ๊ธฐ์ค์ผ๋ก ํ๋ก๊ทธ๋๋ฐํจ์ผ๋ก์จ ๊ณตํต ๋ชจ๋์ ์์ฝ๊ฒ ์ ์ฉํ ์ ์๊ฒ ํจ
- AOP๋ application์์์ ๊ด์ฌ์ฌ์ ๋ถ๋ฆฌ(๊ธฐ๋ฅ์ ๋ถ๋ฆฌ) ์ฆ, ํต์ฌ์ ์ธ ๊ธฐ๋ฅ์์ ๋ถ๊ฐ์ ์ธ ๊ธฐ๋ฅ์ ๋ถ๋ฆฌํจ.
- ๋ถ๋ฆฌํ ๋ถ๊ฐ๊ธฐ๋ฅ์ ์ด์คํฉํธ(Aspect) (=๊ณตํต ๊ด์ฌ ์ฌํญ) ๋ผ๋ ๋ ํนํ ๋ชจ๋ ํํ๋ก ๋ง๋ค์ด์ ์ค๊ณํ๊ณ ๊ฐ๋ฐํ๋ ๋ฐฉ๋ฒ.
- OOP๋ฅผ ์ ์ฉํ์ฌ๋ ํต์ฌ๊ธฐ๋ฅ์์ ๋ถ๊ฐ๊ธฐ๋ฅ์ ์ฝ๊ฒ ๋ถ๋ฆฌ๋ ๋ชจ๋๋ก ์์ฑํ๊ธฐ ์ด๋ ค์ด ๋ฌธ์ ์ ์ AOP๊ฐ ํด๊ฒฐ
- AOP๋ ๋ถ๊ฐ๊ธฐ๋ฅ์ ์ด์คํฉํธ(Aspect)๋ก ์ ์ํ์ฌ, ํต์ฌ๊ธฐ๋ฅ์์ ๋ถ๊ฐ๊ธฐ๋ฅ์ ๋ถ๋ฆฌํจ์ผ๋ก์จ ํต์ฌ๊ธฐ๋ฅ์ ์ค๊ณํ๊ณ ๊ตฌํํ ๋ ๊ฐ์ฒด์งํฅ์ ์ธ ๊ฐ์น๋ฅผ ์งํฌ ์ ์๋๋ก ๋์์ฃผ๋ ๊ฐ๋
๐ Web์ด ์๋ ๊ฒ๋ค์ ๋ํ ์ฒ๋ฆฌ = AOP
AOP ์ ์ฉ ์
- ๊ฐ๋จํ ๋ฉ์๋์ ์ฑ๋ฅ ๊ฒ์ฌ
- ๊ฐ๋ฐ ๋์ค DB์ ๋๋์ ๋ฐ์ดํฐ๋ฅผ ๋ฃ๊ณ ๋นผ๋ ๋ฑ ๋ฐฐ์น ์์ ์ ๋ํด ์๊ฐ์ ์ธก์ ํด ๋ณด๊ณ ์ฟผ๋ฆฌ๋ฅผ ๊ฐ์ ํ๋ ์์ ์ ๋งค์ฐ ์๋ฏธ๊ฐ ์๋ค. ์ด ๊ฒฝ์ฐ ๋งค๋ฒ ํด๋น ๋ฉ์๋์ ์ฒ์๊ณผ ๋์ System.currentTimeMillis();๋ฅผ ์ฌ์ฉํ๊ฑฐ๋, ์คํ๋ง์ด ์ ๊ณตํ๋ StopWatch ์ฝ๋๋ฅผ ์ฌ์ฉํ๊ธฐ๋ ๋งค์ฐ ๋ฒ๊ฑฐ๋กญ๋ค.
- ์ด๋ฐ ๊ฒฝ์ฐ ํด๋น ์์ ์ ํ๋ ์ฝ๋๋ฅผ ๋ฐ์์ ์ค์ ํ๊ณ ํด๋น ๋ถ๋ถ์ ์ฌ์ฉํ๋ ๊ฒ์ด ํธ๋ฆฐํ๋ค.
- ํธ๋์ญ์
์ฒ๋ฆฌ
- ํธ๋์ญ์ ์ ๊ฒฝ์ฐ ๋น์ฆ๋์ค ๋ก์ง์ ์ ํ์ ์ค์ ๋๋ค.
- ํ์ง๋ง ๋งค๋ฒ ์ฌ์ฉํ๋ ํธ๋์ง์ (try{~~~}catch{}๋ถ๋ถ) ์ ์ฝ๋๋ ๋ฒ๊ฑฐ๋กญ๊ณ , ์์ค๋ฅผ ๋์ฑ ๋ณต์กํ๊ฒ ๋ณด์ฌ์ค๋ค.
๋น์ฆ๋์ค ๋ก์ง์ด๋?
request์ ์ฒ๋ฆฌ๋, ํน์ ๊ธฐ๋ฅ ์ํ์ ์ํด ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ์ค์ง์ ์ธ ๋ก์ง์ ๋ปํจ.
์ฌ์ฉ์์ ์๊ตฌ์ฌํญ์ ํด๊ฒฐํ๊ธฐ ์ํ ์ค์ง์ ์ธ ์ฝ๋
- ์์ธ ๋ฐ
- ์ํคํ ์ฒ ๊ฒ์ฆ
- ๊ธฐํ
- ๋ก๊น , ์ธ์ฆ, ๊ถํ ๋ฑ
Spring AOP
์ฉ์ด
- Target
- ํต์ฌ๊ธฐ๋ฅ์ ๋ด๊ณ ์๋ ๋ชจ๋๋ก target์ ๋ถ๊ฐ๊ธฐ๋ฅ์ ๋ถ์ฌํ ๋์์ด ๋จ
- Advice
- ์ด๋ ์์ (EX : method์ ์ํ ์ /ํ, ์์ธ ๋ฐ์ ํ…) ์ ์ด๋ค ๊ณตํต ๊ด์ฌ ๊ธฐ๋ฅ(Aspect)์ ์ ์ฉํ ์ง ์ ์ํ ๊ฒ. Target์ ์ ๊ณตํ ๋ถ๊ฐ๊ธฐ๋ฅ์ ๋ด๊ณ ์๋ ๋ชจ๋
- JoinPoint
- ๊ณตํต ๊ด์ฌ ๊ธฐ๋ฅ(Aspect)๊ฐ ์ ์ฉ๋ ์ ์๋ ์ง์ (method, field)
- ์ฆ target ๊ฐ์ฒด๊ฐ ๊ตฌํํ ์ธํฐํ์ด์ค์ ๋ชจ๋ method๋ JoinPoint๊ฐ ๋จ
- Pointcut์ด ๋ ์ ์๋ ํ๋ณด๊ตฐ๋ค
- Pointcut (target์ค method ํ๋๊ฐ pointcut)
- ๊ณตํต ๊ด์ฌ ์ฌํญ์ด ์ ์ฉ๋ JoinPoint
- Advice๋ฅผ ์ ์ฉํ target์ method๋ฅผ ์ ๋ณํ๋ ์ ๊ท ํํ์
- Pointcut ํํ์์ execution์ผ๋ก ์์ํ๊ณ method์ Signature๋ฅผ ๋น๊ตํ๋ ๋ฐฉ๋ฒ์ ์ฃผ๋ก ์ด์ฉ
- Aspect
- ์ฌ๋ฌ ๊ฐ์ฒด์์ ๊ณตํต์ผ๋ก ์ ์ฉ๋๋ ๊ณตํต ๊ด์ฌ ์ฌํญ (transaction, logging, security)
- AOP์ ๊ธฐ๋ณธ ๋ชจ๋
- Aspect = Advice + Pointcut
- Aspect๋ Singleton ํํ์ ๊ฐ์ฒด๋ก ์กด์ฌ
- Advisor
- Advisor = Advice + pointcut
- Advisor์ Spring AOP์์๋ง ์ฌ์ฉ๋๋ ํน๋ณํ ์ฉ์ด
- Weaving
- ์ด๋ค Advice๋ฅผ ์ด๋ค Pointcut(ํต์ฌ์ฌํญ)์ ์ ์ฉ์ํฌ ๊ฒ์ธ์ง์ ๋ํ ์ค์ (Advisor)
- Pointcut์ ์ํด์ ๊ฒฐ์ ๋ ํ๊ฒ์ JoinPoint์ ๋ถ๊ฐ๊ธฐ๋ฅ(Advice)์ ์ฝ์ ํ๋ ๊ณผ์ ์ ๋ปํจ
- Weaving์ AOP์ ํต์ฌ๊ธฐ๋ฅ(target)์ ์ฝ๋์ ์ํฅ์ ์ฃผ์ง ์์ผ๋ฉด์ ํ์ํ ๋ถ๊ฐ๊ธฐ๋ฅ(Advice)์ ์ถ๊ฐํ ์ ์๋๋ก ํด์ฃผ๋ ํต์ฌ์ ์ธ ์ฒ๋ฆฌ๊ณผ์
๊ธฐ์กด(OOP)์ AOP๋น๊ต
Spring AOP ํน์ง
- ํ๋ก์(Proxy)๊ธฐ๋ฐ AOP์ง์
- Spring์ Target ๊ฐ์ฒด์ ๋ํ Proxy๋ฅผ ๋ง๋ค์ด ์ ๊ณต
- Target์ ๊ฐ์ธ๋ Proxy๋ ์คํ์๊ฐ(Runtime)์ ์์ฑ
- Proxy๋ Advice๋ฅผ Target๊ฐ์ฒด์ ์ ์ฉ์ํค๋ฉด ์์ฑ๋๋ ๊ฐ์ฒด
- ํ๋ก์๊ฐ ํธ์ถ์ ๊ฐ๋ก์ฑ (Intercept)
- Proxy๋ Target ๊ฐ์ฒด์ ๋ํ ํธ์ถ์ ๊ฐ๋ก์ฑ ๋ค์ Advice์ ๋ถ๊ฐ๊ธฐ๋ฅ ๋ก์ง์ ์ํํ๊ณ ๋ ํ์ Target์ ํต์ฌ ๊ธฐ๋ฅ ๋ก์ง์ ํธ์ถํ๋ค. (์ ์ฒ๋ฆฌAdvice)
- ๋๋ Target ์ ํต์ฌ ๊ธฐ๋ฅ ๋ก์ง method๋ฅผ ํธ์ถํ ํ์ ๋ถ๊ฐ๊ธฐ๋ฅ (Advice)์ ์ํํ๋ ๊ฒฝ์ฐ๋ ์๋ค. (ํ์ฒ๋ฆฌ Advice)
- Spring AOP๋ method JoinPoint๋ง ์ง์
- ์คํ๋ง์ ๋์ Proxy๋ฅผ ๊ธฐ๋ฐ์ผ๋ก AOP๋ฅผ ๊ตฌํํ๋ฏ๋ก method JoinPoint๋ง ์ง์
- ์ฆ, ํต์ฌ๊ธฐ๋ฅ(target)์ method๊ฐ ํธ์ถ๋๋ ๋ฐํ์ ์์ ์๋ง ๋ถ๊ฐ๊ธฐ๋ฅ(Advice)๋ฅผ ์ ์ฉํ ์ ์๋ค.
- AspectJ์ ๊ฐ์ ๊ณ ๊ธ AOP framework๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ์ฒด์ ์์ฑ, ํ๋๊ฐ์ ์กฐํ์ ์กฐ์, static method ํธ์ถ ๋ฐ ์ด๊ธฐํ ๋ฑ์ ๋ค์ํ ์์ ์ ๋ถ๊ฐ๊ธฐ๋ฅ์ ์ ์ฉํ ์ ์๋ค.
Spring AOP ๊ตฌํ
- POJO Class๋ฅผ ์ด์ฉ
- Spring API๋ฅผ ์ด์ฉ
- Annotation์ ์ด์ฉ
'๐๋ฐฑ์๋ : BackEnd' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
MyBatis (1) | 2024.01.06 |
---|---|
Spring Web MVC (0) | 2024.01.02 |
SpringFramework - DI (2) | 2024.01.01 |
MVC Pattern, Session, Cookie (1) | 2024.01.01 |
[JSP] (0) | 2023.12.28 |