Slice로 받는 것에 대하여Slice를 사용하는 것은 나쁘지 않은 선택이지만, 우리 상황에서는 List가 더 효율적이다.
Page<T>
count 쿼리가 무조건 추가로 나간다.Slice<T>
count 쿼리가 안 나간다.limit + 1개를 조회한다.
(ex. 10개 요청하면 11개를 가져와서 11번째가 있으면 hasNext=true로 판단).List<T>
limit)만큼만 가져온다. @Scheduled(fixedDelay = 60_000)
public void autoCancelExpiredOrders() {
while (true) {
List<Order> expiredOrders = orderService.findExpiredOrders(LocalDateTime.now());
if (expiredOrders.isEmpty()) {
break;
}
purchaseFacade.cancelInBatch(expiredOrders);
}
}
우리는 while 루프를 돌면서 "조회된 데이터가 없으면 종료"하는 로직을 사용한다.
굳이 Slice.hasNext()를 통해 다음 페이지 존재 여부를 알 필요가 없다. 조회된 데이터가 없을 때 까지 수행된다.
따라서 굳이 limit + 1을 조회하는 오버헤드 없이, 깔끔하게 List로 받아 처리한다.