사용자가 저장한 책을 리스트로 반환하는 기능을 개발하던 중에 페이징 기능을 추가하여 모든 값을 한 번에 보내지 않고, N개씩 값을 반환해야겠다는 생각을 했습니다.
해당 포스팅의 실제 코드는 EunsilSon - BookMarky에서 확인할 수 있습니다.
페이징이란 사용자가 요청한 데이터에 해당되는 전체 데이터 중 일부만을 전달하는 방식입니다.
Pageable 인스턴스를 쿼리 메서드에 전달해 정적으로 정의된 쿼리에 동적 페이징을 추가할 수 있습니다.
클라이언트에게 URL의 파라미터로 page
를 받고, Pageable 객체를 생성하는 페이징 기능을 설계했습니다. size는 고정 값을 사용하기 위해 파라미터로 받지 않았습니다.
Pageable 객체 생성에 필요한 파라미터 page
를 받습니다.
데이터 개수는 6개로 고정하기 위해 받지 않았습니다.
“/books/{username}?page={페이지}”
으로 요청을 보내면 페이징된 결과를 반환하게 됩니다.
받은 파라미터로 Pageable 객체를 생성합니다.
Pageable pageable = PageRequest.of(페이지, 사이즈, 정렬 정보)
서비스에서 특정 사용자가 저장한 Book Id의 페이징 결과를 Page에 담습니다.
Page
에 담긴 UserBookRecord
에서 Book의 isbn을 for-each 문으로 하나씩 꺼내, 실제 Book 엔티티를 찾고 반환을 위한 List<Book>
에 담습니다.
Pageable 객체의 정보를 토대로 페이징 결과를 반환합니다.
user_id 가 1인 사용자가 저장한 책을 조회해보겠습니다.
날짜 기준 내림차순 정렬을 한대로 book_id = 9인 데이터가 첫번째에 오는 것을 확인할 수 있습니다.