코딩블로그
Spring 성능 측정해보기 -Spring AOP 적용하기 본문
728x90
문제점
팝콘작 추천하기 기능에서 TMDB API를 사용하는 데 OKHTTP를 Feign Client로 바꾸어 API 성능을 개선을 했었다
이 포스팅에서 다루어보았다
우선 실제로 API 성능 테스트나 모니터링을 직접 해본 적이 없어서 개선했던 API의 성능을 측정해보려고 한다
AOP
- 모든 메소드의 호출 시간을 측정하고 싶다면?
- 공통 관심 사항(cross-cutting concern) vs 핵심관련 사항(core concern)
- 회원 가입 시간, 회원 조회 시간을 측정하고 싶다면?
public void execute(RecommendedPopcornRequest request) throws IOException {
long start = System.currentTimeMillis();
try {
validateMovieId(request.getMovieId());
JsonParser parser = new JsonParser();
JsonElement jsonObject = parser.parse(request.getMovieId());
String movieTypeWithoutQuotes = request.getMovieType().replaceAll("\"", "");
//TODO
String responseString = tmdbClient.getMovieData(movieTypeWithoutQuotes,request.getMovieId(),"Y",tmdb);
changeToObject(responseString,request);
} finally {
long finish = System.currentTimeMillis();
long timeMs = finish - start;
System.out.println("join = " + timeMs + "ms");
}
//RecommendedPopcorn.of(request.getMovieId(),request.getReason())
}
이렇게 원하는 메서드에 하나씩 다 넣어야 된다
-> 복잡하고 귀찮은 작업이다!!
그리고 시간 측정 로직은 핵심 비즈니스 로직이 아니라 공통 로직 사항이다!
그래서 AOP가 필요한 상황이 발생
AOP 적용해보기
@Aspect
@Component
public class TimeTraceAop {
@Around("execution(* com.example.domains.recommendedPopcorn..*(..))")
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");
}
}
}
@Around 어노테이션 안에 AOP를 적용할 패키지 경로를 적어주면 끝
@Component를 적용해줘야지 build할 때 AOP 클래스를 스캔해서 빈으로 알아서 주입해준다
결과
다음 포스팅에서는 이 측정한 시간을 어떻게 개선해야 할 지 더 다루어 보려고 한다
728x90