스프링 AOP는 개인적으로
@Around 메서드 실행전후 리턴, 및 예외송출 구간
@AfterThrowing 예외송출 구간
@AfterReturning 무사히 리턴됬을시
@Before 메서드 실행전
정도로 기본적으로 사용해보고
Signature 객체와 ProceedingJoinPoint 를 이용한 로깅에 사용해보았었다.
- joinPoint 는 메서드들에 끼어들 수 있는 지점을 의미한다.
- PointCut 은 명확히 설정한 지점을 의미한다.
- Aspect는 공통기능, Target 은 aop적용대상이다.
- Advice는 Aspect를 품은 모듈이다.
- Spring-AOP는 메서드 실행에서만 JoinPoint를 제공한다.
- 끼워 넣는 것을 Weaving 이라고 한다.
자바에서 사용하는것은 aspect-j와 spring aop 이다.
적용구간은 컴파일, 로드타임, 런타임 이다.
스프링 Spring-aop는 런타임 적용구간을 제공한다.
빈을 만들때에 구동속도에 영향을 미치지만 이후에는 비용이 크게 들지않아 큰 부하를 주지는 않는다.
Aspect-j 가 필요한 순간도 분명 있기 때문에 추후에 aspect-j를 배우며 컴파일, 로드타임에도 적용할 수 있는 것이 좋다.
비즈니스 핵심 로직은 아니지만, 반드시 필요한,
- tx
- logging
- SpringSecurity
등 공통적으로 나타나며, 또한 중복되는 횡단 관심사들(cross-cutting concerns) 을 하나의 Aspect 즉 공통기능으로 두어 Advice로 모듈화하고 JoinPoint 중 PointCut을 지정하여 Weaving aop를 적용한다.
Proxy는 Target객체를 필드로 가지는 겉 껍데기 객체쯔음 으로 생각한다.
자신의 메서드를 실행하고 필드로 엮인 Target의 메서드를 실행한다..하며.
@Order와 AOP의 흐름, ( 시작 -> Target 메서드 완료 -> 역순으로 리턴) 같은 기본적인 것들 을 기억한다.
ProceedingJoinPoing의 아규먼트 추출법..같은 것 말이다.
@EnableAspectjAutoProxy 에노테이션으로 프록시를 만드는 설정을 지정하며, Target이 어느 인터페이스의 구현객체일 경우 구현하고있는 인터페이스를 구현하기 때문에, Target을 Context에서 가져올 수 없다.
이를 위해서는 속성에 ProxyTargetClass 를 true로 주고 상속받은 클래스를 이용해야한다.
Aspect-j 가 필요한 순간도 분명 있기 때문에 추후에 aspect-j를 배우며 컴파일, 로드타임에도 적용할 수 있는 것이 좋다.
여기까지 개요이다.
'springframework' 카테고리의 다른 글
o.s.w IoC 핵심기술. @AOP (0) | 2020.09.19 |
---|---|
o.s.w IoC 핵심기술. 프록시 기반의 AOP (0) | 2020.09.17 |
o.s.w IoC 핵심기술. SpEL (스프링 Expression Language) (0) | 2020.09.17 |
o.s.w IoC 핵심기술. 데이터 바인딩 추상화: Converter와 Formatter (0) | 2020.09.16 |
o.s.w IoC 핵심기술. 데이터 바인딩 추상화: PropertyEditor (0) | 2020.09.15 |