Spring AOP(Aspect Oriented Programming) ๊ฐœ๋… ๋ฐ ์šฉ์–ด, AspectJ, Spring AOP ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ค์น˜

2021. 11. 15. 11:39ใ†Spring

728x90

1. Spring AOP 

 

1๏ธโƒฃ ํ•ต์‹ฌ๊ธฐ๋Šฅ๊ณผ ๋ถ€๊ฐ€๊ธฐ๋Šฅ 

ํ•ต์‹ฌ ๊ธฐ๋Šฅ์€ ์—…๋ฌด ๋กœ์ง์„ ํฌํ•จํ•˜๋Š” ๊ธฐ๋Šฅ์ด๊ณ , 

๋ถ€๊ฐ€ ๊ฐ€๋Šฅ์€ ํ•ต์‹ฌ ๊ธฐ๋Šฅ์„ ๋„์™€์ฃผ๋Š” ๋ถ€๊ฐ€์ ์ธ ๊ธฐ๋Šฅ(๋กœ๊น…, ๋ณด์•ˆ ๋“ฑ)์„ ๋ถ€๊ฐ€๊ธฐ๋Šฅ(cross-cutting Concerns)์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

 

2๏ธโƒฃ AOP(Aspect Oriented Programming) 

AOP๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ์˜ ๊ด€์‹ฌ์‚ฌ์˜ ๋ถ„๋ฆฌ, ์ฆ‰ ํ•ต์‹ฌ์ ์ธ ๊ธฐ๋Šฅ์—์„œ ๋ถ€๊ฐ€์ ์ธ ๊ธฐ๋Šฅ์„ ๋ถ„๋ฆฌํ•œ๋‹ค. 

๋”ฐ๋ผ์„œ AOP์˜ ๋ชฉ์ ์€ ํ”„๋กœ๊ทธ๋ž˜๋จธ๋“ค์˜ ์—ผ๋‘ ์‚ฌํ•ญ์€ ๋ณ„๋„์˜ ๊ด€์‹ฌ์‚ฌ(Aspect)๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ์ฝ”๋“œ ๊ฐœ๋ฐœํ•  ๋•Œ ํ•ต์‹ฌ ๊ธฐ๋Šฅ์— ๋” ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” ๊ฒƒ์ด๋‹ค!  => Separation of Cross-Cutting Concern

 

 

 

2. Spring AOP ์šฉ์–ด 

 

1๏ธโƒฃ Aspect 

: Aspect๋Š” ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ์„ ์ •์˜ํ•œ ์ฝ”๋“œ์ธ Advice์™€ ์ด Advice๋ฅผ ์–ด๋””์— ์ ์šฉํ• ์ง€๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” PintCut์„ ํ•ฉ์นœ ๊ฐœ๋…์ด๋‹ค. 

Aspect = Advice + PointCut

-> AOP ๊ฐœ๋…์„ ์ ์šฉํ•˜๋ฉด ํ•ต์‹ฌ๊ธฐ๋Šฅ ์ฝ”๋“œ ์‚ฌ์ด์— ์นจํˆฌํ•œ ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ์„ ๋…๋ฆฝ์ ์ธ Aspect๋กœ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๋‹ค. 

๊ตฌ๋ถ„๋œ ๋ถ€๊ฐ€๊ธฐ๋Šฅ Aspect๋ฅผ ๋Ÿฐํƒ€์ž„ ์‹œ์— ํ•„์š”ํ•œ ์œ„์น˜์— ๋™์ ์œผ๋กœ ์ฐธ์—ฌํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

2๏ธโƒฃ Target 

: ํ•ต์‹ฌ ๊ธฐ๋Šฅ์„ ๋‹ด๊ณ  ์žˆ๋Š” ๋ชจ๋“ˆ๋กœ, ํƒ€๊ฒŸ์€ ๋ถ€๊ฐ€๊ธฐ๋Šฅ์„ ๋ถ€์—ฌํ•  ๋Œ€์ƒ์ด ๋œ๋‹ค. 

 

3๏ธโƒฃ Advice

: Advice๋Š” ํƒ€๊ฒŸ์— ์ œ๊ณตํ•  ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ์„ ๋‹ด๊ณ  ์žˆ๋Š” ๋ชจ๋“ˆ์ด๋‹ค. 

 

4๏ธโƒฃ JoinPoint

: Advice๊ฐ€ ์ ์šฉ๋  ์ˆ˜ ์žˆ๋Š” ์œ„์น˜๋ฅผ ๋งํ•œ๋‹ค.  (Target ๊ฐ์ฒด๊ฐ€ ๊ฐ€์ง„ ๋ฉ”์„œ๋“œ)

ํƒ€๊ฒŸ ๊ฐ์ฒด๊ฐ€ ๊ตฌํ˜„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค์˜ ๋ชจ๋“  ๋ฉ”์„œ๋“œ๋Š” ์กฐ์ธ ํฌ์ธํŠธ๊ฐ€ ๋œ๋‹ค. 

Proxy๊ฐ€ Advice๋ฅผ Target์— Weavingํ•ด์ฃผ๋Š” ๋Œ€์ƒ์€ ๋ฐ”๋กœ Target์˜ JoinPoint ๋ฉ”์„œ๋“œ์ด๋‹ค!

๋”ฐ๋ผ์„œ Joinpoint๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด Spring AOP๊ฐ€ Proxy๊ฐ€ ๊ฐ€๋™๋˜์–ด Proxy๊ฐ€ Advice์™€ Target์˜ JoinPoint๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค. 

 

5๏ธโƒฃ PointCut 

: Advice๋ฅผ ์ ์šฉํ•  ํƒ€๊ฒŸ์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์„ ๋ณ„ํ•˜๋Š” ์ •๊ทœ ํ‘œํ˜„์‹์ด๋‹ค. 

ํฌ์ธํŠธ์ปท ํ‘œํ˜„์‹์€ execution์œผ๋กœ ์‹œ์ž‘ํ•˜๊ณ , ๋ฉ”์„œ๋“œ์˜ signature๋ฅผ ๋น„๊ตํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ฃผ๋กœ ์ด์šฉํ•œ๋‹ค. 

 

6๏ธโƒฃ Aspect

: Aspect๋Š” AOP์˜ ๊ธฐ๋ณธ ๋ชจ๋“ˆ๋กœ Advice + PointCut์ด๊ณ , Aspect๋Š” ์‹ฑ๊ธ€ํ†ค ํ˜•ํƒœ์˜ ๊ฐ์ฒด๋กœ ์กด์žฌํ•œ๋‹ค. 

 

7๏ธโƒฃ Advisor 

: Advisor = Aspect + PointCut 

Advisor๋Š” Spring AOP์—์„œ๋งŒ ์‚ฌ์šฉ๋˜๋Š” ํŠน๋ณ„ํ•œ ์šฉ์–ด์ด๋‹ค.

 

8๏ธโƒฃ Weaving โญ

: Weaving์€ PointCut์— ์˜ํ•ด์„œ ๊ฒฐ์ •๋œ ํƒ€๊ฒŸ์˜ joinpoint์— Advise๋ฅผ ์‚ฝ์ž…ํ•˜๋Š” ๊ณผ์ •์„ ์˜๋ฏธํ•œ๋‹ค. 

Weaving์€ AOP๊ฐ€ ํ•ต์‹ฌ๊ธฐ๋Šฅ(Target)์˜ ์ฝ”๋“œ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š์œผ๋ฉด์„œ ํ•„์š”ํ•œ ๋ถ€๊ฐ€๊ธฐ๋Šฅ(Advise)์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” ํ•ต์‹ฌ์ ์ธ ์ฒ˜๋ฆฌ๊ณผ์ •์ด๋‹ค. 

 

9๏ธโƒฃ Proxy 

: Proxy๋Š” Target์„ ๊ฐ์‹ธ๊ณ  ์žˆ๊ณ , Target ํ˜ธ์ถœ์ฝ”๋“œ๊ฐ€ ์ˆ˜ํ–‰๋ ๋•Œ๋ฉด Target์„ ํ˜ธ์ถœํ•˜๊ธฐ ์ „, ํ›„ ํ˜น์€ ์ค‘๊ฐ„์— Advice๋ฅผ Weaving ํ•˜์—ฌ ์‹คํ–‰ํ•œ๋‹ค. 

 

 

3. Spring AOP์˜ ํŠน์ง• 

 

1๏ธโƒฃ Spring์€ Proxy ๊ธฐ๋ฐ˜ AOP๋ฅผ ์ง€์›ํ•œ๋‹ค.

: Spring์€ Target ๊ฐ์ฒด์— ๋Œ€ํ•œ Proxy๋ฅผ ๋งŒ๋“ค์–ด ์ œ๊ณตํ•œ๋‹ค.

Target์„ ๊ฐ์‹ธ๋Š” Proxy๋Š” Runtime ์— ์ƒ์„ฑ๋˜๊ณ , Proxy๋Š” Advice๋ฅผ Target๊ฐ์ฒด์— ์ ์šฉํ•˜๋ฉด์„œ ์ƒ์„ฑ๋˜๋Š” ๊ฐ์ฒด์ด๋‹ค.

 

2๏ธโƒฃ Proxy๊ฐ€ ํ˜ธ์ถœ์„ ๊ฐ€๋กœ์ฑˆ๋‹ค. (Intercept)

: Proxy๋Š” Target ๊ฐ์ฒด์— ๋Œ€ํ•œ ํ˜ธ์ถœ์„ ๊ฐ€๋กœ์ฑˆ ๋‹ค์Œ์— Advice์˜ ๋ถ€๊ฐ€๊ธฐ๋Šฅ ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ๋‚œ ํ›„์— Target์˜ ํ•ต์‹ฌ๊ธฐ๋Šฅ ๋กœ์ง์„ ํ˜ธ์ถœํ•˜๋Š” ์ „์ฒ˜๋ฆฌ ์–ด๋“œ๋ฐ”์ด์Šค์™€ Target์˜ ํ•ต์‹ฌ๊ธฐ๋Šฅ ๋กœ์ง ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•œ ํ›„์— Advice์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ์ธ ํ›„์ฒ˜๋ฆฌ ์–ด๋“œ๋ฐ”์ด์Šค๊ฐ€ ์žˆ๋‹ค. 

 

3๏ธโƒฃ Spring AOP๋Š” ๋ฉ”์„œ๋“œ JoinPoint์—์„œ๋งŒ ์ง€์›ํ•œ๋‹ค. 

: Spring์€ ๋™์  Proxy๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ AOP๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”์„œ๋“œ joinpoint๋งŒ ์ง€์›ํ•œ๋‹ค.

=> Target์˜ ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋˜๋Š” ๋Ÿฐํƒ€์ž„ ์‹œ์ ์—๋งŒ Advice๋ฅผ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

โ— AspectJ์™€ ๊ฐ™์€ ๊ณ ๊ธ‰ aop๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค์–‘ํ•œ ์ž‘์—…์— ๋ถ€๊ฐ€๊ธฐ๋Šฅ์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ๊ธดํ•˜๋‹ค. (๊ฐ์ฒด ์ƒ์„ฑ, ํ•„๋“œ๊ฐ’ ์กฐํšŒ์™€ ์กฐ์ž‘, static ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ๋ฐ ์ดˆ๊ธฐํ™”)

 

4๏ธโƒฃ Spring AOP ๊ตฌํ˜„ ๋ฐฉ์‹ 

- XML ๊ธฐ๋ฐ˜์˜ POJO ํด๋ž˜์Šค๋ฅผ ์ด์šฉํ•œ AOP ๊ตฌํ˜„  <aop:config>

- @Aspect ์–ด๋…ธํ…Œ์ด์…˜์„ ์ด์šฉํ•œ AOP ๊ตฌํ˜„  <aop:aspectj-autoproxy/>

 

 

 

4. AspectJ์™€ Spring AOP ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ค์น˜ 

 

1๏ธโƒฃ AspectJ Runtime ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ค์น˜

https://mvnrepository.com/artifact/org.aspectj/aspectjrt

pom.xml์— ์ถ”๊ฐ€ 

 

 

2๏ธโƒฃ Aspect Weaver ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ค์น˜

https://mvnrepository.com/artifact/org.aspectj/aspectjweaver

pom.xml์— ์ถ”๊ฐ€ 

 

3๏ธโƒฃ Spring AOP ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ค์น˜ 

https://mvnrepository.com/artifact/org.springframework/spring-aop

pom.xml์— ์ถ”๊ฐ€

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90