스프링 부트 3(Spring Boot 3)은 강력한 데이터 페이징 및 정렬 기능을 제공하여 대규모 데이터셋을 효율적으로 처리할 수 있도록 돕습니다. Pageable과 Sort는 이러한 작업의 핵심 컴포넌트로, 데이터베이스에서 데이터를 조회할 때 페이징(paging)과 정렬(sorting)을 간단하게 구현할 수 있습니다. 이번 글에서는 Pageable과 Sort의 기본 개념, 사용법, 그리고 실습 예제 3가지를 통해 스프링 부트 3에서 이 기능들을 효과적으로 사용하는 방법을 살펴보겠습니다.
1. Pageable과 Sort란 무엇인가?
Pageable
Pageable은 페이징 처리를 위한 인터페이스로, 한 번에 가져올 데이터의 크기와 페이지 번호를 정의합니다. 이를 통해 사용자는 필요한 만큼의 데이터를 한 번에 가져와 성능을 최적화할 수 있습니다.
- 주요 속성
- page: 조회할 페이지 번호(0부터 시작)
- size: 한 페이지에 포함할 데이터 개수
- sort: 정렬 기준
Sort
Sort는 정렬 조건을 정의하는 객체로, 특정 속성을 기준으로 데이터의 순서를 지정할 수 있습니다. ASC(오름차순)와 DESC(내림차순)으로 정렬 방향을 설정할 수 있습니다.
2. Pageable과 Sort 사용법
(1) Spring Data JPA 리포지토리에서의 활용
Spring Data JPA는 Pageable과 Sort를 기본적으로 지원합니다. 다음과 같이 리포지토리 인터페이스에서 메서드를 정의할 수 있습니다.
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
public interface ProductRepository extends JpaRepository<Product, Long> {
// Pageable과 Sort를 활용한 메서드
Page<Product> findByCategory(String category, Pageable pageable);
}
3. 실습 예제
예제 1: 기본 페이징 처리
간단한 페이징 기능을 구현하는 예제입니다. 예를 들어, 특정 카테고리의 상품을 페이지별로 조회하려고 합니다.
컨트롤러 코드
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class ProductController {
@Autowired
private ProductRepository productRepository;
@GetMapping("/products")
public Page<Product> getProductsByCategory(
@RequestParam String category,
@RequestParam int page,
@RequestParam int size) {
// Pageable 객체 생성
PageRequest pageable = PageRequest.of(page, size);
return productRepository.findByCategory(category, pageable);
}
}
사용 결과
/products?category=electronics&page=0&size=5 요청 시 전자제품 카테고리의 첫 5개 상품이 반환됩니다.
예제 2: 페이징과 정렬 동시 사용
페이징 처리에 정렬을 추가해 데이터를 조회하는 예제입니다. 이번에는 가격을 기준으로 상품을 정렬합니다.
컨트롤러 코드
import org.springframework.data.domain.Sort;
@GetMapping("/products/sorted")
public Page<Product> getProductsByCategorySorted(
@RequestParam String category,
@RequestParam int page,
@RequestParam int size,
@RequestParam String sortBy,
@RequestParam String direction) {
// 정렬 객체 생성
Sort sort = "desc".equalsIgnoreCase(direction)
? Sort.by(sortBy).descending()
: Sort.by(sortBy).ascending();
PageRequest pageable = PageRequest.of(page, size, sort);
return productRepository.findByCategory(category, pageable);
}
사용 결과
/products/sorted?category=electronics&page=0&size=5&sortBy=price&direction=asc
전자제품 카테고리에서 가격 오름차순으로 정렬된 첫 5개 상품이 반환됩니다.
예제 3: 복합 정렬 조건
여러 정렬 조건을 적용해 데이터를 조회하는 예제입니다. 예를 들어, 상품을 가격과 이름 기준으로 정렬합니다.
컨트롤러 코드
@GetMapping("/products/multi-sorted")
public Page<Product> getProductsByMultipleSorts(
@RequestParam String category,
@RequestParam int page,
@RequestParam int size) {
// 복합 정렬 조건 정의
Sort sort = Sort.by(Sort.Order.desc("price"), Sort.Order.asc("name"));
PageRequest pageable = PageRequest.of(page, size, sort);
return productRepository.findByCategory(category, pageable);
}
사용 결과
/products/multi-sorted?category=electronics&page=0&size=5
전자제품 카테고리에서 가격 내림차순, 이름 오름차순으로 정렬된 첫 5개 상품이 반환됩니다.
4. 테스트 및 주의사항
테스트
Postman 또는 웹 브라우저를 통해 각각의 엔드포인트를 호출하여 결과를 확인할 수 있습니다.
주의사항
- 페이지 번호는 0부터 시작합니다.
- 대규모 데이터를 처리할 때는 적절한 페이징 전략을 설계해야 합니다.
- 잘못된 정렬 필드 요청 시 예외가 발생할 수 있으므로 유효성 검사를 추가하세요.
5. 결론
스프링 부트 3의 Pageable과 Sort를 활용하면 대규모 데이터를 효율적으로 관리할 수 있습니다. 기본 페이징부터 복합 정렬까지, 다양한 기능을 활용해 사용자 경험을 개선하고 시스템 성능을 최적화할 수 있습니다. 위의 예제들을 직접 실습하면서 스프링 데이터 JPA의 강력함을 느껴보세요! 😊
'스프링 부트3' 카테고리의 다른 글
스프링 부트 3에서 다국어 지원 구현 (0) | 2024.12.11 |
---|---|
HTTP 클라이언트: WebClient 사용법 (0) | 2024.12.11 |
Validation API를 이용한 데이터 검증 (0) | 2024.12.11 |
HTTP/2 설정과 최적화 (0) | 2024.12.06 |
Spring Boot 3의 Spring Native (0) | 2024.12.06 |