[Spring] - ๐ŸŒฑ AOP๋ž€?

army246ยท2022๋…„ 6์›” 9์ผ
0

Spring

๋ชฉ๋ก ๋ณด๊ธฐ
5/7

AOP(Aspect Oriented Programming)

  • AOP๋Š” ๊ด€์‹ฌ ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ, ๊ด€์  ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋ผ๊ณ ๋„ ํ•˜๋ฉฐ, ํšก๋‹จ ๊ด€์‹ฌ์‚ฌ(cross-cutting concern)์˜ ๋ถ„๋ฆฌ๋ฅผ ํ—ˆ์šฉํ•จ์œผ๋กœ์จ ๋ชจ๋“ˆ์„ฑ์„ ์ฆ๊ฐ€์‹œํ‚ค๋Š” ๊ฒƒ์ด ๋ชฉ์ ์ธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋‹ค.
  • OOP๋ฅผ ๋ณด์™„ํ•˜๋Š” ์ˆ˜๋‹จ์œผ๋กœ ํฉ์–ด์ ธ ์žˆ๋Š” Aspect๋ฅผ ๋ชจ๋“ˆํ™” ํ•  ์ˆ˜ ์žˆ๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ๋ฒ•์ด๋‹ค.
  • ์–ด๋–ค ๋กœ์ง์„ ๊ธฐ์ค€์œผ๋กœ ํ•ต์‹ฌ ๊ด€์ , ํšก๋‹จ ๊ด€์ (๋ถ€๊ฐ€์  ๊ด€์ )์œผ๋กœ ๋‚˜๋ˆ„์–ด์„œ ๋ณด๊ณ  ๊ทธ ๊ด€์ ์„ ๊ธฐ์ค€์œผ๋กœ ๊ฐ๊ฐ ๋ชจ๋“ˆํ™”์‹œํ‚ค๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋‹ค.
  • ๋ชจ๋“ˆํ™” : ์–ด๋–ค ๊ณตํ†ต๋œ ๋กœ์ง,๊ธฐ๋Šฅ์„ ํ•˜๋‚˜์˜ ๋‹จ์œ„๋กœ ๋ฌถ๋Š” ๊ฒƒ
  • ํ•ต์‹ฌ ๊ด€์‹ฌ : ์ ์šฉํ•˜๊ณ ์ž ํ•˜๋Š” ํ•ต์‹ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง
  • ํšก๋‹จ ๊ด€์‹ฌ : ํ•ต์‹ฌ ๋กœ์ง์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ๊ณตํ†ต ๋กœ์ง, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ, ๋กœ๊น…, ํŒŒ์ผ ์ž…์ถœ๋ ฅ ๋“ฑ
  • Aspect : ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ•ต์‹ฌ ๊ธฐ๋Šฅ์€ ์•„๋‹ˆ์ง€๋งŒ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์„ฑํ•˜๋Š” ์ค‘์š”ํ•œ ์š”์†Œ์ด๊ณ  ๋ถ€๊ฐ€์ ์ธ ๊ธฐ๋Šฅ์„ ๋‹ด๋‹นํ•˜๋Š” ์š”์†Œ

์ฝ”๋“œ ์ž์ฒด๋ฅผ ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ  ๊ธฐ์กด์˜ ์ฝ”๋“œ์— ์ถ”๊ฐ€ ๋™์ž‘(Advice)๋ฅผ ์ถ”๊ฐ€ํ•ด์„œ ์ˆ˜ํ–‰ํ•˜๊ณ 

AOP ์ฃผ์š” ํ‚ค์›Œ๋“œ

- Taget

  • Aspect๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” Advice๋ฅผ ์ ์šฉํ•  ๋Œ€์ƒ(ํด๋ž˜์Šค, ๋ฉ”์†Œ๋“œ,..)

- Advice

  • ํƒ€๊ฒŸ์— ์ œ๊ณตํ•  ๋ถ€๊ฐ€์  ๊ธฐ๋Šฅ์„ ๋‹ด๊ณ  ์žˆ๋Š” ๋ชจ๋“ˆ (์‹ค์ง์ ์ธ ๋ถ€๊ฐ€๊ธฐ๋Šฅ์„ ๋‹ด๊ณ  ์žˆ๋Š” ๊ตฌํ˜„์ฒด)
  • ํšก๋‹จ ๊ด€์‹ฌ์— ํ•ด๋‹นํ•˜๋Š” ๊ณตํ†ต ๊ธฐ๋Šฅ ์ฝ”๋“œ

- JoinPoint

  • Advice๊ฐ€ ์ ์šฉ๋  ์œ„์น˜, ๋ผ์–ด๋“ค ์ˆ˜ ์žˆ๋Š” ์ง€์ 
  • ํ˜ธ์ถœํ•˜๋Š” ๋ชจ๋“  ๋น„์ฆˆ๋‹ˆ์Šค ๋ฉ”์†Œ๋“œ

- Pointcut

  • ๊ณตํ†ต ๊ธฐ๋Šฅ์ด ์ ์šฉ๋  ๋Œ€์ƒ ๊ฒฐ์ •
  • JoinPoint๊ฐ€ ํ•„ํ„ฐ๋ง ๋˜์–ด ์žˆ๋‹ค.
  • execution์œผ๋กœ ์‹œ์ž‘
๋ฆฌํ„ดํƒ€์ž…ํŒจํ‚ค์ง€ ๊ฒฝ๋กœํด๋ž˜์Šค๋ช…๋ฉ”์†Œ๋“œ๋ช…,๋งค๊ฐœ ๋ณ€์ˆ˜
*com.study.aop..*Impl.*(..)
// Pointcut ์˜ˆ์‹œ
* com.study.aop..*Impl.*(..)

๋ฆฌํ„ดํƒ€์ž…๊ณผ ํŒจํ‚ค์ง€ ๊ฒฝ๋กœ ์‚ฌ์ด๋Š” ๊ณต๋ฐฑ ์ด ๋“ค์–ด๊ฐ„๋‹ค.

- Aspect

  • ํฉ์–ด์ง„ ๊ด€์‹ฌ์‚ฌ๋ฅผ ๋ชจ๋“ˆํ™” (ํ•ต์‹ฌ ๊ธฐ๋Šฅ์— ์ ์šฉ๋  ๊ด€์‹ฌ ๋ชจ๋“ˆ, ๋ถ€๊ฐ€์  ๊ธฐ๋Šฅ์„ ๋ชจ๋“ˆํ™”)
  • ๊ตฌ์ฒด์ ์ธ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•œ Advice ์™€ Advice๋ฅผ ์–ด๋””์— ์ ์šฉํ• ์ง€ ๊ฒฐ์ •ํ•˜๋Š”Pointcut์ด ๊ฒฐํ•ฉ๋˜์–ด ์žˆ๋‹ค.

- Advisor

  • Advice + Pointcut ํ•ฉ์นœ ๊ฒƒ.
  • Aspect์™€ ๋น„์Šทํ•˜๋‹ค.

- Weaving

  • Pointcut์— ์˜ํ•ด์„œ ๊ฒฐ์ •๋œ ํ•ต์‹ฌ ๊ด€์‹ฌ ๋ฉ”์†Œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋  ๋•Œ Advice(๋ถ€๊ฐ€ ๊ธฐ๋Šฅ)์„ ์‚ฝ์ž…,๊ฒฐํ•ฉํ•˜๋Š” ๊ณผ์ •

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

  • XML์„ ์ด์šฉํ•œ AOP ๊ตฌํ˜„

    • Advice ํด๋ž˜์Šค ์ž‘์„ฑ (๋ถ€๊ฐ€ ๊ธฐ๋Šฅ ์ œ๊ณต)

    • XML ์„ค์ • ํŒŒ์ผ์— <aop:config></aop:config> ๋ฅผ ์ด์šฉํ•ด์„œ Aspect ์„ค์ •

    • Advice ์™€ Pointcut ์„ค์ •ํ•œ๋‹ค.

      // Advice ํด๋ž˜์Šค ์ž‘์„ฑ
      
      public class LogAdvice {
      	public void printLog() {
         	System.out.println("[๊ณตํ†ต ๋กœ๊ทธ]");
         }
      }
       // XML ์„ค์ • ํŒŒ์ผ์— ์ถ”๊ฐ€
      
           <aop:config>
              <aop:pointcut id="allPointcut" expression="execution(* com.study.aop..*Impl.*(..))"/>
      
               <aop:aspect ref="log">
                          <aop:before pointcut-ref="allPointcut" method="printLog"/>
              </aop:aspect>
           </aop:config> 
  • <aop:config></aop:config> ๋ธ”๋ก ์•ˆ์—์„œ pointcut, aspect ์ฝ”๋“œ ์ž‘์„ฑ
  • pointcut ์ž‘์„ฑ ์‹œ id๋Š” ์œ ๋‹ˆํฌํ•ด์•ผ ํ•œ๋‹ค. -> ์ค‘๋ณต X

- โ—๏ธ Aspect ์‹คํ–‰ ์‹œ์  (Advice ์‹คํ–‰ ์‹œ์ )

  • Before : ๋น„์ฆˆ๋‹ˆ์Šค ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ๋˜๊ธฐ ์ „์— Advice ์‹คํ–‰ (์ด์ „)
  • After : ๋น„์ฆˆ๋‹ˆ์Šค ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ๋œ ํ›„ ๊ฒฐ๊ณผ์— ๊ด€๊ณ„์—†์ด Advice ์‹คํ–‰ (์ดํ›„) -> ๋ฌด์กฐ๊ฑด ์‹คํ–‰
  • After Returning : ๋น„์ฆˆ๋‹ˆ์Šค ๋ฉ”์†Œ๋“œ๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ๊ฒฐ๊ณผ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ ํ›„์— Advice ์‹คํ–‰ (์ •์ƒ์ ,์„ฑ๊ณต์  ๋ฐ˜ํ™˜ ์ดํ›„)
  • After Throwing : ๋น„์ฆˆ๋‹ˆ์Šค ๋ฉ”์†Œ๋“œ๊ฐ€ ์‹คํ–‰ ์ค‘ ์˜ˆ์™ธ ๋ฐœ์ƒํ•˜๋ฉด Advice ์‹คํ–‰ (์˜ˆ์™ธ ๋ฐœ์ƒ ์ดํ›„)
  • Around : ๋น„์ฆˆ๋‹ˆ์Šค ๋ฉ”์†Œ๋“œ ์‹คํ–‰ ์ „,ํ›„์— ์ฒ˜๋ฆฌ ๋กœ์ง์„ ์‚ฝ์ž… Advice ์‹คํ–‰ (๋น„์ฆˆ๋‹ˆ์Šค ๋ฉ”์†Œ๋“œ ์‹คํ–‰ ์ „ํ›„)
  • @Aspect Annotation์„ ์ด์šฉํ•œ AOP ๊ตฌํ˜„
    • @Aspect ์ด์šฉํ•ด์„œ Aspect ํด๋ž˜์Šค ์ž‘์„ฑ (๋ถ€๊ฐ€ ๊ธฐ๋Šฅ ์ œ๊ณต)
    • Aspect ํด๋ž˜์Šค๋Š” Advice๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฉ”์†Œ๋“œ์™€ Pointcut ํฌํ•จ
    • XML ์„ค์ • ํŒŒ์ผ์— <aop:aspectj-autuproxy / > ์„ค์ •

์ฐธ๊ณ 

profile
์ฒœ์ฒœํžˆ ๊พธ์ค€ํžˆ

0๊ฐœ์˜ ๋Œ“๊ธ€