본문 바로가기
IT/spring

스프링 AOP (Aspect-Oriented Programming)

by 뉴코딩맨 2023. 6. 17.
스프링 AOP(Aspect-Oriented Programming)은 스프링 프레임워크의 핵심 기능 중 하나로, 애플리케이션에서의 관심사(Concern)를 분리하여 모듈화하는 프로그래밍 기법입니다. 스프링 AOP의 개념과 특징, 그리고 예시를 통해 자세히 알아보겠습니다.
 
 

AOP의 개념

AOP는 관점 지향 프로그래밍의 약자로, 애플리케이션에서 발생하는 공통 관심사를 모듈화하고 핵심 로직과 분리하여 관리합니다. 이를 통해 코드의 재사용성, 가독성, 유지보수성을 향상시킬 수 있습니다. AOP는 주로 메서드 호출, 예외 처리, 로깅, 트랜잭션 관리 등과 같은 공통적인 작업을 처리하는 데 사용됩니다.
 
 

스프링 AOP의 특징

  • Proxy 기반: 스프링 AOP는 프록시 패턴을 기반으로 동작합니다. 핵심 로직을 갖는 객체를 직접 호출하는 대신, 프록시 객체를 통해 간접적으로 호출하고, 프록시 객체는 공통 관심사를 수행합니다.
  • 런타임 위빙: 스프링 AOP는 런타임(Runtime)에 동작하는 AOP로, 대상 객체의 코드를 수정하지 않고도 공통 관심사를 적용할 수 있습니다. 이는 애플리케이션의 유연성을 높여줍니다.
  • Aspect 정의: AOP에서의 관심사는 Aspect라는 모듈로 정의됩니다. 스프링에서는 @Aspect 어노테이션을 사용하여 Aspect를 정의하고, 해당 Aspect를 적용할 지점을 지정할 수 있습니다.

 

 

스프링 AOP 예시

다음은 스프링 AOP를 사용한 예시입니다.
 
@Aspect
@Component
public class LoggingAspect {

    @Before("execution(public * com.example.service.*.*(..))")
    public void beforeAdvice(JoinPoint joinPoint) {
        String methodName = joinPoint.getSignature().getName();
        System.out.println("메서드 실행 전: " + methodName);
    }

    @After("execution(public * com.example.service.*.*(..))")
    public void afterAdvice(JoinPoint joinPoint) {
        String methodName = joinPoint.getSignature().getName();
        System.out.println("메서드 실행 후: " + methodName);
    }
}
 
위의 예시에서는 LoggingAspect라는 Aspect를 정의하고, 메서드 실행 전과 후에 로깅하는 기능을 수행합니다. @Before 어노테이션은 해당 메서드가 실행되기 전에 실행되며, @After 어노테이션은 해당 메서드가 실행된 후에 실행됩니다. 이를 통해 모든 com.example.service 패키지에 있는 메서드들의 실행 로그를 출력할 수 있습니다.

 

 

마무리

스프링 AOP는 애플리케이션의 공통 관심사를 모듈화하여 코드의 재사용성과 유지보수성을 높여주는 강력한 기능입니다. Proxy 기반의 런타임 위빙 방식과 Aspect 정의를 통해 유연하게 관심사를 적용할 수 있습니다. 예시를 통해 스프링 AOP의 활용법을 확인했습니다. 스프링 프레임워크를 사용하는 개발자라면 AOP를 잘 이해하고 적절히 활용하여 효과적인 애플리케이션을 개발할 수 있을 것입니다.
 

'IT > spring' 카테고리의 다른 글

스프링 Before 어드바이스  (0) 2023.06.19
스프링 AOP Join Point  (0) 2023.06.18
스프링 Service 클래스  (0) 2023.06.16
스프링 서비스(service) 인터페이스  (0) 2023.06.16
스프링 Value Object(VO) 클래스  (0) 2023.06.16

댓글