티스토리 뷰

관점 지향 프로그래밍이란 프로그램을 작성할때 구현하고 싶은 프로그램, 부수적 프로그램으로 분리하여 작성하는 것을 의미한다.

   
중심적 관심사 횡단적 관심사
구현하고 싶은 프로그램 부수적 프로그램
대부분 개발자가 직접 작성 프레임워크가 알아서 처리해주는 경우가 많음

스프링 프레임워크에서 제공하는 AOP 기능을 활용하여 중심적 관심사와 횡단적 관심사를 분리하여 프로그램을 쉽게 만들 수 있다.

 

AOP의 용어 정리

용어 내용
어드바이스(Advice) 횡단적 관심사의 구현(메서드), 로그 출력 및 트랜잭션 제어 등입니다.
애스펙트(Aspect) 어드바이스를 정리한 것(클래스)입니다.
조인포인트(JoinPoint) 어드바이스를 중심적은 관심사에서 적용하는 타이밍, 메서드(생성자) 실행 전, 메서드(생성자) 실행 후 등 실행되는 타이밍입니다.
포인트컷(PointCut) 어드바이스를 삽입할 수 있는 위치, 예를 들어, 메서드 이름이 get으로 시작할 떄만 처리하는 조건을 정의할 수 있습니다.
인터셉터(Interceptor) 처리의 제어를 인터셉트하기 위한 구조 또는 프로그램입니다. 스프링 프레임워크에서는 인터셉트라는 메커니즘으로 어드바이스를 중심 관심사에 추가한 것처럼 보이게 합니다.
타깃(Target) 어드바이스가 도입되는 대상을 말합니다.

 

중심적 관심사에 적용하는 어드바이스의 종류

어드바이스 내용 어노테이션
Before Advice 중심적 관심사가 실행되기 이전에 횡단적 관심사를 실행 @Before
After Returning Advice 중심적 관심사가 '정상적으로 종료된 후'에 횡단적 관심사를 실행 @AfterReturning
After Throwing Advice 중심적 관심사로부터 '예외가 던져진 후'로 횡단적 관심사를 실행 @AfterThrowing
After Advice 중심적 관심사의 '실행 후'에 횡단적 관심사를 실행(정상 종료나 예외 종류 등의 결과와 상관없이 실행) @After
Around Advice 중앙적 관심사 호출 전후에 횡단적 관심사를 실행 @Around

 

 

직접 어드바이스를 만드는 경우 패키지, 클래스, 메서드 등 어드바이스 삽입 대상을 조건으로 지정할 수 있다. 포인트컷 표현식으로 execution  지시자를 사용한다.

 

execute(반환값 패키지.클래스.메서드(인수))

 

포인트컷 식은 와일드카드를 이용해여 유연하게 적용 범위를 지정할 수 있다.

 

와일드카드 내용
*(애스터리스크) 임의의 문자열을 나타내고, 패키지를 나타낼 때는 임의의 패키지 한 계층을 나타낸다. 메서드의 인수에서는 한 개의 인수를 나타내 반환값으로 이용할 수 있다.
..(점 두 개) 패키지를 나타내는 경우 0개 이상의 패키지를 나타낸다. 메서드의 인수를 표현하는 경우에는 0개 이상의 임의의 인수를 나타낸다.
+(플러스) 플래스명 뒤에 기술해 클래스와 그 서브클래스 및 구현 클래스 모두를 나타낸다.

 

execution 지시자의 구현 예

구현 예 내용
execution(* com.example.service.ClassName.*(..)) ClassName 클래스의 메서드에 어드바이스를 적용한다
execution(* com.example.service.ClassName.select*(..)) ClassName 클래스의 select 로 시작하는 메서드에 어드바이스를 적용한다
execution(String com.example.service.ClassName.*(..)) ClassName 클래스의 반환값이 String 타입인 메서드에 어드바이스를 적용한다.
execution(* com.example.service.ClassNAme.*(String,..) ClassName 클래스의 첫 번째 인수가 String 타입인 메서드에 어드바이스를 적용한다.
execution(* com.example.service.*.*(..)) 지정된 패키지 아래의 모든 클래스의 메서드에 어드바이스를 적용한다(서브 패키지는 포함하지 않는다)
execution(* com.example.service..*.*(..)) service 패키지 바로 아래와 하위 패키지의 모든 클래스에 어드바이스를 적용한다.
execution(* com.example.service.ClassName.*(*)) ClassName 클래스의 인수가 하나인 매서드에 어드바이스를 적용한다

 

AOP 를 사용하기 위해서는 gradle 의 구성 파일인 build.gradle 에 다음 코드를 추가해야한다

implementation 'org.springframework.boot:spring-boot-starter-aop'   // AOP 추가

 

구분 @Before @After @Around
적용위치 처리전 처리후 처리 전후
인수(파라미터) JointPoint JointPoint ProceedingJointPoint
적용 메서드를 호출하는 방법 X X proceedingJointPoint.proceed();
반환값 void void Object

 

요약

  • AOP 에서는 프로그램을 중심적 관심사와 횡단적 관심사로 구성되어 있다고 생각한다.
  • 중심적 관심사란 구현해야 할 기능을 나타내는 비즈니스 로직을 말한다.
  • 횡단적 관심사란 본직적인 기능은 아니지만 품질이나 유지보수 등의 관점에서 꼭 필요한 기능을 나타내는 프로그램을 말한다.
  • 또한 다수의 클래으세 공통적으로 필요한 처리를 '횡단적 관심사'라고 말한다.
  • AOP 에서는 횡단적 관심사를 분리함으로써 기존 코드를 수정하지 않아도 프로그램 중에 특정 기능을 추가할 수 잇다.
  • 스프링 프레임워크는 다양한 공통 기능을 AOP에서 제공한다

 

 

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

Spring Initializr  (0) 2025.02.27
메타 어노테이션  (0) 2025.02.27
어노테이션 역할  (0) 2025.02.27
스프링 프레임워크의 핵심 기능  (0) 2025.02.26
개발에 사용하는 라이브러리  (0) 2025.02.25
공지사항
최근에 올라온 글
최근에 달린 댓글
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
글 보관함