프레임워크(Framework)/Spring Boot

[Spring Boot] 관점 지향 프로그래밍 (AOP)

송기동 2024. 2. 2. 17:51
728x90

AOP (Aspect Oriented Programming)

- 소스 코드상에서 계속 반복해서 사용되는 부분들을 흩어진 관심사(Crosscutting Concerns)라고 한다.

- 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 봄

   → 그 관점을 기준으로 각각 모듈화

- 결국 흩어진 관심사들을 모듈화하고 핵심적인 비즈니스 로직에서 분리하여 재사용하겠다는 것이 AOP의 취지


# 주요 용어

용어 설명
Aspect  흩어진 관심사를 모듈화 한 것
Target  Aspect가 적용될 대상을 의미 (메소드, 클래스 등)
Advice  Aspect의 기능을 정의한 것 (메서드의 실행 전, 후, 예외 처리 발생 시 실행되는 코드)
Join Point Aspect가 적용될 수 있는 시점 (메소드 실행 전, 후 등)
Point Cut Advice를 적용할 메소드의 범위를 지정하는 것을 의미

# 주요 어노테이션

용어 설명
@Aspect  해당 클래스를 Aspect로 사용하겠다는 것을 명시
@Before  대상 “메서드”가 실행되기 전에 Advice를 실행
@AfterReturning 대상 “메서드”가 정상적으로 실행되고 반환된 후에 Advice를 실행
@AfterThrowing 대상 “메서드에서 예외가 발생”했을 때 Advice를 실행
@After 대상 “메서드”가 실행된 후에 Advice를 실행
@Around 대상 “메서드” 실행 전, 후 또는 예외 발생 시에 Advice를 실행

# 스프링 AOP 환경설정 (의존성 추가)

- gradle
implementation 'org.springframework.boot:spring-boot-starter-aop'
- maven
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-aop</artifactId>
</dependency>

# 스프링  AOP 특징

- 스프링 AOP는 프록시 기반의 AOP 구현체이다.

- 프록시 객체를 사용하는 것은 접근제어 및 부가기능을 추가하기 위해서이다.

- 스프링 AOP는 스프링 Bean 에만 적용할 수 있다.

- 순수 자바로 구현되었기 때문에 특별한 컴파일 과정이 필요하지 않다.

 

 

728x90