@LogExecutionTime으로 메소더 처리 시간 로깅하기
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface LogExecutionTime { }
@Component
@Aspect
public class LogAspect {
Logger logger = LoggerFactory.getLogger(LogAspect.class);
@Around("@annotation(LogExecutionTime)")
public Object logExecutionTime(ProceedingJoinPoint joinPoint) throws Throwable {
StopWatch stopWatch = new StopWatch();
stopWatch.start();
Object proceed = joinPoint.proceed();
stopWatch.stop();
logger.info(stopWatch.prettyPrint());
return proceed;
}
}
이렇게 하면,
@LogExecutionTime이 붙은 클래스는 Aspect를 적용할 타겟이 되어 성능 측정을 할 수 있다.
이외에도 AOP는 공부할게 정말 많으니 꾸준히 공부해보자.