[JPA] Spring Data JPA의 Pageable 인터페이스: 페이징과 정렬을 손쉽게 처리하기
반응형
Spring Data JPA의 Pageable 인터페이스: 페이징과 정렬을 손쉽게 처리하기
Spring Data JPA에서 페이징과 정렬 기능을 제공하기 위해 Pageable 인터페이스를 사용할 수 있다. 이 글에서는 Pageable 인터페이스의 개념과 사용법을 예시와 함께 살펴보겠다.
1. Pageable 인터페이스란?
Pageable 인터페이스는 스프링 데이터에서 페이징 처리를 위해 사용되는 인터페이스이다. 이를 통해 간단하게 페이지 번호, 페이지 크기, 정렬 방식을 설정하여 데이터베이스 쿼리에 반영할 수 있다.
2. Pageable 인터페이스의 주요 메서드
Pageable 인터페이스는 다음과 같은 주요 메서드를 제공한다:
- int getPageNumber(): 현재 페이지 번호를 반환한다.
- int getPageSize(): 페이지당 항목 수를 반환한다.
- long getOffset(): 페이지의 시작 위치를 반환한다.
- Sort getSort(): 정렬 방식을 반환한다.
3. Pageable 사용 예시
1). Repository 인터페이스에 Pageable 추가:
public interface PostRepository extends JpaRepository<Post, Long> {
Page<Post> findByWriter(String writer, Pageable pageable);
}
2). 서비스 메소드에서 Pageable 사용:
@Service
@RequiredArgsConstructor
public class PostService {
private final PostRepository postRepository;
public Page<Post> getPostsByWriter(String writer, int page, int size) {
Pageable pageable = PageRequest.of(page, size, Sort.by("regDate").descending());
return postRepository.findByWriter(writer, pageable);
}
}
3). 컨트롤러에서 Pageable 사용
@RestController
@RequestMapping("/api/v1")
@RequiredArgsConstructor
@Slf4j
public class PostController {
private final PostService postService;
@GetMapping("/posts")
public ResponseEntity<Page<Post>> getPostsByWriter(
@RequestParam String writer,
@RequestParam int page,
@RequestParam int size) {
Page<Post> posts = postService.getPostsByWriter(writer, page, size);
return ResponseEntity.ok(posts);
}
}
위 예시에서는 PostRepository에 findByWriter 메소드가 Pageable을 인자로 받도록 정의했고, PostService에서 PageRequest.of 메소드를 사용하여 Pageable 객체를 생성하여 Repository에 전달했다. 그리고 PostController에서 해당 메소드를 호출하여 결과를 반환하고 있다.
4. Pageable의 장점
- 간편한 페이징 처리: 페이지 번호, 페이지 크기, 정렬 방식을 쉽게 설정하여 데이터베이스 쿼리에 적용할 수 있다.
- 유연한 정렬 방식: Sort 객체를 사용하여 여러 필드에 대한 정렬 방식을 설정할 수 있다.
- 직관적인 API: Pageable 인터페이스를 사용하여 페이징과 정렬을 간단하게 처리할 수 있다.
5. 결론
Pageable 인터페이스는 Spring Data JPA에서 페이징과 정렬 기능을 손쉽게 구현할 수 있게 해주는 강력한 도구이다. 이를 통해 데이터베이스 쿼리에 페이징과 정렬을 간편하게 적용하여 효율적인 데이터 처리를 할 수 있다.
반응형
'낙서장[1] > 3. JPA' 카테고리의 다른 글
[JPA] JPQL 쿼리 설명 (0) | 2025.01.24 |
---|---|
[JPA] 일반 JOIN과 FETCH JOIN을 지연 로딩(LAZY)과 즉시 로딩(EAGER)과 접목한 차이와 장단점 (0) | 2025.01.24 |
[JPA] 데이터베이스와 상호작용하는 객체 지향 프로그래밍 JPA 기초 (2) | 2025.01.24 |