AOP

๊ด€์  ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์œผ๋กœ์„œ ๊ณตํ†ต๋œ ๋กœ์ง์„ ์ถ”์ถœํ•˜์—ฌ ๋ฉ”์†Œ๋“œ์˜ ๋‹ค์–‘ํ•œ ์‹œ์ ์— ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค„์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ฝ”๋“œ๋ฅผ ์ค„์—ฌ์ฃผ๊ณ , ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ณตํ†ต ๋กœ์ง์„ ๋ฐฐ์ œํ•˜๊ณ  ํ•ต์‹ฌ ๊ด€์‹ฌ์‚ฌ์— ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค€๋‹ค.

AOP๋ž€?

  • ์ข‹์€ ๊ฐœ๋ฐœํ™˜๊ฒฝ์˜ ์ฃผ์š” ์›์น™์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์—๋งŒ ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค ๋Š” ๊ฒƒ์ด๋‹ค

    • ์ด ๋ชฉํ‘œ๋ฅผ ์œ„ํ•ด ๋ช‡๊ฐ€์ง€ ์ค‘์š”ํ•œ ์›์น™์ด ์žˆ์ง€๋งŒ, ๊ฐ€์žฅ ์‰ฝ๊ฒŒ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ๋ฐ˜๋ณต์ ์ธ ์ฝ”๋“œ์˜ ์ œ๊ฑฐ ๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค

    • ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ์ด๋Ÿฌํ•œ ๋ฐ˜๋ณต์ ์ธ ์ฝ”๋“œ๋ฅผ ์ค„์ด๊ณ , ํ•ต์‹ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์—๋งŒ ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•œ๋‹ค

  • ๋Œ€๋ถ€๋ถ„์˜ ์‹œ์Šคํ…œ์ด ๊ณตํ†ต์ ์œผ๋กœ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ณด์•ˆ, ๋กœ๊ทธ, ํŠธ๋žœ์žญ์…˜๊ณผ ๊ฐ™์ด ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์€ ์•„๋‹ˆ์ง€๋งŒ, ๋ฐ˜๋“œ์‹œ ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”ํ•œ ๋ถ€๋ถ„์„ ์Šคํ”„๋ง์—์„œ๋Š” ํšก๋‹จ ๊ด€์‹ฌ์‚ฌ (cross-concern) ์ด๋ผ๊ณ  ํ•œ๋‹ค

    • ์Šคํ”„๋ง์€ ์ด๋Ÿฌํ•œ ํšก๋‹จ ๊ด€์‹ฌ์‚ฌ๋ฅผ ๋ถ„๋ฆฌํ•ด์„œ ์ œ์ž‘ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค

    • AOP ๋Š” ์ด๋Ÿฌํ•œ ํšก๋‹จ ๊ด€์‹ฌ์‚ฌ๋ฅผ ๋ชจ๋“ˆ๋กœ ๋ถ„๋ฆฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ํŒจ๋Ÿฌ๋‹ค์ž„์ด๋‹ค

  • AOP ๊ธฐ๋ฒ•์—์„œ๋Š” ํ•ต์‹ฌ ๋กœ์ง์„ ๊ตฌํ˜„ํ•œ ์ฝ”๋“œ์—์„œ ๊ณตํ†ต ๊ธฐ๋Šฅ์„ ์ง์ ‘์ ์œผ๋กœ ํ˜ธ์ถœํ•˜์ง€ ์•Š๋Š”๋‹ค

    • ํ•ต์‹ฌ ๋กœ์ง์„ ๊ตฌํ˜„ํ•œ ์ฝ”๋“œ๋ฅผ ์ปดํŒŒ์ผํ•˜๊ฑฐ๋‚˜, ์ปดํŒŒ์ผ ๋œ ํด๋ž˜์Šค๋ฅผ ๋กœ๋”ฉํ•˜๊ฑฐ๋‚˜, ๋กœ๋”ฉํ•œ ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ ํ•  ๋•Œ AOP๊ฐ€ ์ ์šฉ๋˜์–ด ํ•ต์‹ฌ ๋กœ์ง ๊ตฌํ˜„ ์ฝ”๋“œ์•ˆ์— ๊ณตํ†ต ๊ธฐ๋Šฅ์ด ์‚ฝ์ž…๋œ๋‹ค

      • ๊ณตํ†ต ๊ธฐ๋Šฅ์ด ๋ณ€๊ฒฝ๋˜๋”๋ผ๋„ ํ•ต์‹ฌ ๋กœ์ง์„ ๊ตฌํ˜„ํ•œ ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค

AOP์˜ ์žฅ์ 

  1. ๊ฐœ๋ฐœ์ž๋Š” ํ•ต์‹ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์—๋งŒ ์ง‘์ค‘ํ•ด์„œ ์ฝ”๋“œ๋ฅผ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๊ณ ,

  2. ๊ฐ ํ”„๋กœ์ ํŠธ๋งˆ๋‹ค ๋‹ค๋ฅธ ๊ด€์‹ฌ์‚ฌ๋ฅผ ์ ์šฉํ•  ๋•Œ ์ฝ”๋“œ์˜ ์ˆ˜์ •์„ ์ตœ์†Œํ™” ์‹œํ‚ฌ ์ˆ˜ ์žˆ๊ณ ,

  3. ์›ํ•˜๋Š” ๊ด€์‹ฌ์‚ฌ์˜ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์ˆ˜์›”ํ•œ ์ฝ”๋“œ๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค

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