AOP(Aspect Oriented Programming)
- 기능을 핵심 비지니스 로직과 공통 모듈로 구분하고, 핵심 로직에 영향을 미치지 않고 사이사이에 공통 모듈을 효과적으로 잘 끼워넣도록 하는 개발 방법
- 공통 모듈(보안 인증, 로깅 같은 요소)를 만든 후에 코드 밖에서 이 모듈을 비지니스 로직에 삽입
AOP의 구성요소
- JoinPoint(조인 포인트) : 공통 관심 사항이 적용 될 수 있는 지점
- 메소드가 호출되는 부분 또는 리턴되는 시점, 필드를 액세스하는 부분, 인스턴스가 만들어지는 지점, 예외가 던져지는 시점, 예외 핸들러가 동작하는 위치, 클래스가 초기화되는 곳 등이 대표적인 조인포인트이다. 각각의 조인포인트들은 그 안의 횡단 관심의 기능이 AOP에 의해 자동으로 추가되어져서 동작할 수 있는 후보지가 되는 것이다.
- PointcCut(포인트컷) : 어떤 클래스의 어느 조인포인트를 사용할 것인지를 결정하는 선택 기능
- AOP가 항상 모든 조인포인트를 사용하는 것이 아니기 때문에 필요에 따라 사용해야 할 모듈의 특정 조인포인트를 지정할 필요가 있다. 이와 같은 역할을 하는 것이 포인트컷이다.
- Advice(어드바이스) : 공통관심사항(Cross-cutting) 구현 코드 + 적용시점
- 적용 시점 : 핵심로직 실행 전, 후, 정상종료 후, 비정상 종료 후, 전/후 등
- 주로 메소드 단위로 구성되어 있으며, 포인트 컷에 의해 결정된 모듈의 조인포인트에서 호출되어 사용
- Advice의 종류
* Before : 메소드 실행전에 적용되는 실행
* After-returning : 메소드가 정상적으로 실행된 후에 실행(예외를 던지는 상황은 정상적인 상황에서 제외)
* After-throwing : 예외를 발생시킬 때 적용되는 어드바이스 정의
* Around : 메소드 호출 이전, 이후, 예외 발생 등 모든 시점에서 적용가능한 어드바이스 정의
- Weaving(위빙) : JoinPoint의 Advice에 Aspect를 주입하는 코드를 만드는 것(컴파일 시점, 런타임 시점)
- AOP가 기존의 핵심 관심 모듈의 코드에 전혀 영향을 주지 않으면서 필요한 관심 기능을 추가할 수 있게 해주는 핵심적인 처리 과정이다.
- Aspect(애스팩트) : PointCut(어디에서) + Advice(무엇을 할 것인지)
- AspectJ와 같은 자바 언어를 확장한 AOP에서는 마치 자바의 클래스처럼 애스팩트를 코드로 작성할 수 있다.
AOP의 구성
<aop:config>
<aop:pointcut/> : pointcut 설정
<aop:aspect> : aspect 설정
<aop:before/> : 메소드 실행 전
<aop:after-returning/> : 메소드 정상 실행 후
<aop:after-throwing/> : 메소드 예외 발생 시
<aop:after/> : 메소드 실행 후(예외 발생 여부 상관 없음)
<aop:around/> : 모든 시점 적용 가능
</aop:aspect>
</aop:config>
'Wanna be a Programmer > Spring Framework' 카테고리의 다른 글
Spring MVC 구현(Controller, ModelAndView) (0) | 2012.06.28 |
---|---|
Spring MVC 구현(Dispatcher, HandlerMapping) (0) | 2012.06.27 |
Spring MVC (0) | 2012.06.27 |
Annotation(어노테이션) (0) | 2012.06.26 |
스프링 프레임워크 및 DI(Dependency Injection)패턴 (0) | 2012.06.22 |