로그인, 트랜잭션 관리, 보안등은 공통된 관심사이므로 분리 할 수 있음
-AOP 적용 방법
- 컴파일 시점 : 공통구현기능을 소스에 삽입
- 클래스 로딩 시점 : 클래스를 로딩할때 바이트코드에 부가기능 추가
- 런타임 시점 : 프록시를 이용 , 스프링에서 제공하는 AOP
(런타임 :이미클래스가 컴파일 되어지고 클래스가 로드 되어진고 객체가 만드렁짐
그 객체에 프록시 객체를 만듦 )
JDK Proxy ( interfae based)
CGLib Proxy ( class based )
Dependency 추가
org.springframework.boot
spring-boot-starter-aop
타겟(Target)
핵심 기능을 담고 있는 모듈로서 부가기능을 부여할 대상
조인포인트(Join Point)
어드바이스가 적용될 수 있는 위치
타겟 객체가 구현한 인터페이스의 모든 메서드
포인트 컷(Pointcut)
어드바이스를 적용할 타겟의 메서드를 선별하는 정규표현식
여러 조인트포인트 중에 어디에 부가기능을 부여해줄지 나타내 줌
포인트컷 표현식은 execution으로 시작하고 메서드의 Signature를 비교하는 방법을 주로
이용함
애스펙트(Aspect)
애스펙트 = 어드바이스 + 포인트컷
Spring에서는 Aspect를 빈으로 등록해서 사용합니다.
어드바이스(Advice)
https://mossgreen.github.io/Spring-Certification-Spring-AOP/
AOP 시작하기 8
어드바이스는 타겟의 특정 조인트포인트에 제공할 부가기능
Advice에는 다음 그림과 같이 @Before, @After, @Around., @AfterReturning,
@AfterThrowing 등이 있습니다.
위빙(Weaving)
타겟의 조인 포인트에 어드바이즈를 적용하는 과정
스프링 Aop는 등록된 빈객체에 대해서만 적용가능
(1) 시간에 관련된 어노테이션 TrackTime 생성
(2) 어노테이션이 붙은 곳에 로직이 동작하게 수정
(3) 실제 레포지토리에 어노테이션 붙이기
(4) 테스트
(1)
(2) 테스트
(1) CustomerNamedJdbcRepository에 트랜잭션템플릿를 추가
(2) 템플릿을 적용시키기 위해 transactionTemplate를 빈으로등록 후 테스트
-이전에 TransactionManager/ TransactionTempelete를 이용해 API 호출해 가면서 구현