사용자가 게시판의 글을 열람하기 위해 게시판을 요청할 때
만약 게시글이 10개가 한 페이지에 존재한다면, 한 번에 다 볼 수 있다.
만약 게시글이 100만개가 한 페이지에 존재한다면, 한 번에 다는 커녕 페이지 로드 속도가 매우 느릴 수도 있다.
매번 요청할 때마다 게시글 전체를 가져오게 되면 매우 불편함을 느낄 것이기 때문에
조금씩 (1~n) 그리고 원할 때 다음 n개를 가져오게 된다.
프론트엔드에서 페이지를 나눠서 보여주기 위해서 몇가지 정보가 필요하다.
public class Pagination {
private Integer page;
private Integer size;
private Integer currentElements;
private Integer totalPage;
private Long totalElements;
}
페이지 번호, 한 페이지의 게시글 크기, 현재 보여줄 페이지 번호, 총 페이지 수, 총 게시글 수가 있다.
@GetMapping("/all")
public API<List<PostEntity>> list(
@PageableDefault(page = 0, size = 10, sort = "id", direction = Sort.Direction.DESC)
Pageable pageable
){
return postService.all(pageable);
}
모든 게시글 리스트를 보고 싶은데 페이지를 나눌 수 있다.
@PageableDefault로 기본값을 설정하고 id의 내림차순으로 정렬하면 최신글부터 보여줄 수 있겠다.
기본값이 아닐 경우 Query Parameter로 page와 size를 받을 수 있다.
public API<List<PostEntity>> all(Pageable pageable){
var list = postRepository.findAll(pageable);
var pagination = Pagination.builder()
.page(list.getNumber())
.size(list.getSize())
.currentElements(list.getNumberOfElements())
.totalElements(list.getTotalElements())
.totalPage(list.getTotalPages())
.build()
;
var response = API.<List<PostEntity>>builder()
.body(list.toList())
.pagination(pagination)
.build();
return response;
}
post 테이블에서 모든 글을 리스트에 담아서 pagination 객체를 builder패턴으로 만들 때
요청으로 받은 page와 size를 담아 객체를 만들어 body에 리스트를 담고 페이지 정보를 붙여서 response를 내린다.

16개의 글을 작성했고 8개씩 페이지를 만들고 싶다면


Query Parameter로 전달할 수 있겠다.
우리가 전달할 정보들까지 정확하게 전달하는 것을 볼 수 있다.