Spring AOP에 대하여

na.ram·2025년 7월 2일

Spring

목록 보기
10/13
post-thumbnail

🔎 Spring AOP?

기본 개념

Spring에서는 Proxy를 기반으로 AOP를 구현합니다.
AOP는 Aspect Oriented Programming의 약자로, 관점 지향 프로그래밍이라고 하며
핵심 관심사(Core Concerns)와 횡단 관심사(Cross-cutting Concerns)를 분리해 가독성과 모듈성을 증진시킬 수 있는 프로그래밍 패러다임입니다.

AOP에서 핵심 관심사는 보통 비즈니스 로직(Target 코드)이고, 횡단 관심사를 트랜잭션 처리, 로깅 등 공통 부가기능(Advice)입니다.
이때 Advice를 Target 코드에 적용하는 과정을 Weaving이라고 하며, Spring AOP는 런타임 시에 프록시 객체를 생성해 적용하는 Runtime Weaving을 하게 됩니다.

Spring AOP 작동 순서

  1. 스프링 컨테이너가 Bean을 생성할 때 AOP 대상인지 분석
  2. Pointcut에 부합하면 Proxy 객체를 생성
  3. Proxy 객체가 실제 Bean처럼 스프링 컨테이너에 등록됨
  4. 클라이언트가 Bean을 호출하면 Proxy가 먼저 호출됨
  5. Proxy가 Advice(부가기능)을 실행하고, 실제 메서드를 호출

Spring AOP는 왜 프록시 방식을 사용할까?

  • Target 객체는 순수 비즈니스 로직에만 집중할 수 있음
  • 트랜잭션/보안 등 횡단 관심사는 분리해 유지보수성이 향상됨
  • 메소드를 호출하면 부가 기능을 수행한 후, 실제 대상에게 메서드 호출을 위임

@Transaction을 예시로 이해하기

데이터베이스 작업 시 Connection 획득, 트랜잭션 시작/종료, Commit/Rollback 같은 코드를 매번 작성한다면 비즈니스 로직이 부가 기능에 묻혀 가독성이 떨어지고, 유지보수성이 낮아집니다. (동일한 코드의 중복, 설정 변경 시 일괄 수정 필요)

이런 문제를 해결하기 위해 Spring은 AOP로 트랜잭션을 추상화했습니다.

@Transactional의 동작

  1. target에 대한 호출이 들어오면 AOP proxy가 이를 가로채서(intercept) 가져옴
  1. AOP Proxy에서 TransactionInterceptor.invoke()를 호출해 트랜잭션 시작

  2. 실제 객체의 메서드를 실행

  3. 결과에 따라 commit 혹은 rollback으로 트랜잭션을 종료


0개의 댓글