Spring

스프링 AOP

개발자 김마늘 2025. 3. 25. 13:35

Spring에서 AOP(Aspect Oriented Programming)이 필요한 이유와 이를 활용한 실제 애플리케이션 개발 사례를 정리한 글입니다.

 

AOP(Aspect Oriented Programming)

더보기

프로그램의 핵심 기능과 부가 기능(공통 관심사)을 분리하여 모듈화하는 프로그래밍 패러다임이다.

핵심 로직(비즈니스 로직)과 공통 관심사(로깅, 보안, 트랜잭션 등)를 분리해서 코드의 중복을 줄이고, 유지보수를 쉽게 하기 위해서 필요합니다.

 

예시

 

  • 비즈니스 로직: OrderService.placeOrder()
  • 공통 관심사: 메서드 실행 전/후 로그 출력

AOP 적용 전

@Service
public class OrderService {
    public void placeOrder() {
    	System.out.println("📌 메서드 실행 전 - 로그 찍기");
        
        System.out.println("✅ 주문이 완료되었습니다.");
        
        System.out.println("📌 메서드 실행 후 - 로그 찍기");
    }
}

 

메서드 전/후로 로그를 출력해야하는 코드를 작성한다면 로그를 직접 위 아래로 삽입하여 작성해야합니다.

 

문제점

  • 비즈니스 로직에 로그 코드가 섞여 있기 때문에 코드가 지저분하고 유지보수하기 어렵습니다.
  • 다른 서비스에도 같은 로그를 찍으려면 또 작성해야해서 코드 중복이 생깁니다.

AOP 적용 후

@Service
public class OrderService {
    public void placeOrder() {
        System.out.println("✅ 주문이 완료되었습니다.");
    }
}
@Aspect
@Component
public class LoggingAspect {

    @Before("execution(* com.example.demo.OrderService.*(..))")
    public void beforeMethod() {
        System.out.println("📌 메서드 실행 전 - 로그 찍기");
    }

    @After("execution(* com.example.demo.OrderService.*(..))")
    public void afterMethod() {
        System.out.println("📌 메서드 실행 후 - 로그 찍기");
    }
}

위 코드처럼 AOP를 적용하면,

  • 핵심 로직(placeOrder())은 오직 주문 처리에만 집중할 수 있습니다.
  • 공통 기능은 Aspect에서 관리하기 때문에 코드 중복을 제거하고 다른 메서드에도 재사용할 수 있습니다.
  • 로그 로직을 수정할 때는 LoggingAspect만 고치면 되기 때문에 유지보수가 용이합니다.

 

결론

AOP는 핵심 로직과 공통 관심사를 분리하여,

  • 핵심 로직은 본연의 기능에 집중할 수 있게 하고
  • 공통 관심사는 중복 없이 재사용 가능하도록 하여
    유지보수성과 가독성을 높이는 프로그래밍 기법이다.