페이징은 웹 어플리케이션에서 자주 사용되는 기능 중 하나이다. 데이터의 양이 많을 경우, 한 번에 모든 데이터를 표시하기보다는 페이지별로 나누어 보여주는 것이 사용자 경험에 더 유리하다. Spring Data JPA는 이런 페이징 처리를 간편하게 도와주는 Page
객체와 관련 인터페이스들을 제공한다.
Pageable
페이징 정보(페이지 번호, 페이지 크기, 정렬 방식 등)를 담고 있는 인터페이스. Spring Data JPA에서 제공하는 PageRequest
클래스를 통해 쉽게 인스턴스화 할 수 있다.
Page
데이터와 함께 페이징 정보(전체 페이지 수, 전체 데이터 수, 현재 페이지 번호 등)를 제공하는 인터페이스. Page
객체는 일반적으로 Repository의 조회 메서드에서 Pageable
객체를 파라미터로 받아 결과로 반환될 때 사용된다.
Pageable pageable = PageRequest.of(page, size, sort);
위 코드는 PageRequest.of()
메서드를 사용하여 Pageable
객체를 생성하는 예시다. 여기서 page
는 페이지 번호, size
는 한 페이지에 표시될 데이터의 개수, 그리고 sort
는 정렬 방식을 나타낸다.
Page
객체는 데이터를 리스트 형태로 갖고 있다. 이 리스트는 해당 페이지에 표시될 데이터의 목록을 의미한다.
Page
객체의 주요 메서드들
getContent()
: 현재 페이지의 데이터 목록을 반환한다.getTotalPages()
: 전체 페이지 수를 반환한다.getTotalElements()
: 전체 데이터 수를 반환한다.getNumber()
: 현재 페이지 번호를 반환한다.정렬은 데이터를 원하는 순서대로 나열하는 것을 말한다. Sort
객체를 사용하면 데이터의 정렬 방식을 지정할 수 있다. 이를 Pageable
객체 생성 시 함께 지정함으로써, 원하는 정렬 방식에 따라 페이징 처리된 데이터를 얻을 수 있다.
Sort.Direction direction = isAsc ? Sort.Direction.ASC : Sort.Direction.DESC;
Sort sort = Sort.by(direction, sortBy);
Pageable pageable = PageRequest.of(page, size, sort);
위 코드에서 isAsc
는 오름차순 정렬인지 여부를 나타내는 변수이다. sortBy
는 어떤 속성을 기준으로 정렬할지 나타낸다.
페이지 번호는 0부터 시작한다. 따라서 page=2
와 size=3
이면, 이는 세 번째 페이지에서 세 개의 항목을 가져오라는 의미가 된다. 이 경우, 정렬된 데이터 중 4번째, 5번째, 6번째 항목이 해당 페이지에 표시된다.
Spring Data JPA의 Page
와 Pageable
은 페이징 처리를 쉽고 효과적으로 구현하게 도와준다. 사용법과 동작 원리를 이해하면 웹 애플리케이션에서의 데이터 표시와 사용자 경험을 크게 향상시킬 수 있다.