스프링 AOP 프로그래밍

최범균님의 스프링 프로그래밍 입문 이라는 책을 통해 공부한 부분을 블로그에 정리하고자 합니다. 잘못되거나 부족한 부분이 있으면 언제든 댓글로 가르침 부탁드립니다.

목차

  1. AOP 란?
  2. AOP 주요 용어
  3. AOP 종류
  4. 이해를 위한 간단한 예시

** AOP를 깊게 이해하기 위해서는 프록시 개념에 대해 잘 알아야 하지만, 아직 완벽히 이해하지 못해 이번 포스팅에선 제외하고 다음에 제대로 공부한 후 추가 포스팅하도록 하겠다.

1. AOP 란?

AOP는 Aspect Oriented Programming의 약자로 관점지향 프로그래밍이란 뜻이다.
쉽게 설명하면,

핵심 기능의 코드를 수정하지 않으면서 공통 기능의 구현을 추가하는 것

핵심 기능에 공통 기능을 삽입하는 시점은 3가지이다.

  1. 컴파일 시점
  2. 클래스 로딩 시점
  3. 런타임 시점

이중 스프링이 제공하는 것은 3번 런타임 시점 이고 나머지는 AspectJ같은 도구를 이용해야 한다.

2. AOP 주요 용어

  • Aspect : 공통기능
  • Advice : 공통기능으로서 동작할 메서드의 실행 시점(when)
  • Joinpoint : Advice 적용 가능 지점, 보통 메서드를 의미
  • Pointcut : Joinpoint의 부분 집합. 메서드가 시작되기전, 실행 된 후 .. 등 구체적인 공통기능 적용 지점
  • Weaving : Advice를 핵심 로직 코드에 적용하는 것

3. AOP 종류

  • Before : 대상 메소드 호출 전 공통 기능 실행
  • After Returning : 대상 메서드가 익셉션 없이 실행 후 공통 기능 실행
  • After Throwing : 대상 메서드가 실행 중 익셉션 발생시 공통 기능 실행
  • After : 익셉션 여부와 관계없이 대상 메서드 실행 후 공통 기능 실행
  • Around : 대상 객체의 메서드 실행 전, 후 또는 익셉션 발생 시점에 공통 기능 실행

4. 이해를 위한 간단한 예시

어떻게 사용되는지 개념을 잡기위해 아주 간단하게 예시를 들어보겠다.

@Aspect
public class ExeAspect{

  @Pointcut("execution(public * common..*(..))")
  private void publicTarget(){
  }

  @Around("publicTarget()")
  public Object measure(ProceedingJoinPoint joinPoint) {
    ...
  }
}

위 코드의 의미는

  1. ExeAspect 클래스는 공통기능을 설정하기 위한 클래스이고,
  2. common. 으로 시작하는 경로에 있는 public 메서드를 Pointcut으로 하며 이 포인트컷의 이름을 publicTarget이라고 하고,
  3. publicTarget이라는 포인트컷에 적용할 공통 기능을 measure라고 하며 Around Advice를 적용하겠다.
Published 10 Jun 2019


jaegoon on github