허원철의 개발 블로그

Spring Boot - AOP 본문

web

Spring Boot - AOP

허원철 2016. 12. 4. 22:23
이번 글은 AOP 에 대한 글입니다.

"Spring 의 장점이 뭐냐 ?" 라고 질문을 한다면 "loC/DI, AOP, 서비스 추상화" 라고 말할 수 있습니다.

AOP 란, 

Aspect Orient Proramming 관점 지향 프로그래밍 이란 뜻으로, 기능을 비지니스 로직과 공통 모듈로 구분한 후에 필요한 시점에 비지니스 로직에 삽입하여 실행되게끔 하도록 하는 것 입니다. 



언제 사용되는가 ? 

- 트랜잭션을 적용하기 위해 사용한 적이 있지만, 그 외에도 몇 가지 있다고 합니다.
① 간단한 메소드 성능 검사
② 트랜잭션 처리
③ 예외 반환
④ 아키텍처 검증
⑤ 기타(로깅, 인증, 권한 등)


구성요소

- JoinPoint      : 모듈의 기능이 삽입되어 동작할 수 있는 실행 가능한 특정 위치
- PointCut       : 어떤 클래스의 어느 JoinPoint를 사용할 것인지를 결정
- Advice         : 각 JoinPoint에 삽입되어져 동작할 수 있는 코드
- Interceptor    : InterceptorChain 방식의 AOP 툴에서 사용하는 용어로 주로 한개의 호출 메소드를 가지는 Advice
- Weaving       : PointCut에 의해서 결정된 JoinPoint에 지정된 Advice를 삽입하는 과정(CrossCutting) 
- Introduction  : 정적인 방식의 AOP 기술
- Aspect         : PointCut + Advice + (Introduction)

어떻게...

 ① Gradle 설정
  - aop 라이브러리를 추가해줍니다.
  - 아직 Test를 할 줄 모르기 때문에.. web을 통해서 확인하기 위해 web 을 추가해줍니다.
dependencies {
	compile('org.springframework.boot:spring-boot-starter-web')
	compile('org.springframework.boot:spring-boot-starter-aop')
	testCompile('org.springframework.boot:spring-boot-starter-test')
} 

② Controller 설정



③ Service 설정



- 이제 설정을 위한 작업은 끝났습니다. 여기서 관점지향 프로그래밍을 하기 위해, Application 과 Component를 추가해줍니다.

④ Application 설정
- @EnableAspectJAutoProxy 를 달아주면 끝납니다.



⑤ Component 설정
- @component 를 달아주고, 추가적으로 @Aspect 를 달아줍니다.



- 관점에는 여러 종류가 있습니다. 메소드 실행 전(Before), 메소드 실행 후(After), 메소드 실행 후 데이터를 반환할 때(AfterReturning), 메소드 후 에러 처리(AfterThrowing), 전체적인 묶음(Around) 입니다.
- execution 은 시점을 적용하기 위한 표현식으로 execution(반환형 패키시명.클래스명.메소드명(어규먼트)) 형태로 나타낼 수 있습니다.

- AfterReturning 에 returning 은 반환될 값을 받아올 어규먼트를 지정해주는 것 입니다.
 
⑥ 결과
- /aop 와 /noAop 를 실행한 결과입니다.



/aop 에서는,

1) 실행전에는 onBeforeHadler() 실행
2) 메소드 실행
3) onAfterHandler() 실행
4) onAfterReturningHandler() 실행 + 반환 데이터 로그 출력

그에 반해, 적용되지 않은 /noAop 에는 반환된 데이터만 출력되고 있습니다.


참고


'web' 카테고리의 다른 글

Spring Boot - Cache  (412) 2016.12.05
Spring Boot - Test  (406) 2016.12.05
Spring Boot - Interceptor  (410) 2016.12.04
Spring Boot - Social (Facebook)  (411) 2016.12.04
Spring Boot - WebSocket  (396) 2016.12.04
Comments