Spring AOP

coldrice99·2024년 10월 29일
0
post-thumbnail

Spring AOP란 무엇인가?

AOP(Aspect-Oriented Programming, 관점 지향 프로그래밍)는 공통 관심 사항을 핵심 로직과 분리하여 코드의 가독성과 유지보수성을 높이는 프로그래밍 패러다임입니다. Spring AOP는 이러한 공통 기능을 비즈니스 로직에 깔끔하게 추가하는 데 사용되며, 로깅, 트랜잭션 관리, 인증 등 다양한 부가기능을 효율적으로 구현할 수 있습니다.

위 그림과 같이, AOP는 핵심 기능과 부가기능을 결합하여 코드를 구조화할 수 있습니다. 여기서 부가기능은 어드바이스 형태로 정의됩니다.

1. Spring의 AOP 어노테이션

  • @Aspect: 클래스에 AOP를 설정하는 어노테이션으로, 공통 관심 사항을 정의한 클래스임을 명시합니다.

2. 어드바이스 종류

어드바이스는 부가기능이 핵심 기능과 언제 결합될지를 정의합니다.

  • @Before: 핵심 기능 실행 전에 실행됩니다. (예: 입력값 검증)
  • @After: 핵심 기능이 성공/실패 여부와 상관없이 실행된 후에 수행됩니다.
  • @AfterReturning: 핵심 기능이 성공적으로 완료된 경우에만 수행됩니다.
  • @AfterThrowing: 핵심 기능이 실패하고 예외가 발생한 경우에만 수행됩니다.
  • @Around: 핵심 기능의 전후로 모두 수행되며, @Before@After의 기능을 합친 것입니다.

3. 포인트컷(Pointcut)

포인트컷은 어드바이스가 적용될 대상을 지정하는 표현식입니다. 예를 들어, 특정 클래스나 메서드에만 어드바이스를 적용할 수 있습니다.

  • 포인트컷 표현식 예제:
    @Around("execution(* com.sparta.myselectshop.controller.ProductController.*(..))")
    public Object execute(ProceedingJoinPoint joinPoint) throws Throwable { ... }
    위 예제는 ProductController 클래스의 모든 메서드에 @Around 어드바이스를 적용합니다.

Spring AOP의 동작 방식

위 그림은 AOP가 어떻게 동작하는지를 개념적으로 설명합니다. 원래는 클라이언트가 직접 핵심 기능에 접근하지만, AOP가 적용되면 프록시가 클라이언트와 핵심 기능 사이에 위치해 부가기능을 실행한 뒤 핵심 기능을 수행하게 됩니다.

4. 실제 동작: 시퀀스 다이어그램

AOP 적용 전과 후의 실제 동작을 시퀀스 다이어그램으로 보면 이해가 더 쉬워집니다.

AOP 적용 전

  • DispatcherServletProductControllercreateProduct 메서드를 직접 호출하고, 결과를 반환합니다.

AOP 적용 후

  • AOP가 적용되면 Spring이 AOP 프록시를 삽입하여, 클라이언트는 프록시를 통해 ProductController에 접근하게 됩니다.
  • 프록시가 @Around 어드바이스를 통해 부가기능을 수행하고, 이후 joinPoint.proceed()를 호출하여 핵심 기능을 실행합니다.

이와 같이 AOP는 부가기능을 핵심 기능에 깔끔하게 결합하여, 핵심 기능 코드를 수정하지 않고도 로깅이나 트랜잭션 등의 공통 기능을 손쉽게 추가할 수 있습니다.


profile
서두르지 않으나 쉬지 않고

0개의 댓글