spring에서 자체적으로 제공해주는 StopWatch 라이브러리로 간편하게 로직의 성능을 체크해볼 수 있다.
import org.springframework.util.StopWatch;
StopWatch stopWatch = new StopWatch();
stopWatch.start();
stopWatch.stop();
위와 같이 객체로써 받아오면 끝이다.
그리고 start와 stop으로 시간을 체크할 수 있다.
stopWatch.start("Task1");
stopWatch.stop();
stopWatch.start("Task2");
stopWatch.stop();
stopWatch.start("Task3");
stopWatch.stop();
log.info("stopwatch 결과 {}", stopWatch.prettyPrint());
log.info("stopwatch 총 걸린 시간 {}", stopWatch.getTotalTimeMillis());
위와 같이 stopWatch에 이름을 정해주고 start와 stop을 반복해주면 된다.
그리고 마지막으로 결과와 총 걸린 시간을 찍어서 눈으로 확인해볼 수 있다.
public DeDuplicateTarget getDeduplicateTarget(Object data) throws Exception {
StopWatch stopWatch = new StopWatch();
stopWatch.start("init");
// 기본 설정된 리스트 가져오기
... 중복 인원 가져오는 로직
stopWatch.stop();
stopWatch.start("get duplicatedUserList");
// 제거할 리스트 가져오기
stopWatch.stop();
stopWatch.start("duplicatedUserList process");
stopWatch.start("get push list");
... push list 가져오는 로직
stopWatch.stop();
stopWatch.start("remove reservation user");
... 예약 인원 제거 로직
stopWatch.stop();
stopWatch.start("remove push user");
... 푸시 발송 제거
stopWatch.stop();
stopWatch.start("get result push user");
// 발송될 유저 리스트
stopWatch.stop();
log.info("stopwatch 결과 {}", stopWatch.prettyPrint());
log.info("stopwatch 총 걸린 시간 {}", stopWatch.getTotalTimeMillis());
return DeDuplicateTarget.builder()
.build();
}
결과는 다음과 같이 확인해 볼 수 있다.
현재 duplicated user list를 가져오는데 75프로의 시간이 걸리고 있어 해당 부분을 수정해야 된다는 걸로 볼수 있다.
혹여라도 api의 속도가 너무 느리거나 504 에러가 뜬다면 다음과 같이 로직의 속도를 체크해볼 수 있을것 같다!