[Spring] AOP (Aspect-Oriented Programming) ๊ธฐ๋ณธ๊ณผ ๊ฐœ๋…

๋ฐ˜์‘ํ˜•

Spring์—๋Š” AOP(Aspect-Oriented Programming, ๊ด€์  ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ)์ด๋ผ๋Š” ํ•ต์‹ฌ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์Œ? OOP(๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ)๋ผ๋Š” ๊ฒƒ์€ ๋“ค์–ด๋ดค๋Š”๋ฐ, AOP๋Š” ๋ฌด์—‡์ผ๊นŒ์š”?

 

 

 

AOP vs OOP ?

๊ด€์  ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(AOP)์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ฝ”๋“œ๊ฐ€ ์ค‘๋ณต๋˜๊ณ  ๊ฐ•๋ ฅํ•˜๊ฒŒ ๊ฒฐํ•ฉ๋˜์–ด ๋‹ค๋ฅธ ๋กœ์ง๊ณผ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์—†๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ์ง๋“ค์„ ๋ณ„๋„์˜ ๊ด€์‹ฌ์‚ฌ๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ๋ชจ๋“ˆํšŒ ํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

 

์šฐ๋ฆฌ๋Š” ๋ณดํ†ต ์ด๋Ÿฌํ•œ ๋กœ์ง์„ ๋งŒ๋‚ฌ์„ ๋•Œ ์ฝ”๋“œ๋ฅผ ๋ณต์ œํ•˜์—ฌ ์˜์กด์„ฑ์„ ๋งŒ๋“ค๊ฒŒ ๋˜๋Š”๋ฐ, AOP๋Š” ์ด๋Ÿฌํ•œ ์˜์กด์„ฑ ์—†์ด๋„ ๋™์ž‘ํ•˜๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค. ๋Œ€ํ‘œ์ ์œผ๋กœ logging ์ฝ”๋“œ๋“ค์ด ์—ฌ๊ธฐ์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค.

 

๊ทธ๋ ‡๋‹ค๋ฉด AOP์™€ OOP๋Š” ์„œ๋กœ ๊ฒฝ์Ÿํ•˜๋Š” ๊ด€๊ณ„์ธ๊ฐ€์š”?

 

๊ทธ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ์šฐ๋ฆฌ๋Š” OOP๋งŒ์„ ๊ฐ€์ง€๊ณ  ์ „์ฒด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ์ง€๋งŒ AOP๋งŒ ๊ฐ€์ง€๊ณ  ์ „์ฒด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ AOP๋ฅผ ๋ฐฐ์šฐ๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ฐ˜๋“œ์‹œ OOP์— ๋Œ€ํ•œ ๊ฐœ๋…์„ ํ™•์‹คํžˆ ์ˆ™์ง€ํ•œ ๋’ค์— ๊ณต๋ถ€ํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

 

๋‹จ์ˆœํ•˜๊ฒŒ ๋ณธ๋‹ค๋ฉด ์ € ํด๋ž˜์Šค๋ฅผ ์ถ”์ƒ ํด๋ž˜์Šค๋กœ ๋ฐ”๊พธ๊ณ  ํ•ด๋‹น ํด๋ž˜์Šค๋ฅผ ์ƒ์†ํ•  ๋•Œ super ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ๋„ฃ์„ ์ˆ˜๋„ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์—ฌ์ „ํžˆ ์ค‘๋ณต๋œ ์ฝ”๋“œ๊ฐ€ ๋ฐœ์ƒ๋˜๋Š” ๊ฒƒ์€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ด๋ฅผ 'ํฉ์–ด์ง„ ๊ด€์‹ฌ์‚ฌ(Crosscutting concerns)'๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

์ฆ‰, ์‰ฝ๊ฒŒ ์–˜๊ธฐํ•˜๋ฉด ์ด ํด๋ž˜์Šค์˜ ํ•ต์‹ฌ ๋กœ์ง์ด ์•„๋‹ˆ์ง€๋งŒ ๋ฐ˜๋ณตํ•ด์„œ ์“ฐ์ด๋Š” ๊ด€์‹ฌ ๋กœ์ง์ž…๋‹ˆ๋‹ค.

 

 

 

AOP ๊ฐœ๋…

๊ด€์  ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—๋Š” ์“ฐ์ด๋Š” ๊ณ ์œ ์˜ ๊ฐœ๋…๊ณผ ์šฉ์–ด๋ฅผ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. 

 

  • Aspect

    ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ํฌํ•จํ•ด์•ผ ํ•˜๋Š” ๋กœ์ง๊ณผ ํ•ด๋‹น ๋กœ์ง์ด ์–ด๋””์„œ ์‹คํ–‰ํ•ด์•ผ ํ•˜๋Š”์ง€๋ฅผ ์ •์˜ํ•œ ์ฝ”๋“œ

  • Target

    Aspect๋ฅผ ์ ์šฉํ•œ ๊ฐ์ฒด (์ข…์ข… adviced object๋ผ๊ณ ๋„ ํ•จ)

  • Advice

    ํŠน์ • ์กฐ์ธํฌ์ธํŠธ์— ์‹คํ–‰๋˜๋Š” ์ฝ”๋“œ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํด๋ž˜์Šค ๋‚ด ๋ฉ”์„œ๋“œ๋กœ ์ •์˜ (์˜ˆ: before, after)

  • JoinPoint

    ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰ ๊ณผ์ • ์ค‘ Advice๊ฐ€ ์ ์šฉ๋  ์ง€์ 
    ์˜ˆ) ๋ฉ”์„œ๋“œ ๋ช…์‹œ์  ํ˜ธ์ถœ(call), ๋ฉ”์„œ๋“œ ์ฐธ์กฐ ํ˜ธ์ถœ(invoke), ํด๋ž˜์Šค ์ดˆ๊ธฐํ™”, ๊ฐ์ฒด ์ธ์Šคํ„ด์Šค ์ƒ์„ฑํ•  ๋•Œ ๋“ฑ

  • PointCut

    ์–ธ์ œ Advice๋ฅผ ์‹คํ–‰ํ• ์ง€๋ฅผ ์ •์˜ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์กฐ์ธํฌ์ธํŠธ์˜ ๋ชจ์Œ์œผ๋กœ ์œ„์—์„œ ์„ค๋ช…ํ•œ ์˜ˆ์‹œ ์ƒํ™ฉ ์™ธ์— ๋‹ค๋ฅธ ๋ณ„๋„์˜ ์ƒํ™ฉ์„ ๋ช…์‹œํ•  ์ˆ˜ ์žˆ์Œ.
    ์˜ˆ) ํŠน์ • ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ์‹œ, ํŠน์ • ํด๋ž˜์Šค์˜ ๋ณ€์ˆ˜๊ฐ€ ์–ด๋– ํ•œ ๊ฐ’์ผ ๋•Œ ๋“ฑ

  • Weaving

    ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ์˜ ์ ์ ˆํ•œ ์œ„์น˜์— Aspect๋ฅผ ์‚ฝ์ž…ํ•˜๋Š” ๊ณผ์ •.
    ์ผ๋ฐ˜์ ์œผ๋กœ AOP ์†”๋ฃจ์…˜์—์„œ ์ปดํŒŒ์ผ ์‹œ์ ์—์„œ ์œ„๋น™์€ ๋นŒ๋“œ ์‹œ์ ์— ์ˆ˜ํ–‰ํ•˜๊ณ , ๋Ÿฐํƒ€์ž„ ์‹œ์ ์—์„œ๋Š” ๋Ÿฐํƒ€์ž„์— ๋™์ ์œผ๋กœ ์‹คํ–‰.

    AspectJ์—์„œ๋Š” ์œ„ ์‹œ์  ์™ธ์— ๋กœ๋“œ ์‹œ์  ์œ„๋น™(Load-Time Weaving)์ด๋ผ๋Š” ๋งค์ปค๋‹ˆ์ฆ˜ ์ œ๊ณต, 
    ์ด ๋ฐฉ์‹์€ ๋‚ด๋ถ€ JVM Class Loader๊ฐ€ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅผ ๋กœ๋”ฉํ•  ๋•Œ ํ•ด๋‹น ๋ฐ”์ดํŠธ ์ฝ”๋“œ์— ์œ„๋น™ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ด์ฃผ๋Š” ๊ฒƒ์ž„.

  • Introduction

    ์ถ”๊ฐ€ ๋ฉ”์„œ๋“œ๋‚˜ ํ•„๋“œ๋ฅผ ๋„์ž…ํ•ด ๊ฐ์ฒด์˜ ๊ตฌ์กฐ๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๊ณผ์ •. 
    ์ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ช…์‹œ์ ์œผ๋กœ ํŠน์ • ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„ ์—†์ด ๋ชจ๋“  ๊ฐ์ฒด๊ฐ€ ํ•ด๋‹น ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Œ.

 

 

AOP ์‹ค์ „

๊ทธ๋Ÿผ ์ด์ œ AOP๊ฐ€ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ฐ„๋‹จํ•˜๊ฒŒ AOP๋ฅผ ์‚ฌ์šฉํ•ด์„œ Hello World๋ฅผ ๊ตฌํ˜„ํ•ด๋ณด๋„๋ก ํ•˜์ฃ .

 

์ €์ž๋ผ๋Š” ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค๊ณ , ์ €์ž ์ด๋ฆ„์„ ์ถœ๋ ฅํ•˜๋Š” ๋ฉ”์„œ๋“œ์ธ print ๋ฉ”์„œ๋“œ๋ฅผ ๋งŒ๋“ค์–ด์คฌ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์›ํ•˜๋Š” ๊ฒƒ์€ ์ €์ž ์ด๋ฆ„์„ ์ถœ๋ ฅํ•  ๋•Œ ๋ฐ˜๋“œ์‹œ ์ €์ž ์ด๋ฆ„ ์•ž์— "Author"๊ฐ€ ๊ฐ™์ด ์ถœ๋ ฅ๋˜๋„๋ก ํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

์ด๋ฆ„์„ ์ถœ๋ ฅํ•˜๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ์•ž์— "Author"๋ฅผ ์ถœ๋ ฅํ•˜๋„๋ก Advice๋ฅผ ํ•˜๋‚˜ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

 

์ด๋ฅผ ์œ„ํ•ด MethodInterceptor๋ผ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. MethodInterceptor๋Š” ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ JoinPoint์— ์ ์šฉํ•  Around Advice๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ํ‘œ์ค€ AOP Aliance Interface์ž…๋‹ˆ๋‹ค. ์ด์™€ ๋น„์Šทํ•œ ๋…€์„์œผ๋กœ Enhancer๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์—ฌ๊ธฐ์— ๋ฉ”์„œ๋“œ ์ธ์ž๋กœ ์‚ฌ์šฉ๋˜๋Š” MethodInvocation์€ Advice๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ์„ ๋‚˜ํƒ€๋‚ด๋ฉฐ ์ด ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•ด ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ๋˜๋Š” ์‹œ์ ์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ฝ”๋“œ์— ๋ณด๋ฉด retVal(return value)์ด๋ผ๋Š” ๋ณ€์ˆ˜๊ฐ€ ๋ณด์ž…๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ์šฐ๋ฆฌ๊ฐ€ Target ๊ฐ์ฒด์˜ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ–ˆ์„ ๋•Œ ๋ฐ˜ํ™˜๋˜๋Š” ๊ฐ’์œผ๋กœ ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋ฅผ ์ถ”์ ํ•ด๋ณด๋ฉด ์ด ๋ฉ”์„œ๋“œ๊ฐ€ JoinPoint์˜ ๋ฉ”์„œ๋“œ์ž„์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๋”ฐ๋ผ์„œ ์ˆœ์„œ๋Œ€๋กœ ์ง„ํ–‰ํ•ด๋ณด๋ฉด N.K๋ฅผ ๊ฐ„๋‹จํžˆ ์ถœ๋ ฅํ•˜๊ธฐ ์ „, Author๋ฅผ ์ถœ๋ ฅํ•˜๊ณ  ๊ทธ ๋‹ค์Œ์—๋Š” !๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ํ˜•ํƒœ๊ฐ€ ๋˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

๋งˆ์ง€๋ง‰์œผ๋กœ AuthorDecorator ์–ด๋“œ๋ฐ”์ด์Šค๋ฅผ ์ฝ”๋“œ์— ์œ„๋น™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Advice๋ฅผ ์œ„๋น™ํ•  ๋•Œ๋Š” ๋จผ์ € Advice ์ ์šฉ ๋Œ€์ƒ์ธ Author์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ํ•ด๋‹น ์ธ์Šคํ„ด์Šค์˜ ์ ์šฉํ•  ํ”„๋ก์‹œ๋ฅผ ์ƒ์„ฑํ•œ ๋‹ค์Œ ProxyFactory๊ฐ€ AuthorDecorator ์–ด๋“œ๋ฐ”์ด์Šค๋ฅผ ์œ„๋น™ํ•˜๋„๋ก ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

์—ฌ๊ธฐ์„œ ์ค‘์š”ํ•œ ์ ์€ ProxyFactory ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋Œ€์ƒ ๊ฐ์ฒด์˜ ํ”„๋ก์‹œ๋ฅผ ์ƒ์„ฑํ•จ๊ณผ ๋™์‹œ์— ์–ด๋“œ๋ฐ”์ต์Šค๋ฅผ ์œ„๋น™ํ•œ๋‹ค๋Š” ์ ์ด๋ฉฐ Enhancer๋ฅผ ์ด์šฉํ•  ๋•Œ์™€๋Š” ์กฐ๊ธˆ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

 

addAdvice๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ProxyFactory์— AuthorDecorator ์–ด๋“œ๋ฐ”์ด์Šค๋ฅผ ์ „๋‹ฌํ•˜๊ณ  setTarget์„ ํ˜ธ์ถœํ•ด ์œ„๋น™ ๋Œ€์ƒ์„ ์ง€์ •ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

์ถœ๋ ฅ ํ™”๋ฉด์„ ๋ณด๋ฉด ์ˆ˜์ •ํ•˜์ง€ ์•Š์€ Target ๊ฐ์ฒด์—์„œ print()๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ํ‘œ์ค€ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ์ด ์ด๋ค„์ง€๊ณ , ํ”„๋ก์‹œ๋ฅผ ์‚ฌ์šฉํ•ด ํ˜ธ์ถœํ•˜๋ฉด AuthorDecorator์˜ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜์–ด ์•ž์— "Author"๊ฐ€ ํ‘œ์‹œ๋˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

 

์ž์„ธํžˆ ๋ณด๋ฉด ๊ด€์‹ฌ๋œ ๋กœ์ง์„ ์›ํ•˜๋Š” ํด๋ž˜์Šค์— ์ ์šฉํ•˜๊ธฐ ์œ„ํ•ด ํ”„๋ก์‹œ ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ–ˆ๊ณ , ํ”„๋ก์‹œ ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์‹ค์ œ ํด๋ž˜์Šค์—์„œ๋Š” ์–ด๋– ํ•œ ์˜์กด์„ฑ๋„ ๊ฐ–๊ณ  ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

 

๊ทธ์ € ํ•ด๋‹น ๊ด€์‹ฌ ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๋ณ„๋„์˜ ํ”„๋ก์‹œ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด ๊ด€์‹ฌ ๋กœ์ง์„ ์ ์šฉํ•ด ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

ํ”„๋ก์‹œ ๊ฐ์ฒด๊ฐ€ ์ด๋“ค ๋กœ์ง์„ ๋Œ€์‹  ์ถ”๊ฐ€ํ•ด์ค€๋‹ค๋Š” ๊ฒƒ์ธ๊ฐ€์š”?

 

์ •ํ™•ํ•˜๊ฒŒ๋Š” Author๋ผ๋Š” ๊ฐ์ฒด๋ฅผ ์ƒ์†๋ฐ›์•„ ์ƒˆ๋กœ์šด ํ”„๋ก์‹œ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค๊ณ  ํ˜ธ์ถœํ•œ ๋ฉ”์„œ๋“œ๋ฅผ Overridingํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํด๋ž˜์Šค๋ฅผ final class๋กœ ์ •์˜ํ•˜๊ฑฐ๋‚˜ ํ˜ธ์ถœํ•˜๋Š” ๋ฉ”์„œ๋“œ๋ฅผ final๋กœ ์„ ์–ธํ•˜๋Š” ๊ฒฝ์šฐ, IllegalArgumentException์„ ๋ฐœ์ƒํ•˜๊ฑฐ๋‚˜ ์•„์˜ˆ ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

 

 

 

๋งˆ์น˜๋ฉฐ...

Spring์—์„œ ์ œ๊ณตํ•˜๋Š” AOP๋ฅผ ๋‹ค๋ค„๋ณด๊ธฐ ์ „์— ์‹ค์ œ AOP๊ฐ€ ๋ฌด์—‡์ธ์ง€์— ๋Œ€ํ•ด ๊ฐœ๋…์„ ์•Œ์•„๋ดค์Šต๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ Spring AOP๋Š” DI ๊ฐœ๋…์„ ์ด์šฉํ•ด Bean์„ ์ƒ์„ฑํ•˜๋Š” ๋“ฑ ์ผ๋ฐ˜์ ์ธ Java๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ์™€ ์ข€ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์„ ์ด์šฉํ•ฉ๋‹ˆ๋‹ค. 

 

ํ•˜์ง€๋งŒ Spring boot์—์„œ ์ œ๊ณตํ•˜๋Š” AOP๋Š” ์ด๋ณด๋‹ค ๋” ๊ฐ„๋‹จํ•˜๊ฒŒ ์–ด๋…ธํ…Œ์ด์…˜(Annotation)์„ ์ด์šฉํ•ด ๋” ์‰ฝ๊ณ  ๋น ๋ฅด๊ฒŒ AOP๋ฅผ ํ•  ์ˆ˜ ์žˆ๋„๋ก Bean ์ƒ์„ฑ ๋“ฑ์„ ์•„์ฃผ ๊ฐ„์†Œํ™” ํ•˜์˜€์œผ๋ฉฐ ์ด๋Ÿฌํ•œ ํ•จ์ถ•๋œ ๊ฐœ๋…์„ ์ข€ ๋” ์‚ดํŽด๋ณด๊ธฐ ์œ„ํ•ด ์ด ๊ธ€์„ ์ž‘์„ฑํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

 

๋‹ค์Œ ๊ธ€์—์„œ๋Š” Spring AOP์˜ ์•„ํ‚คํ…์ฒ˜์™€ ์ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์ ์–ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

 

 
๋ฐ˜์‘ํ˜•
TAGS.

Tistory Comments