Print
카테고리: [ Development ]
조회수: 2500

1. 개요

AOP란? Aspect Oriented Programming의 약자이다.

분산되어 있고 중복적인 내용을 묶어주는 기법이라고 할 수 있다.


2. 장점

예를 들어 로깅, 보안, 트랜잭션 등의 공통 기능을 모듈화처리한다.

당연히 중복 코드가 제거되고, 로직의 가독성이 향상되고, 생산성/재사용성이 좋아지고, 변경하기가 수월해진다.


3. 구성요소

그러면 AOP의 구성 요소에 대해 하나하나 살펴볼께요...

3.1. JointPoint

모듈의 특정 위치를 가리킨다.

메소드가 호출되는 부분, 리턴되는 시점, 필드를 억세스 하는 부분, 인스턴스 생성 지점, 예외 시점, 클래스 초기화 시점, 객체 생성 시점 등이 모두 JointPoint가 된다.

3.2. Advice

각 JointPoint에 삽입되어 동작할 수 있는 코드이다.

Advice는 Interceptor로 쓰이기도 하는데 Interceptor는 Interceptor Chain 방식의 AOP 툴에서 사용하는 용어로 주로 하나 이상의 invoke 메소드를 가지는 Advice이다.

before advice, after returning advice, after throwing advice, around advice등 중 하나이다.

3.3. Pointcut

어떤 클래스의 어느 JointPoint를 사용할 것인지 결정하는 선택 기능이다.

AOP라고 해서 모든 모듈의 모든 JointPoint를 사용하는 것은 아니다.

Pointcut은 일종의 JointPoint 설정 툴이다.

Pattern Matching Examples, Pointcut Designators 등이 되는데, AspectJ는 *를 이용한 메소드 시그니처를 사용한다.

3.4. Aspect

Pointcut + Advice의 조합이다.

AspectJ와 같은 자바 기반의 AOP를 사용하면 자바 클래스와 같이 Aspect를 코드로 작성할 수 있다.

AOP에 따라서는 Pointcut과 Advice를 각각의 자바 클래스로 만든 후에 이를 결합한 Advisor 클래스로 만들어 사용할 수도 있다.

3.5. Weaving

Pointcut에 의해 결정된 JointPoint에 Advice를 삽입하는 과정이다.

CrossCutting이라고 부르기도 한다.

Weaving을 구현하는 방법은 다양한데 후처리기를 통한 코드 생성 기술을 사용하거나, 이를 위한 특별한 컴파일러를 사용하곤 한다.

Weaving의 타이밍은 크게 세가지로 나눌 수 있다.