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로 쓰시면 됩니다.
@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 |