aop

FRAMEWORK/Spring 2015. 8. 23. 14:29 |

aop

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

공통 모듈(보안,로깅 등) 만든후 코드밖에서 이 모듈을 비스니스로직에 삽입하는게 바로 aop 적인 개발

코드 밖에 설정된다는 것이 핵심!


aop 가 사용되는 경우

-간단한 메소드 성능 검사

-트랜잭션 처리

-예외 반환

-아키텍쳐검증

-동기화문제

-락 설정

-예외를 만났을때 재시도하는 애스텍트

-로깅,인증,권한


aop의 구성요소

-조인포인트(joinPoint) : 횡단 관심 모듈의 기능이 삽입되어 동작할 수 있는 실행 가능한 특정위치

-포인트컷(pointCut): 어떤 클래스의 어느 조인토인트를 사용할 것인지를 결정하는 선택 기능

-어드바이스 또는 인터셉터 : 어드바이스는 각 조인포인트에 삽입되어져 동작할 수 있는 코드

인터셉터 : 인터셉터 제인 방식의 aop 툴에서 사용하는 용어로 주로 한 개의 invoke메소드를 가지는

어드바이스의 종류

before advice : 메소드 실행전에 적용되는 실행

after returning advice : 메서드가 정상적으로 실행된 후에 실행(예외를 던지는 상황은 정상적인 상황에서 제외)

after throwing advice : 예외를 발생시킬 때 적용되는 Advice를 정의

Around advice : 메서드 호출 이전, 이후, 예외 발생 등 모든시점에서 적용 가능한 advice 를 정의


-위빙(weaving) 또는 크로스컷팅(crossCutting)

:포인트컷에 의해서 결정된 조인포인트에 지정된 어드바이스를 삽입하는 과정(다른 말로 크로스컷팅)

위빙은 aop가 기존의 핵심 관심 모듈의 코드에 전혀 영향을 주지 않으면서 필요한 횡단 관심 기능 추가할 수 있게 해주는 핵심적인 처리과정이다.

위빙을 처리하는 방법은 후처리기를 통한 코드생성 기술을 통한 방법부터 특별한 컴파일러 사용하는 것

이미 생성된 클래스의 정적인 바이트코드의 변환 또는 실행 중 클래스로더를 통한 실시간 바이트코드 변환

그리고 다이내믹 프록시를 통한 방법까지 매우 다양


-인트로덕션 또는 인터타입선언

:인트로덕션은 정적인 방식의 aop기술

동적인 aop장식을 사용하면 코드의 조인포인트에 어드바이스를 적용해서 핵심관심토드의 동작을 변경할수 없음

인트로덕션은 이에 반해서 기존의 클래스와 인터페이스에 필요한 메소드나 필드를 추가해서 사용할 수있음

oop에서 말하는 오브젝트의 상속이나 확장과는 다른 방식으로 어드바이스 또는 애스팩스를 이용해서

기존클래스에 없는 인터페이스 등을 다이내믹하게 구현해 줄 수 있다.


-애스팩트(aspect)

: 포인트 컷(어디에서) +어드바이스(무엇을할지)+(필요에따라 인트로덕션도포함)

aspect J 와 같은 자바 언어를 확장한 aop에서는 마치 자바의 클래스처럼 에스팩트를 코드로 작성할 수 있다.aop 툴의 종류에 따다서 어드바이와 포인트컷을 각각 일반 자바 클래스로 작성하고 이를 결합한 어드바이저 클래스를 만들어서 사용하는 방법도 있음.



aop 설정 구조


<aop:config>

<aop:pointcut>  :pointcout 설정

<aop:aspect> : aspect 설정

<aop:before> : method 실행 전

<aop:after-returning /> : method 정상 실행 후

<aop:after-throwing /> : method 예외 발생 시

<aop:after /> : method 실행 후 (예외 발생 예부 상관 없음)

<aop:around /> : 모든 시점 적용 가능

</aop:before>

</aop:aspect>

</aop:config>




Posted by 양승아
: