관점 지향.
특정 함수 호출 전, 후에 공통적인 처리를 위한 것.
특정 타이밍에서만 원하는 작업을 넣어주고 싶을때 사용한다.
즉. 공통적이지만 모든 곳에 공통적이지 않은 logging->특정 부분에 상세 로깅하고 싶을때. Transaction -> 내부적으로 aop 기법을 사용해서 , 시작과 끝 지점 처리. 인증 -> 특정 영역 사용을 위한 인증.
주로 LOGGING(시간재기나 등등)LOCK,인증 등에서 사용한다.
AOP사용의 단점? 코드 분석을 어렵게 하는 단점이 있고, 보수적으로 사용하는 것은 어떨까 제안 .
Aspect -> 특정 관심사를 모듈화 한것.
Advice- > 실제 적용 기능. 로깅, 트랜잭션등의 기능
join point-> 프로젝트의 진행중, AOP를 넣어줄 수 있는 포인트.
POINTCUT-> 실제로 JOIN POINT 중 AOP가 들어간 포인트들.
ADVICE가 적용된 OBJECT-> TARGET OBJECT. AOP PROXY -> 특정 CLASS에 AOP를 입힐때. 사실은!
클래스에 AOP를 한번 더 씌워주고 적용시키는것. 해당 CLASS가 TARGET OBJECT, 이 덧붙이는 작업이 AOP PROXY.
WEAVING-> ADVICE를 비지니스 로직 위에 붙이는 것.
즉, ADVICE를 POINT CUT들에 적용시키게 되는 것이다.
실제 예시 .
@Aspect
@Component //특정 Aspect를 Bean으로 등록해서 사용.
public class UsefulAspect {
@ PointCut("exection (*transfer(..))" //포인트 컷의 사용식.
public void anyOldTransfer() {}
@ PointCut("exection (public * * transfer(..))" //public 메서드 대상으로 포인트컷
@ PointCut("within(com.xyz.myapp.trading.*})" // 특정 패키지 대상 등 등.. 가능
}
//갑자기 생각난 정보!! 이전 프로젝트 내용에서 로그인 회원가입을 AoP 를 통해서 얼마나 걸리는지 확인해달라는 요청을 받아 진행했던 경험! 이를 기억하며 밑 내용을 보자
Ex) start, stop watch를 통해서, 시작과 끝 간에 걸리는 시간을 확인했던 기록
@Aspect
public class AroundExample {
@Around("com.xyz.myapp.commponpointcuts.businesservice()")
public Object doBasicProfitin(ProceedingJoinPOint pjp ) throws Throwable {
Object retval = pjp.proceed)
//METHOD의 시작 전과 후에 현재 시간, 그 이후 시간을 확인해서 시간을 확인하면, 정확학 동작 시간 CHECK 가능.
+함수의 시작 전에 LOCK을 제거하거나 추가할 수 있는 기능도 추가할 수 있다.
return retVal;
} }
'백엔드 > 스프링 핵심 개념' 카테고리의 다른 글
SpEL (0) | 2023.12.27 |
---|---|
Resource (0) | 2023.12.26 |
Validation, Data binding (1) | 2023.12.26 |
JAVA- spring, spring boot/ BEAN (0) | 2023.12.25 |
API (1) | 2023.12.20 |