Spring AOP [2] Advice, AOP ์„ค์ • ๋ฐ ํ…Œ์ŠคํŠธ, PointCut ํ‘œํ˜„์‹

2021. 11. 15. 14:25ใ†Spring

728x90

1. Spring AOP ๊ตฌํ˜„ ๋ฐฉ๋ฒ• 

 

1๏ธโƒฃ XML ๊ธฐ๋ฐ˜์˜ POJO ํด๋ž˜์Šค๋ฅผ ์ด์šฉํ•œ AOP ๊ตฌํ˜„ 

: ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” Advice ํด๋ž˜์Šค๋ฅผ ์ž‘์„ฑํ•˜๊ณ , XML ์„ค์ •ํŒŒ์ผ์— <aop:config> ์„ ์ด์šฉํ•ด์„œ Aspect๋ฅผ ์„ค์ •ํ•œ๋‹ค. (Advice์™€ Pointcut์„ ์„ค์ •ํ•จ.)

 

2๏ธโƒฃ @Aspect ์–ด๋…ธํ…Œ์ด์…˜์„ ์ด์šฉํ•œ AOP ๊ตฌํ˜„ 

: @Aspect ์–ด๋…ธํ…Œ์ด์…˜์„ ์ด์šฉํ•ด์„œ ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” Aspect ํด๋ž˜์Šค๋ฅผ ์ž‘์„ฑํ•œ๋‹ค. 

Aspect ํด๋ž˜์Šค์—๋Š” Advice๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฉ”์„œ๋“œ์™€ Pointcut์„ ํฌํ•จํ•œ๋‹ค. 

๊ทธ๋ฆฌ๊ณ  XML ์„ค์ •ํŒŒ์ผ์— <aop:aspectj-autoproxy/>์„ ์„ค์ •ํ•œ๋‹ค. 

 

2. Advice ์ข…๋ฅ˜ 

 

1๏ธโƒฃ Aroud Advice 

: Target์˜ ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋˜๊ธฐ ์ด์ „(Before) ์‹œ์ ๊ณผ ์ดํ›„ (After) ์‹œ์ ์— ๋ชจ๋‘ ์ฒ˜๋ฆฌํ•ด์•ผํ•  ํ•„์š”๊ฐ€ ์žˆ๋Š” ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ์„ ์ •์˜ํ•œ๋‹ค. (joinPoint ์•ž๊ณผ ๋’ค์—์„œ ์‹คํ–‰๋˜๋Š” Advice)

 

2๏ธโƒฃ Before Advice 

: Target์˜ ๋ฉ”์„œ๋“œ๊ฐ€ ์‹คํ–‰๋˜๊ธฐ ์ด์ „(Before) ์‹œ์ ์— ์ฒ˜๋ฆฌํ•ด์•ผํ•  ํ•„์š”๊ฐ€ ์žˆ๋Š” ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ์„ ์ •์˜ํ•œ๋‹ค.

(joinpoint ์•ž์—์„œ ์‹คํ–‰๋˜๋Š” Advice)

 

3๏ธโƒฃ After Returning Advice 

: Target์˜ ๋ฉ”์„œ๋“œ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰๋œ ์ดํ›„(After) ์‹œ์ ์— ์ฒ˜๋ฆฌํ•ด์•ผํ•  ํ•„์š”๊ฐ€ ์žˆ๋Š” ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ์„ ์ •์˜ํ•œ๋‹ค. 

(joinpoint ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ์ด ์ •์ƒ์ ์œผ๋กœ ์ข…๋ฃŒ๋œ ๋’ค์— ์‹คํ–‰๋˜๋Š” Advice)

 

4๏ธโƒฃ After Throwing Advice

: Target์˜ ๋ฉ”์„œ๋“œ๊ฐ€ ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ๋œ ์ดํ›„(Ater) ์‹œ์ ์— ์ฒ˜๋ฆฌํ•ด์•ผ ํ•  ํ•„์š”๊ฐ€ ์žˆ๋Š” ๋ถ€๊ฐ€๊ธฐ๋Šฅ์„ ์ •์˜ํ•œ๋‹ค. 

(์˜ˆ์™ธ๊ฐ€ ๋˜์ ธ์งˆ ๋•Œ ์‹คํ–‰๋˜๋Š” Advice) 

 

 

3. Testํ•  Advice ํด๋ž˜์Šค 

: Advice๋Š” Target ๊ฐ์ฒด์˜ ๋ฉ”์„œ๋“œ ์‹คํ–‰ ์‹œ๊ฐ„์„ ๊ณ„์‚ฐํ•ด์„œ ์ถœ๋ ฅํ•ด์ฃผ๋Š” ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค ๊ฒƒ์ด๋‹ค. 

Advice ์œ ํ˜•์€ Target๊ฐ์ฒด์˜ ์ „ ํ›„๋กœ ๋™์ž‘ํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— Around Advice๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ์ด๋‹ค.

 

1๏ธโƒฃ JoinPoint ์ธํ„ฐํŽ˜์ด์Šค 

: JoinPoint ์ธํ„ฐํŽ˜์ด์Šค๋Š” Spring AOP ํ˜น์€ AspectJ์—์„œ AOP๊ฐ€ ์ ์šฉ๋˜๋Š” ์ง€์ ์„ ์˜๋ฏธํ•œ๋‹ค. 

 

- JoinPoint ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๋ฉ”์„œ๋“œ 

getArgs() : ๋ฉ”์„œ๋“œ์˜ Arguments๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

getThis() : ํ”„๋ก์‹œ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. 

getTarget() : ๋Œ€์ƒ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

getSignature() : Advice ๋˜๋Š” ๋ฉ”์„œ๋“œ์˜ ์„ค๋ช…์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

toString() : Advice๋˜๋Š” ๋ฉ”์„œ๋“œ์˜ ์„ค๋ช…์„ ์ถœ๋ ฅํ•œ๋‹ค. 

 

 

2๏ธโƒฃ ProceedingJoinPoint ์ธํ„ฐํŽ˜์ด์Šค 

-> Around Advice๋Š” Joinpoint์˜ ํ•˜์œ„ ํด๋ž˜์Šค์ธ ProceedingJoinPoint ํƒ€์ž…์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ํ•„์ˆ˜์ ์œผ๋กœ ์„ ์–ธํ•ด์•ผํ•œ๋‹ค. 

 

 

3๏ธโƒฃ Advice ํด๋ž˜์Šค 

 

4๏ธโƒฃ Adviceํด๋ž˜์Šค๋ฅผ XML ์„ค์ •ํŒŒ์ผ์— Bean์œผ๋กœ ๋“ฑ๋กํ•˜๊ธฐ 

 

<aop:context> : AOP ์„ค์ • ์ •๋ณด์ž„์„ ๋‚˜ํƒ€๋‚ธ๋‹ค. 

-> ref ์†์„ฑ์€ Aspect๋กœ์„œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•  Bean์„ ์„ค์ •ํ•  ๋•Œ ์‚ฌ์šฉ 

 

<aop:aspect> : Aspect๋ฅผ ์„ค์ •ํ•œ๋‹ค. 

 

<aop:around pointcut="execution()"> : Around Advice์˜ pointcut์„ ์„ค์ •ํ•œ๋‹ค. 

-> pointcut ์†์„ฑ์˜ execution ์ง€์‹œ์ž๋Š” Advise๋ฅผ ์ ์šฉํ•  ํŒจํ‚ค์ง€, ํด๋ž˜์Šค, ๋ฉ”์„œ๋“œ๋ฅผ ํ‘œํ˜„ํ•  ๋•Œ ์‚ฌ์šฉํ•จ .

 

 

5๏ธโƒฃ Advice ํด๋ž˜์Šค ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ ๋ฐ ํ…Œ์ŠคํŠธ ์ˆ˜ํ–‰ 

 

 

4. Advice ํƒœ๊ทธ 

 

1๏ธโƒฃ <aop:before>

: ๋ฉ”์„œ๋“œ ์‹คํ–‰ ์ „์— ์ ์šฉ๋˜๋Š” Advice๋ฅผ ์ •์˜ํ•œ๋‹ค.

 

2๏ธโƒฃ <aop : after-returning> 

: ๋ฉ”์„œ๋“œ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰๋œ ํ›„์— ์ ์šฉ๋˜๋Š” Advice๋ฅผ ์ •์˜ํ•œ๋‹ค. 

 

3๏ธโƒฃ <aop : after-throwing>

: ๋ฉ”์„œ๋“œ๊ฐ€ ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ฌ ๋•Œ ์ ์šฉ๋˜๋Š” Advice๋ฅผ ์ •์˜ํ•œ๋‹ค.

try-catch ๋ธ”๋ก์—์„œ catch๋ธ”๋ก๊ณผ ๋น„์Šทํ•จ.

 

4๏ธโƒฃ <aop : after>

: ๋ฉ”์„œ๋“œ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰๋˜๋Š”์ง€ ๋˜๋Š” ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋Š”์ง€ ์—ฌ๋ถ€์— ์ƒ๊ด€์—†์ด Advice๋ฅผ ์ •์˜ํ•œ๋‹ค. 

 

5๏ธโƒฃ <aop:around>

: ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์ด์ „, ์ดํ›„, ์˜ˆ์™ธ๋ฐœ์ƒ ๋“ฑ ๋ชจ๋“  ์‹œ์ ์— ์ ์šฉ ๊ฐ€๋Šฅํ•œ Advice๋ฅผ ์ •์˜ํ•œ๋‹ค. 

 

 

5. PointCut ํ‘œํ˜„์‹ 

 execution([์ ‘๊ทผ์ œํ•œ์ž ํŒจํ„ด] ํƒ€์ž…ํŒจํ„ด [ํƒ€์ž…ํŒจํ„ด.] ์ด๋ฆ„ํŒจํ„ด (ํƒ€์ž…ํŒจํ„ด| "..", ...) [throws ์˜ˆ์™ธํŒจํ„ด])

 

1๏ธโƒฃ [์ ‘๊ทผ์ œํ•œ์ž ํŒจํ„ด]

: public, private ์™€ ๊ฐ™์€ ์ ‘๊ทผ์ œํ•œ์ž, ์ƒ๋žต๊ฐ€๋Šฅ 

 

2๏ธโƒฃ ํƒ€์ž…ํŒจํ„ด 

: ๋ฆฌํ„ด๊ฐ’์˜ ํƒ€์ž… ํŒจํ„ด 

 

3๏ธโƒฃ [ํƒ€์ž…ํŒจํ„ด.]

: ํŒจํ‚ค์ง€์™€ ํด๋ž˜์Šค ์ด๋ฆ„์— ๋Œ€ํ•œ ํŒจํ„ด, ์ƒ๋žต๊ฐ€๋Šฅํ•˜๋ฉฐ ์‚ฌ์šฉํ•  ๋•Œ '.'์„ ์‚ฌ์šฉํ•ด ์—ฐ๊ฒฐํ•จ. 

 

4๏ธโƒฃ ์ด๋ฆ„ํŒจํ„ด 

: ๋ฉ”์„œ๋“œ ์ด๋ฆ„ ํƒ€์ž… ํŒจํ„ด 

 

5๏ธโƒฃ (ํƒ€์ž…ํŒจํ„ด| "..", ...)

: ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ํƒ€์ž…ํŒจํ„ด์„ ์ˆœ์„œ๋Œ€๋กœ ๋„ฃ์„ ์ˆ˜ ์žˆ๋‹ค. 

 

6๏ธโƒฃ [throws ์˜ˆ์™ธํŒจํ„ด]

: ์˜ˆ์™ธ ์ด๋ฆ„ ํŒจํ„ด 

 

 

 

->  myspring.user.serivce ํŒจํ‚ค์ง€์˜ ๋ชจ๋“  ํด๋ž˜์Šค์™€ ..์„ ์‚ฌ์šฉํ•ด ์„œ๋ธŒ ํŒจํ‚ค์ง€์˜ ํด๋ž˜์Šค๊นŒ์ง€ ํฌํ•จํ•œ๋‹ค.

 

 

 

 

 

 

 

 

 

728x90