-
[Spring] AOP 알아보기 - AOP 개념Spring 2025. 12. 27. 15:55
1. 핵심 AOP 용어 정리
1) Aspect (관점)
- 정의: 여러 클래스에 걸쳐있는 관심사(Concern)의 모듈화입니다.
- 예시: 트랜잭션 관리가 대표적입니다.
- 구현: 일반 클래스(스키마 기반) 또는 @Aspect 어노테이션이 붙은 클래스(@AspectJ 스타일)로 구현합니다.
2) Join point (조인 포인트)
- 정의: 프로그램 실행 중의 특정한 지점입니다. (예: 메서드 호출 시점, 예외 발생 시점 등)
- Spring에서의 특징: 매Spring AOP에서 조인 포인트는 항상 "메서드 실행(Method Execution)" 시점만을 의미합니다. (필드 값 변경 등은 지원하지 않음)
3) Advice (어드바이스)
- 정의: 특정 조인 포인트에서 Aspect가 취하는 실제 "행동(Action)"입니다.
- 동작: "Interceptor(가로채기)" 형태로 모델링되며, 조인 포인트 주변에 인터셉터 체인을 유지합니다.
4) Pointcut (포인트컷)
- 정의: "어떤 조인 포인트에 어드바이스를 적용할지"를 판단하는 필터링 조건(Predicate)입니다.
- 역할: Advice는 포인트컷 표현식과 연결되며, 이 표현식에 매칭되는 조인 포인트(메서드)에서만 실행됩니다.
- Spring: 기본적으로 AspectJ 포인트컷 표현식 언어를 사용합니다.
5) Introduction (인트로덕션)
- 정의: 기존 클래스에 새로운 메서드나 필드를 추가하는 기능입니다.
- 용도: 어떤 객체에게 동적으로 새로운 인터페이스를 구현하게 만들 수 있습니다. (예: 캐싱을 위해 IsModified 인터페이스를 강제로 구현하게 함)
6) Target object (타겟 객체)
- 정의: Advice가 적용되는 원본 객체입니다. "Advised object"라고도 부릅니다.
- Spring에서의 특징: Spring은 런타임 프록시를 사용하므로, 이 객체는 항상 프록시가 감싸고 있는 객체(Proxied object)가 됩니다.
7) AOP Proxy (AOP 프록시)
- 정의: Aspect 계약(Advice 로직 수행 등)을 구현하기 위해 프레임워크가 생성한 객체입니다.
- 종류: Spring에서는 JDK Dynamic Proxy 또는 CGLIB Proxy를 사용합니다.
8) Weaving (위빙)
- 정의: Aspect를 다른 애플리케이션 타입이나 객체와 연결하여, 실제로 Advice가 적용된 객체를 생성하는 과정입니다.
- 시점: 컴파일 타임, 로드 타임, 런타임에 할 수 있습니다.
- Spring: 다른 순수 Java AOP 프레임워크와 마찬가지로 "런타임(Runtime)"에 수행합니다.
2. Advice의 종류 (Spring AOP 지원)
Advice는 "언제" 실행되느냐에 따라 5가지로 나뉩니다.
종류 설명 특징
Before 조인 포인트 이전에 실행 예외를 던지지 않는 한, 다음 단계(메서드 실행)로 넘어가는 것을 막을 수 없음. After returning 조인 포인트가 정상 완료된 후 실행 메서드가 예외 없이 값을 반환했을 때 실행됨. After throwing 메서드가 예외를 던지고 종료될 때 실행 에러 로깅 등에 유용함. After (finally) 무조건 실행 (정상/예외 관계없음) Java의 finally 블록과 유사함. Around 메서드 실행 전후 모두를 감쌈 가장 강력한 Advice. 메서드 실행 여부 결정, 반환값 변경, 예외 처리 등 모든 제어권을 가짐. 3. 공식 문서의 권장 사항
"필요한 기능 중 가장 덜 강력한(Least Powerful) Advice를 사용하세요."
Spring 팀은 Around Advice가 가장 강력하고 일반적이지만, 가능하다면 더 구체적인 Advice를 사용할 것을 권장합니다.
- 이유:
- 실수 방지: Around를 쓰면 proceed() 메서드를 호출해야 원본 메서드가 실행됩니다. 실수로 이를 빼먹으면 코드가 멈출 수 있습니다. 반면 AfterReturning 같은 것은 이런 실수를 할 여지가 없습니다.
- 단순함: 프로그래밍 모델이 더 단순해지고 의도가 명확해집니다.
- 타입 안전성: Object[] 배열을 다루는 대신, 구체적인 타입의 파라미터를 사용할 수 있습니다.
💡 요약: AOP의 핵심 차별점
단순히 메서드를 가로채는 기술(Interception)은 예전부터 있었습니다. 하지만 AOP가 특별한 이유는 "포인트컷(Pointcut)" 때문입니다.
- 포인트컷을 사용하면 객체 지향의 상속 구조와 상관없이, 독립적으로 원하는 메서드들을 골라내어 로직을 적용할 수 있습니다.
- 예: "모든 서비스 계층의 비즈니스 메서드에 트랜잭션을 적용하라"는 규칙을 단 하나의 설정으로 처리 가능합니다.
'Spring' 카테고리의 다른 글
[Spring] AOP 알아보기 - Spring AOP 프록시 매커니즘 (1) 2025.12.27 [Spring] AOP 알아보기 - Spring AOP의 특징 (1) 2025.12.27 [Spring] AOP 알아보기 - AOP 소개 (0) 2025.12.27 [Spring] 서비스(Service) 레이어의 본질적인 역할과 책임 (0) 2025.12.20 [스프링] 안티패턴: 완화된 레이어드 아키텍처 (0) 2025.12.19