Spring

AOP(Asperct Oriented Programming)- Aspect, Advice, jointpoint, pointcut, weaving

충 민 2022. 10. 26. 17:10

이번 글에서 AOP에 대해서 자세히 살펴보겠다. 

AOP를 보기전에 이전 글을 살펴보고 오세요!

⬇⬇👇 아래 링크 클릭👇 ⬇⬇

AOP 목적 및 장점

  • "중복을 줄여서 적은 코드 수정으로 전체 변경을 할 수 있게하자"라는 목적에서 출발
  • AOP의 필요성을 이해하는 가장 기초가 되는 개념은 '관심의 분리(Separation of Concerns)' 임
  • 핵심관점(업무로직) + 횡단관점(트랜잭션/로그/보안/인증 처리 등) 으로 관심의 분리를 실현
  • 중복되는 코드 제거, 효율적인 유지보수, 높은 생산성, 재활용성 극대화, 변화 수용이 용이 등의 장점

 

Aspect 지향 프로그래밍 핵심 개념

  1. Aspect : Aspect는 트랜잭션 관리와 같이 여러 클래스에 걸쳐 있는 엔터프라이즈 애플리케이션 문제를 구현하는 클래스입니다. Aspect는 Spring XML 설정을 통해 구성된 일반 클래스일 수도 있고 Spring AspectJ 통합을 사용하여 @AspectAnnotation을 사용하여 클래스를 Aspect로 정의할 수도 있습니다.
  2. JoinPoint : 조인 포인트는 메소드 실행, 예외 처리, 객체 변수 값 변경 등과 같은 애플리케이션의 특정 포인트입니다. Spring AOP에서 조인 포인트는 항상 메소드의 실행입니다.
  3. Advice : Advice는 특정 조인 포인트에 대해 취해진 조치입니다. 프로그래밍 측면에서 애플리케이션에서 포인트컷이 일치하는 특정 조인 포인트에 도달하면 실행되는 메소드입니다. Advices는 Struts2 인터셉터 또는 서블릿 필터 로 생각할 수 있습니다 .
  4. Pointcut : Pointcut은 조인 포인트와 매칭되어 어드바이스의 실행 여부를 결정하는 표현식입니다. Pointcut은 조인 포인트와 일치하는 다양한 종류의 표현식을 사용하고 Spring 프레임워크는 AspectJ pointcut 표현식 언어를 사용합니다.
  5. Target Object : Advice가 적용되는 Object입니다. Spring AOP는 런타임 프록시를 사용하여 구현되므로 이 객체는 항상 프록시된 객체입니다. 즉, 런타임에 하위 클래스가 생성되어 대상 메서드가 재정의되고 구성에 따라 어드바이스가 포함됩니다.
  6. AOP 프록시 : Spring AOP 구현은 JDK 동적 프록시를 사용하여 대상 클래스와 어드바이스 호출이 있는 프록시 클래스를 생성합니다. 이를 AOP 프록시 클래스라고 합니다. Spring AOP 프로젝트에서 종속성으로 추가하여 CGLIB 프록시를 사용할 수도 있습니다.
  7. Weaving : Advised Proxy 객체를 생성하기 위해 다른 객체와 aspect를 연결하는 과정이다. 이것은 컴파일 시간, 로드 시간 또는 런타임에 수행할 수 있습니다. Spring AOP는 런타임에 위빙을 수행합니다.

 

AOP 조언 유형

조언의 실행 전략에 따라 다음과 같은 유형이 있습니다.

  • Before Advice : 이러한 Advice는 조인 포인트 메소드가 실행되기 전에 실행됩니다. 어노테이션을 사용 @Before하여 어드바이스 유형을 Before 어드바이스로 표시할 수 있습니다.

 

  • After (finally) Advice : 조인 포인트 메소드 실행이 완료된 후 정상적으로 실행되거나 예외가 발생하여 실행되는 조언입니다. @After어노테이션 을 사용하여 애프터 어드바이스를 생성할 수 있습니다 .

 

  • After Returning Advice : 때때로 우리는 조인 포인트 메소드가 정상적으로 실행될 때만 어드바이스 메소드가 실행되기를 원합니다. 어노테이션을 사용 @AfterReturning하여 어드바이스를 반환한 후로 메소드를 표시할 수 있습니다.

 

  • After Throwing Advice : 이 어드바이스는 조인 포인트 메서드가 예외를 throw할 때만 실행되며, 이를 사용하여 트랜잭션을 선언적으로 롤백할 수 있습니다. 우리는 @AfterThrowing이러한 유형의 조언에 주석을 사용합니다.

 

  • Around Advice: 가장 중요하고 강력한 어드바이스입니다. 이 조언은 조인 포인트 방법을 둘러싸고 있으며 우리는 또한 조인 포인트 방법을 실행할지 여부를 선택할 수 있습니다. 조인 포인트 메소드 실행 전후에 실행되는 어드바이스 코드를 작성할 수 있습니다. 조인 포인트 메소드를 호출하고 메소드가 무언가를 리턴하는 경우 값을 리턴하는 것은 어라운드 어드바이스의 책임입니다. 우리는 @Around어드바이스 메소드를 생성하기 위해 어노테이션을 사용합니다.

 

[출처] https://www.digitalocean.com/community/tutorials/spring-aop-example-tutorial-aspect-advice-pointcut-joinpoint-annotations

 

Spring AOP Example Tutorial - Aspect, Advice, Pointcut, JoinPoint, Annotations, XML Configuration | DigitalOcean

 

www.digitalocean.com