Spring AOP

박병주·2025년 4월 27일
0

Spring

목록 보기
9/9

AOP(Aspect-Oriented Programming)

  • 관점 지향 프로그래밍으로, 객체 지향 프로그래밍(OOP)을 보완하는 프로그래밍 패러다임
  • AOP는 애플리케이션 전반에 걸쳐 사용되는 공통 기능을 모듈화하여 코드의 중복을 줄이고 유지보수성 향상

핵심 관심사와 공통 관심사

AOP에서는 기능을 두 가지 관점으로 나눈다.

  • 핵심 관심사(Core Concern) : 비즈니스 로직같은 주요 기능 부분
  • 공통 관심사(Cross-cutting Concern(횡단 관심사)) : 로깅, 트랜잭션 관리, 보안, 예외 처리 여러 모듈에 공통적으로 적용되는 기능

AOP는 공통 관심사를 별도의 모듈로 분리하여 필요한 위치에 적용함으로써 코드의 중복을 줄이고 핵심 비즈니스 로직에 집중할 수 있도록 한다

자주 사용하던 @Transactional도 내부적으로 Spring AOP 프록시를 활용하여 트랜잭션을 자동으로 시작, 커밋, 롤백 처리

Spring AOP의 주요 구성 요소

1. Aspect(관점)
  • 여러 객체에 공통적으로 적용되는 관심사의 모듈화, 공통 기능을 정의한 코드 블록
  • 주로 부가기능을 모듈화한 것
2. Target(대상)
  • Aspect가 적용되는 객체를 의미
  • 비즈니스 로직이 구현된 클래스 또는 메서드
3. JoinPoint(조인포인트)
  • Aspect가 적용될 수 있는 지점
  • 메서드 실행, 호출, 필드 값 변경 등이 조인포인트가 될 수 있음
  • Spring AOP에서는 메서드 실행 지점만 사용
4. Pointcut(포인트컷)
  • 실제로 Advice가 적용될 JoinPoint를 선별하는 표현식
  • ex) '특정 패키지의 모든 메서드' 와 같이 Advice를 적용할 메서드 지정
5. Advice(어드바이스)
  • Aspect의 실제 구현체, JoinPoint에서 실행되는 코드
  • 메서드 실행 전, 후, 예외 발생 시 등 다양한 시점에 실행
6. Weaving(위빙)
  • Aspect를 대상 객체에 연결하여 Advice가 적용된 객체를 생성하는 과정

Spring AOP의 Advice 종류

1. @Before
  • 대상 메서드가 실행되기 전에 Advice를 실행
2. @AfterReturning
  • 결과를 반환한 후 Advice를 실행, 반환값을 변경할 수는 없지만 접근은 가능
3. @AfterThrowing
  • 대상 메서드에서 예외 발생 시 Advice 실행
4. @After
  • 대상 메서드의 정상 종료 또는 예외 발생 여부와 관계없이 메서드 실행 후 Advice 실행
5. @Around
  • 가장 강력한 Advice로 메서드 호출 전,후로 Advice를 실행할 수 있음.
  • 메서드 실행 여부 제어 가능
  • 반환값 변경, 예외를 다른 예외로 변경 가능

Advice의 실행 순서는 @Around, @Before, @After, @AfterReturning, @AfterThrowing 순

Spring AOP 구현 방식

프록시 기반 AOP

Spring AOP는 프록시 패턴을 기반으로 구현. 스프링은 대상 객체를 감싸는 프록시 객체를 생성하고, 이 프록시를 통해 메서드 호출 시 Advice를 실행.

JDK 다이나믹 프록시
  • 인터페이스 기반의 프록시 생성, 대상 객체가 인터페이스를 구현한 경우 사용
CGLIB 프록시
  • 클래스 상속을 통한 프록시 생성, 대상 객체가 인터페이스를 구현하지 않은 경우 사용

    SPring Boot 3.x 에서는 기본적으로 CGBLI 방식 사용(인터페이스 없이도 AOP 적용 가능)

profile
응애

0개의 댓글