일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 권한
- Producer
- gdg
- load balancing
- JWT
- JPA
- RabbitMQ
- clean code
- Security
- 스프링
- apache
- tomcat
- g1
- spring boot
- 페이스북
- 리팩토링
- Refactoring
- 시큐리티
- 스프링부트
- OAuth
- assertj
- 클린코드
- 페이징
- GC
- java
- oauth2
- jvm
- 비동기
- 스프링 부트
- Spring
Archives
- Today
- Total
허원철의 개발 블로그
Spring Boot - AOP 본문
이번 글은 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