개발

Spring JPA paging에서 Slice

coens 2024. 8. 6. 17:31

- Pagable을 하면 필수적으로 count query를 만들므로, 때로는 성능상 손해가 된다.

- Spring Data JPA에서 제공하는 Slice 인터페이스를 사용하면 된다.. 이 방법을 사용하면 카운트 쿼리 없이 페이징을 구현할 수 있습니다.

-  UI에서 "다음" 버튼만 제공하고 전체 페이지 네비게이션을 표시하지 않는 경우에 적합합니다.

// Repository 
public Slice<TodoEntity> listAll(Pageable pageable) {
    return todoRepository.listAll(pageable);
}

- 첫페이지 또는 마지막 페이지 여부를 간접적으로 알수 있다.

1. hasNext() 메소드:
slice.hasNext()가 false를 반환하면, 현재 페이지가 마지막 페이지
이 메소드는 요청한 페이지 크기보다 하나 더 많은 엔티티를 조회하여 다음 페이지의 존재 여부를 확인


2. isLast() 메소드:
slice.isLast()가 true를 반환하면, 현재 페이지가 마지막 페이지
이는 !slice.hasNext()와 동일한 결과를 제공


3. 추가적인 유용한 메소드들:
isFirst(): 현재 페이지가 첫 번째 페이지인지 확인
getNumber(): 현재 페이지 번호 반환
getSize(): 페이지 크기 반환
getNumberOfElements(): 현재 페이지에 포함된 요소의 수 반환

 

UI 구현 시 고려사항:

"다음" 버튼: hasNext()가 true일 때만 표시
"이전" 버튼: isFirst()가 false일 때 표시
현재 페이지 정보: getNumber() + 1을 사용하여 표시 (페이지 번호는 0부터 시작)