티스토리 뷰

스프링프레임워크

AOP 용어와 어노테이션 정리

잔잔한 물결처럼 2025. 3. 15. 16:35

스프링에서 사용되는 AOP 핵심용어

용어 의미
어드바이스(Advice) 여러 클래스에 걸쳐 있는 관심사를 모듈화한 코드 단위입니다. 로킹이나 트랜잭션 관리 같은 기능을 Aspect 로 구현할 수 있습니다.
조인포인트(JoinPoint) 프로그램 실행 중에 추가적인 기능을 삽입할 수 있는 특정 지점입니다. 어드바이스가 실행되는 구체적인 장소입니다.
포인트컷(Pointcut) 어떤 조인포인트(위치)에서 어드바이스(코드)가 실행될지를 지정하는 표현이나 패턴, 즉 조건입니다.
애스펙트(Aspect) 어드바이스와 포인트컷을 결합한 클래스입니다.
인터셉터(Interceptor) 요청과 응답 사이에서 특정 작업을 수행하는 역할을 합니다. 
타겟(Target) Advice 가 적용되는 대상을 의미합니다.

 

 

어드바이스의 종류

어드바이스 내용 예시
Before Advice
(@Before)
중심적 관심사가 '시작되기 전'에 추가 처리 내용(횡단적 관심사)을 수행합니다. 로그인 확인, 권한 확인 등
After Returning Advice
(@AfterReturning)
중심적 관심사가 '성공적으로 완료된 후' 추가 처리 내용을 수행합니다. 데이터베이스 트랜잭션의 커밋, 성공 메시지 표시 등
After Throwing Advice
(@AfterThrowing)
중심적 관심사에서 '예외 발생 시' 추가 처리 내용을 수행합니다. 오류 로그 기록, 사용자에게 오류 메시지 표시 등
After Advice
(@After)
중심적 관심사가 '종료된 후' 성공 또는 실패 여부와 상관 없이 추가 처리 내용을 수행합니다. 리소스 해제, 후처리 등
Around Advice
(@Around)
중심적 관심사의 '전후'로 추가 처리 내용을 수행합니다. 이 유형은 가장 유연성이 높습니다. 처리시간 측정, 트랜잭션 제어 등

 

 

직접 어드바이스를 작성하는 경우 패키지, 클래스, 메서드 등 어드바이스 삽입 대상을 조건으로 지정할 수 있습니다.

조건을 지정하는 방법으로 포인트컷 식을 사용합니다. 포인트컷 식은 여러 종류가 있지만 여기서는 execution 지시자를 설명합니다.

 

execution 지시자 구문

execution(반환타입 패키지.클래스.메서드(인수))

구분 설명 사용예시
*(별표) 패키지: 임의의 1단계 패키지를 나타냅니다.
메서드 인수: 하나의 임의의 인수를 나타냅니다.
반환값: 임의 유형의 반환값을 나타냅니다.
execution(* *(..)), 
execution(* com.example.service.*.*(..))
..(점 2개) 패키지 : 0개 이상의 임의의 패키지를 나타냅니다.
메서드 인수 : 0개 이상의 임의의 인수를 나타냅니다.
execution(* com.example.service..*.*(..)), 
execution(* *(..))
+(플러스) 클래스 이름 뒤에 작성하면 해당 클래스와 그것의 모든 하위 클래스 및 구현 클래스를 나타냅니다. execution(* com.example.service.BaseService+.*(..))

 

execution 지시어 예시

설명 예시 내용
execution(* com.example.service.DemoService.*(..)) DemoService 클래스의 메서드에 어드바이스를 적용합니다.
execution(* com.example.service.DemoService.select*(..)) DemoService 클래스의 select 로 시작하는 메서드에서 어드바이스를 적용합니다.
execution(String com.example.service.DemoService.*(..)) DemoService 클래스의 반환값이 String 타입인 메서드에 어드바이스를 적용합니다.
execution(* com.example.service.DemoService.*(String, ..)) DemoService 클래스의 첫 번째 인수가 String 타입인 메서드에 어드바이를 적용합니다.
execution(* com.example.service. *.*(..)) 지정된 패키지 아래 모든 클래스의 메서드에 어드바이스를 적용합니다(하위 패키지는 포함하지 않음).
execution(* com.example.service.. *.*(..)) com.example.service 패키지와 그 하위 패키지에 존재하는 모든 클래스의 메서드에 어드바이스를 적용합니다.
execution(* com.example.service.DemoService.*(*)) DemoService 클래스의 인수가 하나의 임의 유형인 메서드에 어드바이스를 적용합니다.

'스프링프레임워크' 카테고리의 다른 글

스프링 MVC 모델, 매핑 설명  (0) 2025.03.16
MVC 모델 알아보기  (0) 2025.03.15
인스턴스에 @Autowired 로 필드 주입하는 방법 3가지  (0) 2025.03.15
bean 과 DI 컨테이너  (1) 2025.03.10
템플릿 엔진  (0) 2025.03.01
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함