AOP(Aspect Oriented Programming) : 관점 지향 프로그래밍

Article

AOP(Aspect Oriented Programming) : 관점 지향 프로그래밍

AOP(Aspect Oriented Programming) : 관점 지향 프로그래밍
Spring - AOP 개념 정리 : http://isstory83.tistory.com/90
나이쓰~!!! 계층형 아키텍처 검증 용 Aspect : http://whiteship.tistory.com/1960

Definition
기능을 핵심 비지니스 로직과 공통 모듈로 구분하고, 핵심 로직에 영향을 미치지 않고 사이사이에 공통 모듈을 효과적으로 잘 끼워넣도록 하는 개발 방법.

Example
보안 인증, 로깅 등의 공통 모듈을 만든 후 코드 밖에서 이 모듈을 비지니스 로직에 삽입하는 것이 AOP적인 개발.
코드 밖에서 설정된다는 것이 핵심
 
AOP가 사용되는 경우
1. 간단한 메서드 성능 검사
 
2. 트랜젝션 처리
 
3. 예외 반환
 
4. 아키텍처 검증
 
5. 기타
5.1. 하이버네이트와 JDBC를 같이 사용할 경우, DB동기화 문제 해결
5.2. 멀티스레드 safety관련하여 작업해야 하는 경우 메서드들에 일괄적으로 lock을 설정하는 aspect
5.3. dead lock 등으로 인한 PermisticLockingFailureException 등의 예외를 만났을 때 재시도 하는 aspect
5.4. Logging, Authentication, Authorization 등
 
 
AOP 구성요소
1. Joinpoint
횡단 관심 모듈의 기능이 삽입되어 동작할 수 있는 실행 가능한 특정 위치
예)
메서드가 호출되는 부분 또는 리턴되는 시점
필드를 액세스하는 부분
인스턴스가 만들어지는 지점
예외가 던져지는 시점
예외 핸들러가 동작하는 위치
클래스가 초기화되는 곳
 
2. Pointcut
어떤 클래스의 어느 join point를 사용할 것인지를 결정하는 선택 기능
AOP가 항상 모든 모듈의 모든 join point를 사용할 것이 아니기 때문에 필요에 따라 사용해야 할 모듈의 특정 join point 를 지정할 필요가 있다.
AOP에서는 포인트컷을 수행할 수 있는 다양한 접근 방법을 제공.
AspectJ에서는 와일드카드를 이용한 메서드 시그니처를 사용.
 
3. Advice or Interceptor
3.1. Advice : 각 joinpoint에 삽입 되어져 동작할 수 있는 코드.
주로 메서드 단위로 구성된 Advise는 pointcut에 의해 결정된 모듈의 joinpoint에서 호출되어 사용.
일반적으로 독립적인 클래스 등으로 구현된 횡단 관심 모듈을 joinpoint의 정보를 참조해서 이용하는 방식으로 작성.
Advice의 종류
Before advice : 메서드 실행전에 적용되는 실행
After returning advice : 메서드가 정상적으로 실행된 후에 실행
After throwing advice : 메서드가 정상적으로 실행된 후에 실행(예외를 던지는 상황은 정상적인 상황에서 제외)
Around advice : 메서드 호출 이전, 이후, 예외 발생 등 모든 시점에서 적용 가능한 Advice를 정의
 
3.2. Interceptor : Interceptor Chain 방식의 AOP 둘에서 사용하는 용어. 주로 한 개의 invoke 메서드를 가지는 Advice
 
 
4. Weaving or CrossCutting
Weaving : Pointcut에 의해 결정된 joinpoint에 지정된 Advice를 삽입하는 과정(크로스컷팅이라 함)
AOP가 기존의 핵심 관심 모듈의 코드에 전혀 영향을 주지 않으면서 필요한 횡단 관심 기능을 추가할 수 있게 해주는 핵심적인 처리과정.
Weaving 처리 방법은 후처리기를 통합 코드생성 기술을 통한 방법, 특별한 컴파일러 사용하는 것, 이미 생성된 클래스의 정적인 바이트코드의 변환 또는 실행 중 클래스로더를 통한 실시간 바이트코드 변환 그리고 다이나믹 프록시를 통한 방법까지 매우 다양.
 
 
5. Introduction or Inter Type 선언
정적인 방식의 AOP 기술
동적인 AOP방식을 사용하면 코드의 joinpoing에 advice를 적용해서 핵심관심 코드의 동작 방식을 변경할 수 있다.
Introduction은 이에 반해 기존의 클래스어ㅏ 이니터페이스에 필요한 메서드나 필드를 추가해서 사용할 수 있게 해주는 방법
OOP에서 말하는 Objectdmㅣ 상속이나 확장과는 다른 방식을 advice 또는 aspect를 이용, 기존 클래스에 없는 인터페이스 등을 다이내믹하게 구현해 줄 수 있다.
 
6. Aspect or Advisor
Aspect : Pointcut(어디에서) + Advice(무엇을 할 것인지) + (필요에 따라 Introduction도 포함)
AspectJ와 같은 자바 언어를 확장한 AOP에서는 마치 자바의 클래스 처럼 애스팩트를 코드로 작성할 수 있다.
AOP tool의 증류에 따라 Advice와 Pointcut을 각각 일반 자바 클래스로 작성하고 이를 결합한 Advisor 클래스를 만들어 사용하는 방법도 있다.
 
 
 
 
AOP의 설정 구조
 

Dev Jinwon's Share
f
t