AOP
AOP (Aspect Oriented Programming; 관점 지향)
- 애플리케이션 전체에서 공통으로 사용되는 기능(advice)을 별도로 생성해놓고 proxy서버가 공통의 기능을 적절하게 삽입하면서 중복 제거하고 일관성을 유지하는 것
- 프로그램의 모듈성과 유지보수성을 높이기 위해 핵심 로직과 부가적인 기능을 분리하여 개발
개발 코드 관점 분리 - 핵심 기능, 공통 기능
관점분리란?
- 어플리케이션 전체에 걸쳐 적용되는 관심사를 코드에서 분리하여 모듈화하는 것
- 핵심 비즈니스 로직과 다른 관심사 분리
AOP 용어
- Aspect(관점)
: 애플리케이션 전반에서 적용되는 공통 관점 사항
: 로깅, 보안, 트랜잭션 등
- Joinpoint
: 핵심기능(메소드), 애플리케이션 실행시 시작되는 지점, Advice를 적용할 지점
: 메서드 호출, 객체 생성, 필드 접근 등
- pointcut
: 여러개의 Joinpoint(메소드)를 하나로 결합한 것
: adivce를 적용하게 될 대상
- Advice
: 공통 기능, Aspect가 Join point에 적용될 때 수행되는 코드(실제 코딩 부분). 부가적인 기능 담당
: 부가적인 기능 수행을 통해 모듈성과 유지보수성 높임
- Weaving
: Aspect를 AOP Proxy Server(애플리케이션 코드)에 적용하는 과정
pointcut + Advice = Advisor
Advice 5가지 종류
- Before Advice : 대상 메서드 실행 전 수행(사전) - DB 연결, 인증/인가
- After Returnning Advice : 대상 메서드 성공적 실행 후 수행
- After throwing Advice : 대상 메서드에 예외 발생 시 수행 - 메세지 출력, 롤백
- After Advice : 대상 메서드 실행 후 성공/예외 상관없이 실행 - 리소스 반환
- Around Advice : 대상 메서드 실행 사전/사후 수행
⭐코드의 재사용성과 유지보수성 향상⭐
AOP 관련 정보 설정
- <aop:config> : AOP 설정정보
- <aop:aspect> : Aspect 설정
- <aop:pointcut> : Pointcut 설정
- <aop:around> : Around Advice 설정
Advice 정의 관련 태그
- <aop:before> : 메서드 실행 전에 적용
- <aop:after-returning> : 메서드가 정상적으로 실행된 후 적용
- <aop:after-throwning> : :메서드가 예외 발생시킬 때 적용
- <aop:after> : 메서드 정상 실행 여부 상관 없이 적용
- <aop:around> : 모든 시점에 적용 가능
AOP적용 방법
1) xml 기반
2) Java 기반(@Annotation
)
execution
- AOP에서 Advice 적용시 메소드 명시할 때 사용
execution([접근제어자] [리턴타입] [패키지].[클래스].[메소드이름]([파라미터]))
* : 임의의 클래스명
.. : 0개 이상의 인자를 가질 수 있음
- Pointcut은 어떤 메소드를 AOP의 적용 대상으로 할지를 결정하는 역할
예시 코드
<aop:config>
<aop:aspect id="aspect" ref="advice">
<aop:around method="around"
pointcut ="execution(public * exam.service.*Impl.hello(..))"/>
</aop:aspect>
</aop:config>
설명
exam.service 패키지 내의 *Impl 클래스들 중 hello 메소드(0개 이상의 인자를 갖는)를 대상으로 AOP를 적용하도록 설정