Spring

AOP (Aspect Oriented Programming)

snail voyager 2020. 5. 12. 23:00
728x90
반응형

프록시 (Proxy)

핵심 기능의 실행은 다른 객체에 위임하고 부가적인 기능을 제공하는 객체

AOP

여러 객체에 공통으로 적용할 수 있는 기능을 분리해서 재사용성을 높여주는 프로그래밍 기법
공통 기능 : 트랜잭션, 로깅, 보안

  • Advice : 언제 공통 관심 기능을 핵심 로직에 적용할 지를 정의

    • Before Advice : 대상 객체의 메서드 호출 전에 실행
    • After Returning Advice : 대상 객체의 메서드가 익셉션 없이 실행된 이후에 실행
    • After Throwing Advice : 대상 객체의 메서드를 실행하는 도중 익셉션이 발생한 경우 실행
    • After Advice : 익셉션 발생 여부 상관없이 대상 객체의 메서드 실행 후 실행
    • Around Advice : 대상 객체의 메시드 실행 전, 후, 익셉션 발생 시점에 실행
  • Joinpoint : Advice를 적용 가능한 지점. 스프링은 메서드 호출에 대한 Joinpoint만 지원

  • Pointcut : Joinpoint의 부분 집합으로서 실제 Advice가 적용되는 Jointpoint

  • Weaving : Advice를 핵심 로직 코드에 적용하는 것

  • Aspect : 여러 객체에 공통으로 적용되는 기능

AOP 구현 방법

  • @EnableAspectJAutoProxy : @Aspect 붙은 Bean 객체를 찾아서 @Pointcut, @Around 설정을 사용
  • Aspect로 사용할 클래스에 @Aspect을 붙인다
  • @Pointcut으로 공통 기능을 적용할 범위를 지정
  • 공통 기능을 구현한 메서드에 @Around 적용
  • @Around 메서드의 ProceedingJoingPoint 파라미터는 프록시 대상 객체의 메서드를 호출할 때 사용
    • proceed() 메서드를 사용해서 실제 대상 객체의 메서드를 호출
728x90
반응형