티스토리 뷰
스프링에서 사용되는 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 |