- 업체로부터 화면 띄우는데 1분이 걸린다는 얘기를 들었다.
- 1분? 에이 설마…
- 어떤 화면이냐면 제품 생산 및 재고 현황 상세보기 화면이었다.
0. 문제 상황
제품 생산 및 재고 현황 상세보기 - 250파이 일반 비렛트

- 제품 생산 및 재고 현황 상세보기 페이지는 제품의 다양한 길이와 단중(무게)에 따른 절단 재고수량을 표현하는 페이지이다.
- 해당 페이지는 제품 생산 및 재고 현황 에서 특정 제품 코드를 클릭했을 때 접근할 수 있다.
제품 생산 및 재고 현황

- 그렇다면 실제로 제품코드를 클릭해서 시간이 얼마나 걸리는지 측정해보자
1. 시간 측정
ProductStatusService
- 해당 페이지를 출력하기 위한 데이터를 가져오는 로직을 살펴보자
public ProductStockHistoryRequestDto productStockStatusListById(Integer id, SearchFormDto dto, int page){
PagingUtil pagingUtil = new PagingUtil();
pagingUtil.setPageNo(page);
pagingUtil.setPageSize(1000);
long totalCount = productStockHistoryQueryDao.countAllProductDetailTotalStockList(dto, pagingUtil, id);
// 아래 두개 메소드가 의심이 된다.
List<ProductDetail> productDetailList = productStockHistoryQueryDao.findAllProductDetailTotalStockList(dto, pagingUtil, id, "list");
List<ProductDetail> productDetailList1 = productStockHistoryQueryDao.findAllProductDetailTotalStockStatusList(dto, pagingUtil, id, "list");
pagingUtil.setTotalCount(productDetailList.size());
return ProductStockHistoryRequestDto.builder()
.productDetailList(productDetailList)
.productDetailStockList(productDetailList1)
.pagingUtil(pagingUtil)
.build();
}
- 의심 되는 곳은 두곳이다.
productStockHistoryQueryDao.findAllProductDetailTotalStockList()
productStockHistoryQueryDao.findAllProductDetailTotalStockStatusList()
- 먼저 두 메소드가 실행되는 시간은 몇초가 되는지 확인해보자.
public ProductStockHistoryRequestDto productStockStatusListById(Integer id, SearchFormDto dto, int page){
PagingUtil pagingUtil = new PagingUtil();
pagingUtil.setPageNo(page);
pagingUtil.setPageSize(1000);
long totalCount = productStockHistoryQueryDao.countAllProductDetailTotalStockList(dto, pagingUtil, id);
pagingUtil.setTotalCount((int) totalCount);
long startTime = System.nanoTime();
List<ProductDetail> productDetailList = productStockHistoryQueryDao.findAllProductDetailTotalStockList(dto, pagingUtil, id, "list");
List<ProductDetail> productDetailList1 = productStockHistoryQueryDao.findAllProductDetailTotalStockStatusList(dto, pagingUtil, id, "list");
long endTime = System.nanoTime();
System.out.printf("LoadingTime : %.3f seconds%n", ((double)(endTime-startTime)/1000000000.0));
pagingUtil.setTotalCount(productDetailList.size());
return ProductStockHistoryRequestDto.builder()
.productDetailList(productDetailList)
.productDetailStockList(productDetailList1)
.pagingUtil(pagingUtil)
.build();
}
- 시간을 측정하는 코드를 집어 넣었다.
- 과연 결과는?