본문 바로가기
Spring

[Spring] AOP를 이용한 속도 측정

by 자바초보자 2015. 10. 7.
728x90

[Spring] AOP를 이용한 속도 측정

[Spring] AOP를 이용한 속도 측정

Spring

2014/07/09 10:26

전용뷰어 보기
개발을 하다가 보면 가끔 특정 페이지만 특히 느린 경우가 있습니다. 이 페이지가 느린건 알겠는데 도대체 얼마나 느린지 정확한 수치로 보고 싶어졌습니다. 그렇다고 매번 소스에 박는건 아닌것 같아서 디버그 용도로 AOP를 만들었습니다.
@Around("bean(*Controller)")
public Object checkTime(ProceedingJoinPoint joinPoint) throws Throwable {
long start = System.currentTimeMillis();
Object returnPoint = joinPoint.proceed();
long finish = System.currentTimeMillis();
logger.debug("["+ joinPoint.getSignature().getName()+" Turnaround Time] : " + (finish -start) + "ms" );
return returnPoint;
}
원리는 다음과 같습니다.
1. 측정할 타겟을 pointcut을 이용해 선택합니다. 일단 컨트롤러를 대상으로 하기 위해서 *Controller라고 하겠습니다. 이건 bean의 이름이 Contoller로 끝나는 것을 대상으로 합니다.
2. @Around를 써서 들어가는 시점에 시간을 찍고, joinPoint.preceed()로 반환점을 만들어서 나가는 시점에 다시 한번 시간을 찍으면 그 차이가 그 컨트롤러 페이지의 소요 시간이 됩니다. 로그만 보고도 어떤 메소드인지 파악하기 위해서 joinPoint.getSignature().getName()을 이용해서 메소드의 이름까지 찍어두었습니다. 저는 slf4j로 logger를 이용해 찍었지만 System.out.println 같은 걸로 찍어도 무방합니다.
3. pointcut을 *Service로 두거나 *Dao 같은 식으로 만들면 서비스나 DAO단위로도 체크할 수 있어서 세분화 된 속도 측정이 가능합니다. bean의 이름은 자신의 파일에 맞춰서 만드시면 됩니다. 서비스를 ServiceImpl로 끝나게 만들었다면 *ServiceImpl로 쓰시면 됩니다.
728x90

'Spring' 카테고리의 다른 글

전자정부표준프레임워크 암호화 aria  (0) 2015.10.07
spring 2.5 task scheduler  (0) 2015.10.07
spring bean 객체 얻어오기  (0) 2015.10.07
Spring 다국어 변경  (0) 2015.10.07
Spring schedule  (0) 2015.10.07