본문 바로가기
IT/spring

스프링 포인트컷(Pointcut)

by 뉴코딩맨 2023. 6. 19.
스프링 AOP(Aspect-Oriented Programming)에서 포인트컷(Pointcut)은 어드바이스(Advice)를 적용할 타겟 메서드를 선택하는 방법을 정의합니다. 포인트컷은 AOP에서 핵심적인 역할을 담당하며, 특정 조건에 맞는 타겟 메서드를 식별하여 어드바이스를 적용합니다. 스프링 포인트컷의 개념과 사용 방법, 그리고 예시를 통해 자세히 알아보겠습니다.
 
 

포인트컷이란?

포인트컷은 AOP에서 어떤 메서드가 어드바이스를 적용받을지를 결정하는 일종의 필터 역할을 합니다. 특정 클래스, 특정 메서드, 특정 패키지 등의 조건을 기반으로 타겟 메서드를 선택합니다. 이를 통해 어드바이스가 적용될 메서드를 선별적으로 지정할 수 있습니다.
 
 

포인트컷 표현식

스프링에서는 포인트컷을 표현하기 위해 다양한 방식을 제공합니다. 가장 일반적인 방법은 AspectJ 스타일의 포인트컷 표현식을 사용하는 것입니다. AspectJ 스타일은 다양한 표현식을 지원하여 세밀한 타겟 메서드의 선택이 가능합니다.
 
포인트컷 표현식은 다음과 같은 구조를 가집니다.
execution(modifiers-pattern? ret-type-pattern declaring-type-pattern? name-pattern(param-pattern) throws-pattern?)
  • modifiers-pattern: 메서드의 접근 제한자를 지정합니다.
  • ret-type-pattern: 메서드의 반환 타입을 지정합니다.
  • declaring-type-pattern: 메서드가 속한 클래스를 지정합니다.
  • name-pattern: 메서드의 이름을 지정합니다.
  • param-pattern: 메서드의 매개변수 타입을 지정합니다.
  • throws-pattern: 메서드가 던지는 예외 타입을 지정합니다.

 

 

포인트컷 예시

다음은 스프링 포인트컷의 예시입니다.
 
@Aspect
@Component
public class LoggingAspect {

    @Before("execution(* com.example.service.*.*(..))")
        public void beforeAdvice() {
        System.out.println("타겟 메서드 실행 전 로그 출력");
    }
}
 
위의 예시에서는 LoggingAspect라는 Aspect 클래스를 정의하고, @Before 어노테이션 내의 포인트컷 표현식인 execution(* com.example.service.*.*(..))을 사용하여 com.example.service 패키지 내의 모든 클래스의 모든 메서드에 대해 어드바이스를 적용하도록 설정했습니다. 따라서 com.example.service 패키지 내의 모든 메서드가 실행되기 전에 "타겟 메서드 실행 전 로그 출력"이라는 메시지가 출력될 것입니다.
 
 

결론

스프링 포인트컷은 AOP에서 어드바이스를 적용할 타겟 메서드를 선택하는 핵심 요소입니다. 포인트컷을 통해 어떤 메서드에 어드바이스를 적용할지 세밀하게 제어할 수 있습니다. AspectJ 스타일의 포인트컷 표현식을 이용하면 다양한 조건에 따라 타겟 메서드를 선택할 수 있으며, 이를 활용하여 핵심 로직과 공통 기능을 분리하고 유연하게 관리할 수 있습니다.
 

댓글