AOP

1c2·2024년 4월 16일
0

Spring Framework

목록 보기
4/5

AOP(Aspect Oriented Programming) 개요

  • 핵심 관심 사항과 공통(부가) 관심 사항.
    • 핵심 관심 사항(core concern)과 공통 관심 사항(cross-cutting concern)
    • 기존 OOP에서는 공통 관심 사항을 여러 모듈에 적용하는데 있어 중복된 코드를 양상하는 한계가 존재함
    • 이를 해결하기 위해 AOP등장
    • Aspect Oriented Programming은 문제를 해결하기 위한 핵심 관심 사항과 전체에 적용되는 공통 관심 사항을 기준으로 프로그래밍함으로써 공통 모듈을 손쉽게 적용할 수 있게 함.
    • AOP는 application에서의 관심사의 분리 즉, 핵심적인 기능에서 부가적인 기능을 분리한다.
    • 분리한 부가기능을 Aspect라는 독특한 모듈 형태로 만들어서 설계하고 개발하는 방법.
    • OOP를 적용하여도 핵심기능에서 부가기능을 쉽게 분리된 모듈로 작성하기 어려운 문제점을 AOP가 해결.
    • AOP는 부가기능을 어스펙트(Aspect)로 정의하여, 핵심기능에서 부가기능을 분리함으로써 핵심기능을 설계하고 구현할 때 객체지향적인 가치를 지킬 수 있도록 도와주는 개념.

AOP 구조

  • 핵심 관심 사항 : BankingService, AccountService, CustomerService
  • 공통 관심 사항 : Security, Transaction, Other ...

AOP 용어

  • target

    • 핵심 기능을 담고 있는 모듈로 target은 부가기능을 부여할 대상이 됨
  • advice

    • 어느 시점에 어떤 공통 관심 기능을 적용할지 정의 한 것.
      target에 제공할 부가기능을 담고 있는 모듈
  • JoinPoint

    • Aspect가 적용될 수 있는 지점
    • 즉 target 객체가 구현한 인터페이스의 모든 method는 JoinPoint가 됨.
  • Pointcut

    • 공통 관심 사항이 적용될 JoinPoint
    • Advice를 적용할 target의 method를 선별하는 정규 표현식
    • Pointcut 표현식은 execution으로 시작하고 method의 Signature를 비교하는 방법을 주로 이용
  • Aspect

    • 여러 객체에서 공통으로 적용되는 공통 관심 사항
    • AOP의 기본 모듈
    • Aspect = Advice + Pointcut
    • Aspect는 Singleton 형태의 객체로 존재
  • Advisor

    • Advisor = Advice + pointcut
    • Advisor는 Spring SOP에서만 사용되는 특별한 용어
  • Weaving

    • 어떤 Advice를 어떤 Pointcut에 적용시킬 것인지에 대한 설정
    • 즉 Pointcut에 의해서 결정된 타켓의 JoinPoint에 부가기능(Advice)을 삽입하는 과정을 뜻함
    • Weaving은 AOP의 핵심기능(Target)의 코드에 영향을 주지 않으면서 필요한 부가기능을 추가할 수 있도록 해주는 핵심적인 처리과정.

Pointcut 표현식

AOP비교

Spring AOP 특징


  • Spring AOP는 method JoinPoint만 지원
    • Spring은 동적 Proxy를 기반으로 AOP를 구현하므로 method joinPoint만 지원한다.
    • 즉, 핵심기능 (Target)의 method가 호출되는 런타임 시점에만 부가기능(Advice)를 적용할 수 있다.
    • 반면 AspectJ 같은 고급 AOP framework를 사용하면 객체의 생성, 필드값의 조회와 조작, static method 호출 및 포기화 등의 다양한 작업에 부가기능을 적용할 수 있다.

0개의 댓글