AOP
๊ด์ ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ผ๋ก์ ๊ณตํต๋ ๋ก์ง์ ์ถ์ถํ์ฌ ๋ฉ์๋์ ๋ค์ํ ์์ ์ ์คํํ ์ ์๊ฒ ํด์ค์ ์์ผ๋ฉฐ, ์ฝ๋๋ฅผ ์ค์ฌ์ฃผ๊ณ , ๊ฐ๋ฐ์๊ฐ ๊ณตํต ๋ก์ง์ ๋ฐฐ์ ํ๊ณ ํต์ฌ ๊ด์ฌ์ฌ์ ์ง์คํ ์ ์๋๋ก ํด์ค๋ค.
AOP๋?
์ข์ ๊ฐ๋ฐํ๊ฒฝ์ ์ฃผ์ ์์น์
๊ฐ๋ฐ์๊ฐ ๋น์ฆ๋์ค ๋ก์ง์๋ง ์ง์คํ ์ ์๊ฒ ํ๋ค
๋ ๊ฒ์ด๋ค์ด ๋ชฉํ๋ฅผ ์ํด ๋ช๊ฐ์ง ์ค์ํ ์์น์ด ์์ง๋ง, ๊ฐ์ฅ ์ฝ๊ฒ ์๊ฐํ ์ ์๋ ๊ฒ์
๋ฐ๋ณต์ ์ธ ์ฝ๋์ ์ ๊ฑฐ
๋ผ๊ณ ํ ์ ์๋ค์คํ๋ง ํ๋ ์์ํฌ๋ ์ด๋ฌํ ๋ฐ๋ณต์ ์ธ ์ฝ๋๋ฅผ ์ค์ด๊ณ , ํต์ฌ ๋น์ฆ๋์ค ๋ก์ง์๋ง ์ง์คํ ์ ์๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํ๋ค
๋๋ถ๋ถ์ ์์คํ ์ด ๊ณตํต์ ์ผ๋ก ๊ฐ์ง๊ณ ์๋ ๋ณด์, ๋ก๊ทธ, ํธ๋์ญ์ ๊ณผ ๊ฐ์ด ๋น์ฆ๋์ค ๋ก์ง์ ์๋์ง๋ง, ๋ฐ๋์ ์ฒ๋ฆฌ๊ฐ ํ์ํ ๋ถ๋ถ์ ์คํ๋ง์์๋
ํก๋จ ๊ด์ฌ์ฌ (cross-concern)
์ด๋ผ๊ณ ํ๋ค์คํ๋ง์ ์ด๋ฌํ ํก๋จ ๊ด์ฌ์ฌ๋ฅผ ๋ถ๋ฆฌํด์ ์ ์ํ๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ค
AOP
๋ ์ด๋ฌํํก๋จ ๊ด์ฌ์ฌ๋ฅผ ๋ชจ๋๋ก ๋ถ๋ฆฌ
ํ๋ ํ๋ก๊ทธ๋๋ฐ์ ํจ๋ฌ๋ค์์ด๋ค
AOP ๊ธฐ๋ฒ์์๋
ํต์ฌ ๋ก์ง์ ๊ตฌํํ ์ฝ๋
์์๊ณตํต ๊ธฐ๋ฅ
์ ์ง์ ์ ์ผ๋ก ํธ์ถํ์ง ์๋๋คํต์ฌ ๋ก์ง์ ๊ตฌํํ ์ฝ๋๋ฅผ
์ปดํ์ผ
ํ๊ฑฐ๋, ์ปดํ์ผ ๋ ํด๋์ค๋ฅผ๋ก๋ฉ
ํ๊ฑฐ๋, ๋ก๋ฉํ ํด๋์ค์๊ฐ์ฒด๋ฅผ ์์ฑ
ํ ๋ AOP๊ฐ ์ ์ฉ๋์ด ํต์ฌ ๋ก์ง ๊ตฌํ ์ฝ๋์์ ๊ณตํต ๊ธฐ๋ฅ์ด ์ฝ์ ๋๋ค๊ณตํต ๊ธฐ๋ฅ์ด ๋ณ๊ฒฝ๋๋๋ผ๋ ํต์ฌ ๋ก์ง์ ๊ตฌํํ ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ ํ์๊ฐ ์๋ค
AOP์ ์ฅ์
๊ฐ๋ฐ์๋ ํต์ฌ ๋น์ฆ๋์ค ๋ก์ง์๋ง ์ง์คํด์ ์ฝ๋๋ฅผ ๊ฐ๋ฐํ ์ ์๊ฒ ๋์๊ณ ,
๊ฐ ํ๋ก์ ํธ๋ง๋ค ๋ค๋ฅธ ๊ด์ฌ์ฌ๋ฅผ ์ ์ฉํ ๋ ์ฝ๋์ ์์ ์ ์ต์ํ ์ํฌ ์ ์๊ณ ,
์ํ๋ ๊ด์ฌ์ฌ์ ์ ์ง๋ณด์๊ฐ ์์ํ ์ฝ๋๋ฅผ ๊ตฌ์ฑํ ์ ์๋ค
AOP ์ฉ์ด
Target
ํต์ฌ ๊ธฐ๋ฅ์ ๋ด๊ณ ์๋ ๋ชจ๋๋ก, ๋ถ๊ฐ ๊ธฐ๋ฅ์
๋ถ์ฌํ ๋์
์ด ๋๋ค
Advice
ํ๊ฒ์ ์ ๊ณตํ
๋ถ๊ฐ๊ธฐ๋ฅ
์ ์ ์Advice์ ์ข ๋ฅ
Around
Target์ method๊ฐ ํธ์ถ๋๊ธฐ ์ด์ (before) ์์ ๊ณผ ์ดํ(after) ์์ ์ ๋ชจ๋ ์ฒ๋ฆฌํด์ผ ํ ํ์๊ฐ ์๋ ๋ถ๊ฐ๊ธฐ๋ฅ์ ์ ์ํ๋ค
Joinpoint ์๊ณผ ๋ค์ ์คํ๋ ๋ Advice
Before
Target์ method๊ฐ ์คํ๋๊ธฐ ์ด์ (before) ์์ ์ ์ฒ๋ฆฌํด์ผ ํ ํ์๊ฐ ์๋ ๋ถ๊ฐ๊ธฐ๋ฅ์ ์ ์
Joinpoint ์์์ ์คํ๋๋ Advice
After Returning
Target์ method๊ฐ ์ ์์ ์ผ๋ก ์คํ๋ ์ดํ(after) ์์ ์ ์ฒ๋ฆฌํ ํ์๊ฐ ์๋ ๋ถ๊ฐ๊ธฐ๋ฅ์ ์ ์
Jointpoint method ํธ์ถ์ด ์ ์์ ์ผ๋ก ์ข ๋ฃ๋ ๋ค์ ์คํ๋๋ Advice
After Throwing
Target์ method๊ฐ ์์ธ๋ฅผ ๋ฐ์ํ ์ดํ(after) ์์ ์ ์ฒ๋ฆฌํด์ผ ํ ํ์๊ฐ ์๋ ๋ถ๊ฐ๊ธฐ๋ฅ์ ์ ์
์์ธ๊ฐ throw ๋ ๋ ์คํ๋๋ Advice
JoinPoint
์ด๋๋ฐ์ด์ค๊ฐ
์ ์ฉ
๋ ์ ์๋ ์์นํ๊ฒ ๊ฐ์ฒด๊ฐ ๊ตฌํํ ์ธํฐํ์ด์ค์ ๋ชจ๋ method๋ ์กฐ์ธ ํฌ์ธํธ๊ฐ ๋๋ค
Pointcut
์ด๋๋ฐ์ด์ค๋ฅผ
์ ์ฉํ ํ๊ฒ
์๋ฉ์๋๋ฅผ ์ ๋ณ
ํ๋ ์ ๊ทํํ์Advice๋ฅผ
์ด๋์ ์ ์ฉํ ์ง
๋ฅผ ๊ฒฐ์ !
ํฌ์ธํธ์ปท ํํ์์
execution
์ผ๋ก ์์ํ๊ณ , method์signature
๋ฅผ ๋น๊ตํ๋ ๋ฐฉ๋ฒ์ด ์ฃผ์ ์ฌ์ฉ๋๋ค
Weaving
Pointcut์ ์ํด์ ๊ฒฐ์ ๋ target์
jointpoint
์ ๋ถ๊ฐ๊ธฐ๋ฅ (advice
)๋ฅผ์ฝ์
ํ๋ ๊ณผ์ ์ ๋ปํ๋คWeaving์ AOP๊ฐ
ํต์ฌ๊ธฐ๋ฅ (target)
์ ์ฝ๋์์ํฅ
์ ์ฃผ์ง ์์ผ๋ฉด์ ํ์ํ ๋ถ๊ฐ๊ธฐ๋ฅ (advice
)๋ฅผ์ถ๊ฐ
ํ ์ ์๋๋ก ํด์ฃผ๋ ํต์ฌ์ ์ธ ์ฒ๋ฆฌ๊ณผ์ ์ด๋ค
Aspect
AOP์ ๊ธฐ๋ณธ module
Aspect = Advice + Pointcut
Aspect๋ singleton์ ํํ์ ๊ฐ์ฒด๋ก ์กด์ฌํ๋ค
AOP ๊ฐ๋ ์ ์ ์ฉํ๋ฉด ํต์ฌ๊ธฐ๋ฅ ์ฝ๋ ์ฌ์ด์ ์นจํฌ๋ ๋ถ๊ฐ๊ธฐ๋ฅ์
๋ ๋ฆฝ์ ์ธ aspect
๋ก ๊ตฌ๋ถํด ๋ผ ์ ์๋ค๊ตฌ๋ถ๋ ๋ถ๊ฐ๊ธฐ๋ฅ aspect๋ฅผ runtime ์์ ํ์ํ ์์น์ ๋์ ์ผ๋ก ์ฐธ์ฌํ๊ฒ ํ ์ ์๋ค
Advisor
Advisor = Advice + Pointcut
Advisor๋ Spring AOP์์๋ง ์ฌ์ฉ๋๋ ํน๋ณํ ์ฉ์ด์ด๋ค
Last updated