프레임워크(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