Engineering Note

[Server] Pageable과 Page<E> 타입 본문

Server

[Server] Pageable과 Page<E> 타입

Software Engineer Kim 2025. 10. 15. 11:59

Spring Data JPA를 이용해서 별도의 코드 없이도 CRUD가 실행 가능하다는 사실도 멋지지만, 개발자들에게는 개발 속도를 빠르게 하는 페이징 처리는 정말 매력적인 기능입니다.

페이징 처리는 Pageable이라는 타입의 객체를 구성해서 파라미터로 전달하면 됩니다. Pageable은 인터페이스로 설계되어 있고, 일반적으로는 PageRequest.of()라는 기능을 이용해서 개발이 가능합니다.

 

  • PageRequest.of(페이지 번호, 사이즈): 페이지 번호 0 부터
  • PageRequest.of(페이지 번호, 사이즈, Sort): 정렬 조건 추가
  • PageRequest.of(페이지 번호, 사이즈, Sort.Direction, 속성): 정렬 방향과 여러 속성 지정

 

파라미터로 Pageable을 이용하면 리턴 타입은 Page<T> 타입을 이용할 수 있는데 이는 단순 목록뿐 아니라 페이징 처리에 데이터가 많은 경우에는 count 처리를 자동으로 실행합니다. 대부분의 Pageable 파라미터는 메서드 마지막에 사용하고, 파라미터에 Pageable이 있는 경우에는 메서드의 리턴 타입을 Page<T> 타입으로 설계합니다.

 

@Test
public void testPaging(){
 //1 page order by bno desc
 Pageable pageable = PageRequest.of(0,10, Sort.by("bno").descending());
 Page<Board> result = boardRepository.findAll(pageable);
}

 

 

findAll()의 리턴 타입으로 나오는 Page<T> 타입은 내부적으로 페이징 처리에 필요한 여러 정보를 처리합니다. 예를 들어 다음 페이지가 존재하는지, 이전 페이지가 존재하는지, 전체 데이터의 개수는 몇 개 인지 등의 기능들을 모두 알아낼 수 있습니다.

 

Page<Board> result = boardRepository.findAll(pageable);

log.info("total count: " + result.getTotalElements());
log.info("total pages: " + result.getTotalPages());
log.info("page number: " + result.getNumber());
log.info("page size: " + result.getSize());

List<Board> todoList = result.getContent();

todoList.forEach(board -> log.info(board));

 

 

참고 자료: 자바 웹 개발 워크북

Comments