728x90
본 내용은 GTP의 도움을 받아 작성했습니다.
이번에 분산 락을 적용하면서 AOP를 사용하게 되었는데, 공부 겸 내용을 정리해보려고 한다.
1. AOP란? (Aspect-Oriented Programming)
AOP는 관점 지향 프로그래밍으로, 비지니스 로직과 공통 관심사를 분리하기 위한 프로그래밍 패러다임.
공통 관심사란?
여러 클래스, 여러 계층에 반복적으로 등장하지만 핵심 비즈니스 로직은 아닌 코드를 말한다.
대표적인 예:
- 로깅(Logging)
- 트랜잭션 처리
- 분산 락
2. 스프링 AOP의 핵심 개념 5가지
1) Aspect
- 공통 기능을 모다운 클래스
- @Aspect로 선언
- 즉, 해당 클래스는 AOP의 Aspect 역할을 한다 라고 스프링에 알려주는 어노테이션
- @Component 또는 @Bean 등록 필요.
@Aspect
@Component
public class LoggingAspect {
}
2) Joint Point
Joint Point란 AOP가 "개입할 수 있는 시점" 또는 "후보 지점"
스프링 AOP에서는 메서드 실행 시점 한 곳 이다.
// Join Point 후보: service 패키지의 모든 메서드
execution(* com.example.service..*(..))
3) Pointcut
어떤 JointPoint에 적용할지 조건을 정의
// Pointcut: 그중 특정 조건
@Around("execution(* com.example.service.RuleService.create*(..))")
| 개념 | 의미 |
| Join Point | “가능한 모든 후보 지점” |
| Pointcut | “그중에서 실제로 적용할 조건” |
4) Advice
언제, 무엇을 실행할지 정의한 코드
- Aspect 안에 실제 실행 로직
| 종료 | 실행 시점 |
| @Before | 메서드 실행 전 |
| @After | 메서드 실행 후 (무조건) |
| @AfterReturning | 정상 종료 후 |
| @AfterThrowing | 예외 발생 시 |
| @Around | 전/후 모두 제어 |
5) Weaving
- Aspect를 실제 객체에 적용하는 과정
- 스프링은 런타임 프록시 방식 사용
3. 스프링 AOP 동작 원리
호출 흐름
Controller
↓
Proxy 객체 (AOP 적용됨)
↓
Aspect (Before / Around 등)
↓
실제 Service 메서드'프레임워크 > Spring Boot' 카테고리의 다른 글
| Spring MVC (0) | 2026.01.19 |
|---|---|
| 의존성 주입(Dependency Injection, DI) (0) | 2025.12.14 |
| @RequiredArgsConstructor (0) | 2025.12.14 |
| 자바 엔터프라이즈 플랫폼 (0) | 2024.12.05 |
| [Spring Framework] 오류 페이지 처리 1탄 (0) | 2023.10.18 |