JPA는 데이터베이스에서 많은 양의 데이터를 조회할 때, 페이징과 정렬 기능을 제공합니다.
페이징은 데이터를 페이지 단위로 나누어 보여주는 것이고, 정렬은 데이터를 특정 기준에 따라 순서대로 나열하는 것입니다.
JPA에서는 Pageable이라는 인터페이스를 통해 페이징과 정렬을 쉽게 처리할 수 있습니다.
Pageable 인터페이스는 다음과 같은 정보를 가지고 있습니다.
Pageable 인터페이스를 구현한 클래스로는 PageRequest가 있습니다.
PageRequest는 다음과 같은 방법으로 생성할 수 있습니다.
PageRequest pageRequest = PageRequest.of(page, size, sort);
page는 페이지 번호, size는 페이지 크기, sort는 Sort 객체로 정렬 방식과 기준을 지정합니다.
예를 들어, id 속성으로 내림차순 정렬하고, 첫 번째 페이지에 10개의 데이터를 보여주고 싶다면 다음과 같이 작성할 수 있습니다.
PageRequest pageRequest = PageRequest.of(0, 10, Sort.by("id").descending());
Pageable 객체를 생성했다면, JpaRepository 인터페이스의 findAll() 메소드에 파라미터로 넘겨주면 됩니다.
findAll() 메소드는 Pageable 객체를 받아서 Page 객체를 반환합니다.
Page 객체는 다음과 같은 정보를 가지고 있습니다.
Page 객체를 이용하면, 원하는 페이지의 데이터와 페이징 관련 정보를 쉽게 얻을 수 있습니다.
예를 들어, User 엔티티에 대한 페이징 처리를 하고 싶다면 다음과 같이 작성할 수 있습니다.
public interface UserRepository extends JpaRepository<User, Long> {
}
@RestController
public class UserController {
@Autowired
private final UserRepository userRepository;
@GetMapping("/users")
public Page<User> getUsers(Pageable pageable) {
return userRepository.findAll(pageable);
}
}
이제 /users?page=0&size=10&sort=id,DESC 와 같은 요청을 보내면, id로 내림차순 정렬된 첫 번째 페이지의 10개의 유저 데이터와 페이징 정보를 응답으로 받을 수 있다.