Spring AOP

소프트웨어를 개발할때마다 공통적으로 부딪히는 문제들이 아래와 같이 있다. 

  • 로깅
  • 보안/인증
  • 트랜잭션
  • 리소스 풀링
  • 에러 검사
  • 정책 적용
  • 멀티 쓰레드 안전 관리 
  • 데이터 퍼시스턴스 

클래스 또는 컴포넌트로 모듈화하지만 문제들을 어떻게 해결하는것은 또 다른 문제 
일반적으로 문제영역(Problem Domain)은 핵심 관심과 횡단 관심으로 구성된다.

핵심 관심

 관심

패러다임 

모듈 

핵심관심 

OOP 

클래스/컴포넌트/서비스 

횡단관심 

AOP 

 관점

관점지향 프로그램은 관심의 분리를 통해 문제 영역을 핵심 관심과 횡단관심의 독립적인 모듈로 분해하는 프로그래밍 패러다임으로 다음과 같은 이점을 제공한다

  • 관심의 분리 도출
  • 비즈니스 로직 이해도 향상
  • 생산성 향상
  • 비즈니스 코드와 횡단 관심사들 간의 결합성 제거
  • 비즈니스 코드 재사용성 향상
  • 확장 용이
업무 기능과 시스템 기능을 분리하여 코드를 작성함으로써 서로 다른 관심사를 분리할 수 있으며, 업무 로직을 쉽게 이해할 수 있게 됨으로써 생산성의 향상을 가져올 수 있다.  또한 이처럼 업무 기능을 구현하는 코드와 시스템 기능을 구현하는 횡단 관심사들 간의 결합성이 제거되어 업무코드를 재사용하고 확장하기 쉽다

* 관점지향 용어 

 용어

설명 

어드바이스 

관점이 언제, 무엇을 하는지를 정의함. 

조인포인트 

관점이 플러그인되는 애플리케이션의 실행 위치 

포인트컷 

관점이 어드바이스하는 위치(어디서). 조인포인트의 범위를 축소함 

관점 

어드바이스와 포인트컷 결합. 무엇을 언제, 어디서 하는지를 정의함  

엮기 

관점을 대상 객체에 적용시키는 것 프록시 객체 생성 

도입 

기존 클래스에 새로운 메서드가 애트리뷰트를 추가하는것 


튜토리얼스 포인트 부연설명

AOP Terminologies:

Before we start working with AOP, let us become familiar with the AOP concepts and terminology. These terms are not specific to Spring, rather they are related to AOP.

TermsDescription
AspectA module which has a set of APIs providing cross-cutting requirements. For example, a logging module would be called AOP aspect for logging. An application can have any number of aspects depending on the requirement.
Join pointThis represents a point in your application where you can plug-in AOP aspect. You can also say, it is the actual place in the application where an action will be taken using Spring AOP framework.
AdviceThis is the actual action to be taken either before or after the method execution. This is actual piece of code that is invoked during program execution by Spring AOP framework.
PointcutThis is a set of one or more joinpoints where an advice should be executed. You can specify pointcuts using expressions or patterns as we will see in our AOP examples.
IntroductionAn introduction allows you to add new methods or attributes to existing classes.
Target objectThe object being advised by one or more aspects, this object will always be a proxied object. Also referred to as the advised object.
WeavingWeaving is the process of linking aspects with other application types or objects to create an advised object. This can be done at compile time, load time, or at runtime.

아래 그림 설명


프로그램이 실행 과정 속에 여러 개의 조인포인트를 정의할수 있으며, 이둘중 어느위치에 포인트 컷을 지정하여 그 위치에서 어드바이스가 실행되도록 설정한다.


어드바이스란 관점의 실제 구현체로 포인터컷에 삽입되어 동작할 수 있는 코드로서, 관점이 무엇을 언제하는지 정의  


어드바이스 

설명 

before 

메서드가 호출되기 전에 어드바이스 기능이 발생함 

after 

메서드의 실행이 완료된 후 결과와 관계없이 어드바이스 기능이 발생함 

after-returning 

메서드의 실행이 성공적으로 완료된 후 어드바이스 기능이 발생함

after-throwing 

 메서드가 예외를 던진 후에 어드바이스 기능이 발생함 

around 

 메서드가 호출되기 전과 후에 어드바이스 기능이 발생함


조인포인트는 관점이 플러그인 되는 애플리케이션의 실행위치 즉, 관점의 코드가 애플리케이션의 정상적인 흐름 속에 삽입되어 새로운 행위를 추가하는 시점이다. 

  • 호출되는 메서드
  • 예외가 던져지는 위치
  • 필드 값이 수정될때 
관점이 모든 조인 포인트를 어드바이스 할 필요가 없기 때문에 포인트 컷으로 관점이 어드바이스하는 조인포인트의 범위를 축소시킨다. 
* 어드바이스가 관점의 언제 무엇을 하는지를 정의한다면, 포인트컷은 어디서를 정의한다. 포인트컷은 명확한 클래스와 메서드 이름 

Spring AOP 구현 

Spring AOP 설정 

설정을 위해서는 두 개의 모듈을 필요로 한다

  • spring-aop.jar
  • spring-aspects.jar
Maven을 사용하므로 pom.xml 파일에 종속성을 추가하면 된다. 

예제로 로깅 기능을 제공하는 관점을 구현해보다. 각 메서드가 호출될 때 해당 메서드가 호출되었다는 것을 로깅하는 코드를 작성하는 것은 전혀 어렵지는 않지만, 번거로우 일이다.
Spring AOP를 사용하면 쉽게 구현할 수 있고, 또한, 메서드가 추가될 때마다 로기 기능을 구현하지 않아도 새로운 메서드에 대한 로깅 기능을 사용할 수 있다.

- 관점 클래스 정의
Spring AOP는 관점을 자바 클래스로 정의하고, 어드바이스를 관점 클래스의 메서드로 구현한다.



+ Recent posts