[Spring] 스프링 스톱워치(Spring StopWatch)로 실행속도 측정하기
Spring StopWatch 테스트
- Spring StopWatch를 사용하지 않는 경우 개발자들은 대개 다음과 같은 방식으로 stop watch 기능을 구현한다. 시스템(System) 클래스에서 밀리세컨드 현재 밀리세컨드 값을 가져와 그 차이를 구하는 방식을 사용한다.
@Test
public void testSimpleTimer() {
long startTime = System.currentTimeMillis();
int data = 0;
for(int i = 0; i < 1_000_000; i++) {
data += 1;
}
long elapsedTime = System.currentTimeMillis() - startTime;
System.out.println(elapsedTime);
}
- 다음 예제는 스프링 프레임워크에서 제공하는 유틸 중 하나인 org.springframework.util.StopWatch에 대한 간단한 테스트다.
public class StopWatchTest {
private StopWatch stopWatch;
@Before
public void setUp() {
stopWatch = new StopWatch("honeymon");
}
/**
* Long 타입과 BigDecimal 타입의 덧셈 소요시간 비교:
*/
@Test
public void testAddLongAndBigDecimal() {
BigDecimal bigDecimal = BigDecimal.valueOf(0, 0);
Long longType = 0L;
stopWatch.start("Long type");
for(int i = 0; i < 1_000_000; i++) {
longType += 1L;
}
stopWatch.stop();
stopWatch.start("BigDecimal type");
for(int i = 0; i < 1_000_000; i++) {
bigDecimal = bigDecimal.add(BigDecimal.ONE);
}
stopWatch.stop();
System.out.println(stopWatch.prettyPrint());
}
}
- 테스트 결과
다음과 같이 총 실행 시간 중 BigDecimal type 계산이 약 60프로를 차지하며 대략 1.5배 정도 더 느리다는 것을 확인할 후 있다.
...
-----------------------------------------
ms % Task name
-----------------------------------------
00017 040% Long type
00025 060% BigDecimal type
+) 티몬의 베스트 탭 api 속도 개선을 위해 오래걸리는 로직을 찾기위해 StopWatch를 사용했다. 메서드 내에서 특정 반복문 등의 시간을 측정할 때 적합하다.
출처: https://java.ihoney.pe.kr/506
Comments