AOP (Aspect Oriented Programming)
Last updated
Last updated
Spring Framework์ ํต์ฌ ๊ฐ๋ 3๊ฐ์ง์์ค ์ฝ๋์ ๋ณต์ก๋๋ฅผ ์ค์ด๊ณ , ํจ์จ์ ๋์ด๊ณ , ์ ์ง๋ณด์๋ฅผ ์ฉ์ดํ๊ฒ ํ๊ธฐ ์ํด Spring์์๋ ๋ค์์ 3๊ฐ์ง๋ฅผ ์ด์ฉํ๋ค.
AOP
AOP๋ ์ธก๋ฉด ์งํฅ์ ํ๋ก๊ทธ๋๋ฐ์ ์ฝ์๋ก, ์ฌ๋ฌ ๊ฐ์ฒด์ ๊ณตํต์ ์ผ๋ก ์ ์ฉ๋ ์ ์๋ ๋ก์ง์ ๋ถ๋ฆฌํ์ฌ ์ฌ์ฌ์ฉ์ฑ์ ๋์ด๋ ํ๋ก๊ทธ๋๋ฐ ๊ธฐ๋ฒ์ด๋ค.
ํ ๋ฉ์๋ ๋ด๋ถ์๋ ๋ค์ํ ๊ด์ฌ์ฌ(Concern)๊ฐ ์กด์ฌํ๋๋ฐ, AOP๋ฅผ ์ด์ฉํ๋ฉด ์ด ๊ด์ฌ์ฌ๋ฅผ ๊ธฐ์ค์ผ๋ก ์ฝ๋๋ฅผ ์ธ๋ก๋ก ๋ถ๋ฆฌํ์ฌ ๋ค๋ฃจ๊ฒ ๋๋ค.
์ด ์ค ํต์ฌ ๊ด์ฌ์ฌ๊ฐ ์๋ ๋ถ๊ฐ์ ์ธ ๊ด์ฌ์ฌ๋ ์ฌ๋ฌ ๋ฉ์๋์์ ๊ณตํต์ ์ผ๋ก ์ด์ฉ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค. (ํธ๋์ญ์ ์ฒ๋ฆฌ, ๋ณด์ ๋ฑ)
๋ฐ๋ผ์, ์ด๋ ๊ฒ ๊ด์ฌ์ฌ๋ฅผ ๋ถ๋ฆฌํด์ ๋ค๋ฃจ๋ฉด ์ค๋ณต๋๋ ์ฝ๋๋ฅผ ์ค์ผ ์ ์๋ค๋ ์ฅ์
์ด ์๋ค.
Aspect
: Concern์ ๋ชจ๋ํํ ๊ฒ์ผ๋ก, ์ฃผ๋ก ๊ณตํต ๋ก์ง์ธ ๊ด์ฌ์ฌ 1๊ณผ 3์ด ์ด์ ํด๋นํ๋ค.
Advice
: Aspect ๋ด ๋ฉ์๋๋ค์ ์ผ์ปซ๋ ์ฉ์ด๋ก, ์ค์ ๋ก์ง์ ํด๋น
JoinPoint
: Advice๋ฅผ ์ ์ฉํ ์์น
PointCut
: ํน์ ๋ฉ์๋์๋ง Advice๋ฅผ ์ ์ฉํ๋ ๊ฒ์ ๋งํจ
Target
: Aspect๋ฅผ ์ ์ฉํ ํด๋์ค, ๋ฉ์๋ ๋ฑ์ ๋งํ๋ค.
IoC ์ปจํ
์ด๋ ๋ด์์ Bean์ผ๋ก ๋์ํ๋ค. ํด๋น Bean์ ํ๋ก์ ๊ฐ์ฒด
๋ก, ๋ฐํ์ ์์ ์ ์์ฑ๋์ด ์ฌ์ฉ๋๋ค.
AOP๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ @Aspect๋ฅผ ๋ถ์ธ ํด๋์ค์ Advice๋ฅผ ์ ์ํ ๋ค Advice์ ์ง์ ์์ (์ , ํ, ์ /ํ)์ ์ ํ๋ ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
AOP๋ Bean์ผ๋ก ๋ฑ๋ก๋์ด์ผ ํ๋ฏ๋ก @Component ์ด๋ ธํ ์ด์ ์ด ์ฌ์ฉ๋์๋ค. @Pointcut์ ํตํด ํน์ Advice๊ฐ ์ฌ์ฉ๋ ํจํค์ง ๋ฒ์, ํ๋ผ๋ฏธํฐ ๋ฑ์ ์ค์ ํ๋ค.
์ง์ ๋ฒ์, ํ๋ผ๋ฏธํฐ๋ฅผ ์ฌ์ฌ์ฉํด์ผ ํ ๊ฒฝ์ฐ Pointcut์ผ๋ก ์ ์ธํ๋ ๊ฒ์ด ์ข๋ค. ๊ทธ๋ฌ๋ ๋จ ํ ๋ฒ๋ง ์ฌ์ฉํ๋ ๊ฒฝ์ฐ @Around ๋ด์ ๋ฒ์๋ฅผ ์ง์ ํด๋ ๋๋ค.
Pointcut๋ง ๋ฐ๋ก ๋ชจ์๋ common aspect๋ฅผ ์์ฑํ๋ ๊ฒ๋ ํจ์จ์ ์ด๋ค.
AOP๋ ์ฌ๋ฌ ๊ฐ๊ฐ ์ ์ฉ๋ ์ ์๋ค. ์ฆ, ๋ฉ์ธ ๋ก์ง์ ์คํ ์ ํ๋ก ์ฌ๋ฌ ํ๋ก์๋ฅผ ๊ฑฐ์น ์ ์๋ค.
์ด ํ๋ก์๋ค ๊ฐ์ ์์๊ฐ ๋ณด์ฅ๋์ด์ผ ํ๋ค๋ฉด @Order ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํ๋ฉด ๋๋ค.