AOP
AOP가필요한상황
모든메소드의호출시간을측정하고싶다면?
공통관심사항(cross-cutting concern) vs 핵심관심사항(core concern)
회원가입시간, 회원조회시간을측정하고싶다면?
각 메소드들을 모두 수정한다.
try{} 끝나면 finally {} 수행
문제
회원가입, 회원조회에시간을측정하는기능은핵심관심사항이아니다.
시간을측정하는로직은공통관심사항이다.
시간을측정하는로직과핵심비즈니스의로직이섞여서유지보수가어렵다.
시간을측정하는로직을별도의공통로직으로만들기매우어렵다.
시간을측정하는로직을변경할때모든로직을찾아가면서변경해야한다.
-> AOP 로 해결!
공통 관심 사항과 핵심 관심 사항을 분리한다!
시간 측정 로직을 한군데에 모아 놓고, 원하는 곳에 적용한다.
AOP는 클래스 위에 @Aspect 붙여준다.
joinPoint.proceed() : 다음 메소드로 진행을 해줌
스프링 빈에 등록
@Bean
public TimeTraceAop timeTraceAop(){
return new TimeTraceAop();
}
아니면 클래스위에 @Componenent 해주어도 됨
@Aspect
@Component
public class TimeTraceAop {
@Around("execution(* hello.hellospring..*(..))") //하위 패키지 까지 다 적용
public Object execute(ProceedingJoinPoint joinPoint) throws Throwable {
long start = System.currentTimeMillis();
System.out.println("START: " + joinPoint.toString());
try {
return joinPoint.proceed();
} finally {
long finish = System.currentTimeMillis(); long timeMs = finish - start;
System.out.println("END: " + joinPoint.toString()+ " " + timeMs + "ms");
}
}
}
해결
회원가입, 회원조회등 핵심 관심 사항과 시간을 측정하는 공통 관심 사항을 분리한다.
시간을 측정하는 로직을 별도의 공통 로직으로만들었다.
핵심관심사항을 깔끔하게 유지할수있다.
변경이 필요하면 이 로직만 변경하면 된다.
원하는적용대상을선택할수있다.
피드백 proxy는 왜 쓰는 걸까?
'스프링 > 스프링 입문' 카테고리의 다른 글
6/30 스프링 DB 접근 기술 (2) - JPA (0) | 2022.07.03 |
---|---|
6/30 스프링 DB 접근 기술(1) (0) | 2022.07.02 |
6/30 스프링 입문 - 웹 MVC 개발 (0) | 2022.06.30 |
6/30 스프링 입문 - 스프링 빈과 의존관계 (0) | 2022.06.30 |
6/29 스프링 입문 - 회원관리 예제 (0) | 2022.06.29 |