프레임워크/Spring Boot

@Aspect

코드몬스터 2025. 12. 14. 17:39
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