본문 바로가기
IT/spring

Spring AOP Around 어드바이스 (Around Advice)

by 뉴코딩맨 2023. 6. 21.
Spring 프레임워크는 핵심 비즈니스 로직과 부가 기능을 분리하여 개발할 수 있는 AOP(Aspect-Oriented Programming)를 지원합니다. Around 어드바이스는 AOP의 한 종류로, 메서드 실행 전과 후에 실행되는 보조 기능을 구현하는 데 사용됩니다. Spring의 Around 어드바이스에 대해 소개하고, 사용법과 예시를 설명하겠습니다.
 
 

Around 어드바이스란?

Around 어드바이스는 Spring AOP에서 사용되는 어드바이스의 한 종류로, 핵심 로직의 실행 전후에 실행되는 메서드를 정의하는 역할을 합니다. 메서드의 실행 전후에 필요한 전/후 처리 작업을 수행할 수 있으며, 메서드 호출을 감싸는(wrapper) 형태로 동작합니다. Around 어드바이스는 보통 로깅, 예외 처리, 트랜잭션 관리 등과 같은 부가적인 작업을 수행하는 데 활용됩니다.

 

 

사용법

Spring에서 Around 어드바이스를 구현하려면 다음과 같은 단계를 따릅니다.
  • Around 어드바이스를 구현할 클래스를 작성합니다.
  • @Around 어노테이션을 사용하여 어드바이스로 실행될 메서드를 정의합니다.
  • ProceedingJoinPoint 객체를 이용하여 핵심 로직 실행 전후에 필요한 전/후 처리 작업을 구현합니다.
 
@Component
public class AroundAdviceExample {

    @Around("execution(* com.example.MyService.myMethod(..))")
    public Object aroundAdvice(ProceedingJoinPoint joinPoint) throws Throwable {
        // 메서드 실행 전에 수행할 작업

        Object result = joinPoint.proceed(); // 핵심 로직 실행

        // 메서드 실행 후에 수행할 작업

        return result;
    }
}
 
위의 예시에서는 MyService 클래스의 myMethod 메서드 실행 전후에 aroundAdvice 메서드가 실행됩니다. @Around 어노테이션을 사용하여 실행될 대상 메서드를 지정하고, ProceedingJoinPoint 객체를 통해 메서드 실행 전/후에 필요한 전/후 처리 작업을 구현합니다. 핵심 로직은 joinPoint.proceed()를 호출하여 실행됩니다.
 
 

예시

주문 서비스에서 주문을 처리하는 placeOrder 메서드에 Around 어드바이스를 적용해보겠습니다. 주문 처리 전후에 로깅 작업을 수행하고자 합니다.
 
@Component
public class LoggingAdvice {

    private static final Logger LOGGER = LoggerFactory.getLogger(LoggingAdvice.class);

    @Around("execution(* com.example.OrderService.placeOrder(..))")
    public Object logOrder(ProceedingJoinPoint joinPoint) throws Throwable {
        LOGGER.info("주문 처리를 시작합니다.");

        Object result = joinPoint.proceed(); // 주문 처리 메서드 실행

        LOGGER.info("주문 처리를 완료했습니다.");

        return result;
    }
}
 
위의 예시에서는 OrderService 클래스의 placeOrder 메서드 실행 전후에 logOrder 메서드가 실행됩니다. logOrder 메서드는 주문 처리 작업의 시작과 완료를 로깅하고, joinPoint.proceed()를 호출하여 실제 주문 처리 메서드를 실행합니다.
이렇게 Around 어드바이스를 활용하면 핵심 로직 실행 전후에 필요한 작업을 유연하게 추가할 수 있습니다.
 
 

결론

Spring AOP의 Around 어드바이스를 사용하면 핵심 로직 실행 전후에 필요한 작업을 쉽게 추가할 수 있습니다. 주로 로깅, 예외 처리, 트랜잭션 관리 등과 같은 부가 기능을 구현하는 데 활용됩니다. Around 어드바이스를 통해 코드의 재사용성과 모듈성을 높일 수 있으며, 핵심 로직과 부가 기능을 분리하여 개발할 수 있습니다.
 

댓글