역시 코드 작성하는 것은 즐겁다 ! 자바보다 스프링 공부가 더 재미있다 !
오늘은 따로 트러블슈팅할 만한 내용이 없어서 배운 개념에 대해 간략하게 정리해볼까한다.
AOP를 언제 왜 사용하는지에 대해서 먼저 고민해보자.
필요한 사항이 무엇이 있을까?
매번 클래스 파일에다가 코드를 하나씩 작성하기에는 너무 힘이 들기 때문에 AOP를 사용하면 한꺼번에 관리하기 편해진다.
AOP(Aspect Oriented Programming)는 핵심 비즈니스 로직과는 분리된 관심사를 모듈화하는 데 중점을 둔다. 스프링 프레임워크에서는 AOP를 통해 공통 기능을 애플리케이션의 여러 부분에 일관되게 적용할 수 있다.
Aspect - 오늘 사용해본 코드
공통 기능을 모듈화한 것으로 로깅이나 트랜잭션 관리 기능
Join Point - 오늘 사용해본 코드
Aspect가 적용될 수 있는 지점으로 메서드 호출, 객체 생성 등
Advice
Aspect가 joinpoint에서 실제로 수행하는 작업으로 Before, After, Around 등 다양한 타입이 있다.
Weaving
Aspect와 비즈니스 로직을 결합하는 과정으로 컴파일 시점, 로드 시점, 런타임 시점 중 어느 시점에든 이루어질 수 있다.
호출 시간을 측정해보았다.
@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");
}
}
}
처음에는 실행했을 경우에는 몇 ms의 시간이 더 걸렸지만, 반복될 수록 더욱 시간이 짧아짐(거의 0 ms)을 확인할 수 있었다.