본문 바로가기
Spring/Spring Data

[JPA] Pageable 페이징 관련 정리

by 제우제우 2024. 8. 19.

Pageable

  • org.springframework.data.domain
  • 인터페이스이다. 
  • 구현체로는 PageRequest, Unpaged 존재 
@GetMapping("/posts")
public List<PostResponse> getList(@PageableDefault Pageable pageable){
   return postService.getList(pageable);
}
  • 클라이언트가 해당 경로(/posts)로 요청을 보내면 설정에 맞게 Pageable 객체를 만들어서 넘겨준다. 
  • 페이지 번호는 0부터 시작  

YAML 설정 

spring:  
  data:
    web:
      pageable:
        one-indexed-parameters: true # 페이지 1부터 시작
        default-page-size: 5
  • spring.data.web.pageable.one-indexed-parameters: 클라이언트 → 컨트롤러 Pageable 구현체가 넘어오면 페이징을 1부터 시작하게 만들어준다.
  • default-page-size: 기본 페이지 크기 설정, @PageableDefault가 있으면 @PageableDefault 우선순위를 가진다. 

@PageableDefault

@GetMapping("/posts")
public Page<Post> getPosts(
        @PageableDefault(size = 10, sort = "createdDate", direction = Sort.Direction.DESC) Pageable pageable) {
    return postRepository.findAll(pageable);
}

 

  • size: 페이지당 항목 수를 설정, 기본값 20 
  • page: 기본적으로 요청할 페이지 번호를 설정 , 기본값은 0
  • sort: 기본 정렬 기준을 설정, 기본 정렬 방향은 오름차순(ASC)
  • direction: 기본 정렬 방향을 설정, Sort.Direction.ASC or Sort.Direction.DESC

주의사항

  • @RequestParam과 함께 사용: @PageableDefault는 Pageable 객체를 직접 주입받는 경우에만 작동하며, @RequestParam으로 개별 파라미터를 받는 경우에는 사용되지 않는다.