Pointcut
Pointcut은 AOP(Aspect-Oriented Programming)에서 공통 관심사를 적용할 지점을 정의하는 표현식이다. 즉, 어느 메서드에 Aspect를 적용할지 지정하는 데 사용한다.
Pointcut의 기본 문법
@Pointcut 어노테이션을 사용해 Pointcut을 정의한다.
표현식에는 패키지, 클래스, 메서드 이름을 기반으로 대상 메서드를 설정한다.
@Pointcut("execution(* com.yn.app.biz..*Impl.*(..))")
public void logPointcut() {}
위 코드는 com.yn.app.biz 패키지 내의 모든 Impl 클래스의 메서드에 대해 포인트컷을 정의한 것이다.
주요 Pointcut 예시
로그를 위한 Pointcut
@Pointcut("execution(* com.yn.app.biz..*Impl.*(..))")
public void logPointcut() {}
이 포인트컷은 모든 비즈니스 메서드에 적용된다. 로그를 출력하는 어드바이스에 사용한다.
일부 메서드에대한 Pointcut
@Pointcut("execution(* com.yn.app.biz..*Impl.select*(..))")
public void selectMethods() {}
이 포인트컷은 select로 시작하는 메서드들만 타겟으로 한다.
Pointcut 사용예시
다음 코드는 Pointcut을 활용해 로그와 DB 접근을 처리하는 예시이다.
-> LogAdvice
@Before("PointcutCommon.logPointcut()")
public void printLog() {
System.out.println("공통 관심 - 로그: 비즈니스 메서드 수행 전에 호출됨");
}
이 코드는 logPointcut 포인트컷을 기반으로 비즈니스 메서드가 실행되기 전에 로그를 출력한다.

-> DB 접근 Advice
@Before("PointcutCommon.serviceMethods() && !PointcutCommon.selectAllMethods()")
public void DBaccess() {
System.out.println("DB 접근 발생!");
}
@After("PointcutCommon.cudMethods()")
public void DBupdate() {
System.out.println("DB 변경 완료!");
}
이 코드는 CUD 작업 전후에 DB 접근과 관련된 로직을 처리한다.
글을 작성하면, 콘솔창에 다음과 같은 로그가 찍히게 된다.

Pointcut은 메서드 실행 시점에 공통된 로직을 간결하게 적용할 수 있어, 중복 코드를 제거하고 유지보수성을 높이는 데 유용하다.