AOP 포인트컷이란

백엔드&인프라 추종자·2025년 2월 27일

스프링 공부

목록 보기
20/35

포인트컷(Pointcut)이란?

포인트컷(Pointcut)어드바이스(Advice, 부가 기능)를 적용할 대상 메서드를 선정하는 표현식입니다.

🔹 Spring AOP에서 포인트컷의 역할

  • 어떤 메서드에 AOP 기능을 적용할지 결정
  • execution(), within(), @annotation() 같은 표현식을 사용하여 대상 메서드를 필터링

포인트컷 표현식 예제

🔹 1. 특정 메서드 실행 시 AOP 적용 (execution())

@Before("execution(* com.example.service.UserService.getUserById(..))")
public void beforeAdvice() {
    System.out.println("getUserById() 메서드 실행 전에 수행됨");
}

설명:

  • execution(* com.example.service.UserService.getUserById(..))
    UserService 클래스의 getUserById 메서드 실행 전에 AOP 적용

🔹 2. 특정 패키지 내 모든 메서드 실행 시 AOP 적용

@Before("execution(* com.example.service..*(..))")
public void beforeAdvice() {
    System.out.println("service 패키지 내의 메서드 실행 전에 수행됨");
}

설명:

  • com.example.service..*service 패키지 및 하위 패키지의 모든 메서드에 적용

🔹 3. 특정 어노테이션이 붙은 메서드에 AOP 적용 (@annotation())

@Before("@annotation(com.example.annotation.LogExecutionTime)")
public void beforeAdvice() {
    System.out.println("@LogExecutionTime 어노테이션이 붙은 메서드 실행 전에 수행됨");
}

설명:

  • @LogExecutionTime 어노테이션이 붙은 메서드에만 AOP 적용

🔹 4. 특정 클래스 내 모든 메서드에 AOP 적용 (within())

@Before("within(com.example.service.UserService)")
public void beforeAdvice() {
    System.out.println("UserService의 모든 메서드 실행 전에 수행됨");
}

설명:

  • within(com.example.service.UserService)UserService 클래스 내 모든 메서드에 AOP 적용

포인트컷 표현식 정리

표현식설명
execution(* 패키지.클래스.메서드(..))특정 메서드 실행 시 AOP 적용
execution(* 패키지..*(..))특정 패키지 및 하위 패키지의 모든 메서드에 적용
@annotation(어노테이션)특정 어노테이션이 붙은 메서드에 적용
within(클래스명)특정 클래스 내 모든 메서드에 적용
args(타입)특정 타입의 매개변수를 가진 메서드에 적용

결론

  • 포인트컷(Pointcut)AOP를 적용할 메서드를 지정하는 필터 역할
  • Spring AOP에서는 execution(), @annotation(), within() 등의 표현식을 사용하여 메서드를 선택
  • 포인트컷을 잘 활용하면 불필요한 코드 중복 없이, 필요한 메서드에만 AOP 적용 가능 🚀
profile
AI 답변 글을 주로 올립니다.

0개의 댓글