모든 데이터가 한 페이지에 표시되도록 설계해서는 안된다. 페이징을 통해 한 페이지당 보이는 데이터의 양을 제한할 것이다.
이 때, 라이브러리를 추가로 설치하지 않고 이미 설치해두었던 JPA 관련 라이브러리를 사용한다.
Spring Data 프레임워크에서 제공하는 페이징 관련 클래스로는 다음과 같은 클래스가 있다.
Page 클래스는 특정 페이지에 포함된 데이터와 페이징 관련 정보를 담고 있는 클래스이다. 대표적으로 다음과 같은 메서드가 존재한다.
getContent()
: 해당 페이지에 포함된 데이터를 리턴. 일반적으로 데이터는 List 형태로 반환 된다.getTotalElements()
: 전체 데이터의 개수 리턴getTotalPages()
: 전체 페이지 수 리턴getNumber()
: 현재 페이지의 인덱스 번호를 반환. 페이지 인덱스는 0부터 시작getSize()
: 한 페이지에 포함된 항목의 개수를 반환getSort()
: 페이지 내 항목의 정렬 순서를 반환. Sort 객체로 반환되며, 정렬 기준을 확인할 수 있다.Pageable 인터페이스는 페이징 처리를 위한 정보를 담고 있는 인터페이스이다. Pageable
인터페이스를 구현한 클래스로는 PageRequest
가 있다. Pageable
인터페이스에는 다음과 같은 메서드가 존재한다.
getPageNumber()
: 조회할 페이지 번호를 반환. 0부터 시작getPageSize()
: 한 페이지에 포함될 항목의 개수를 반환getOffset()
: 조회할 페이지의 시작 위치를 반환getSort()
: 페이지 내 항목의 정렬 순서를 반환Pageable
인터페이스는 데이터를 조회하는 메서드에 Pageable
객체를 인자로 전달하여 페이징 처리를 할 수 있도록 한다. 다음 예시와 같이 사용할 수 있다.
Pageable pageable = PageRequest.of(0, 10); // 첫 번째 페이지, 페이지당 10개의 항목
Page<User> userPage = userRepository.findAll(pageable);
List<User> userList = userPage.getContent(); // 페이지에 포함된 User 데이터 리스트
PageRequest
객체를 사용하여 Pageable
인터페이스를 구현한 객체를 생성한 후, userRepository.findAll()
메서드에 전달하여 첫 번째 페이지의 10개 User 데이터를 조회한 예시이다.
Page
와 Pageable
을 함께 사용하면 데이터를 효과적으로 페이징하여 처리할 수 있다.
페이징 처리를 위한 정보를 담고 있으며, 데이터를 조회할 때 사용되는 메서드들에게 정보를 전달하여 특정 페이지의 데이터를 가져올 수 있다.
PageRequest
클래스의 주요 속성과 생성자는 다음과 같다.
page
: 가져올 페이지의 번호. 0부터 시작하며, 기본값은 0이다.size
: 한 페이지에 포함될 항목의 개수. 기본값은 20이다.sort
: 페이지 내 항목의 정렬 순서를 지정. Sort
객체를 사용하여 정렬 기준을 설정할 수 있다.PageRequest
객체를 생성하기 위해 다음과 같은 생성자를 사용할 수 있다.
PageRequest.of(int page, int size)
: 기본 생성자로, page
와 size
값을 인자로 받아 PageRequest
객체를 생성한다.PageRequest.of(int page, int size, Sort sort)
: 정렬 기준을 추가로 지정하여 PageRequest
객체를 생성한다.