예를 들어, 데이터 베이스에 회원 정보가 100건이 저장되어 있는데 클라이언트 쪽에서 100건의 데이터를 모두 요청하는 것이 아니라 한 페이지에 일정 개수 만큼만 나누어서 달라고 요청하는 것을 페이지네이션(Pagination)이라고 한다.
즉, page 번호가 1이고, 페이지에 포함되는 데이터의 개수가 10건일 경우,
데이터베이스의 테이블에서는 1 row부터 10 row까지만 조회되어야 한다.
만약 page 번호가 2이고, 페이지에 포함되는 데이터의 개수가 10건일 경우,
데이터베이스의 테이블에서는 11 row부터 20 row까지만 조회되어야 한다.
이렇게 조회를 하면 보통 가장 오래된 데이터부터 10건씩 조회되기 때문에 일반적으로 테이블의 row를 역순으로 10건씩 가져와서 최신 데이터부터 조회하는 경우가 대부분이다.
"pageInfo": {
"page": 1,
"size": 10,
"totalElements": 20,
"totalPages": 2
}
조회하는 page의 정보가 pageInfo
에 포함되어야 하기 때문에, pageInfo
클래스를 생성하여 정보 내용들을 필드로 넣어준다.
@RequestParam
을 사용하여 int page
, int size
파라미터를 전달받아야 한다. 또한 그 값은 0보다 큰 숫자(@Positive
사용)여야 한다.
실제 페이지는 1부터 시작하지만 데이터 엑세스 계층에서 페이지를 접근할 때는 0부터 시작하므로 page
에서 1을 빼준다.
page
와 size
를 매개변수로 받는 PageRequest
객체를 생성한다.
PageRequest
는 Pageable
인터페이스의 구현 클래스이다.
CrudRepository
를 상속받아 Repository를 구현한다.data
와 pageInfo
를 필드로 받는 Dto 클래스 생성한다.page
와 size
파라미터 값을 입력한 후, GET 메서드 실행