Notice
Recent Posts
Recent Comments
Link
«   2025/08   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
Tags
more
Archives
Today
Total
관리 메뉴

che01 님의 블로그

Spring 페이징 처리 두 가지 방식 정리 본문

카테고리 없음

Spring 페이징 처리 두 가지 방식 정리

che01 2025. 6. 27. 17:46

Spring에서 페이징을 처리하는 방법은 크게 두 가지가 있다. 각각의 특징과 사용법을 정리해보자.

1. 전통적인 방식 - @RequestParam 직접 받기

컨트롤러에서 page와 size 파라미터를 직접 받아서 처리하는 방식이다.

특징

  • 컨트롤러에서 page, size를 직접 파라미터로 받음
  • defaultValue를 통해 기본값 지정 가능
  • Pageable 객체를 직접 생성해서 서비스에 전달

코드 예시

@GetMapping("/todos")
public ResponseEntity<Page<TodoResponse>> getTodos(
    @RequestParam(defaultValue = "1") int page,
    @RequestParam(defaultValue = "10") int size
) {
    Pageable pageable = PageRequest.of(page - 1, size);
    Page<TodoResponse> todos = todoService.getTodos(pageable);
    return ResponseEntity.ok(todos);
}

사용법

  • URL: /todos?page=2&size=10
  • 사용자 친화적인 1부터 시작하는 페이지 번호를 0부터 시작하는 인덱스로 변환 가능

2. Spring Data 자동 바인딩 - Pageable 파라미터 사용

Spring이 쿼리 파라미터를 자동으로 Pageable 객체에 매핑해주는 방식이다.

특징

  • 컨트롤러 메서드에 Pageable 타입 파라미터만 선언하면 됨
  • Spring이 쿼리 파라미터(page, size, sort)를 자동 매핑
  • 별도의 @RequestParam 어노테이션 불필요
  • page는 0부터 시작 (주의 필요)

코드 예시

@GetMapping("/search")
public ResponseEntity<Page<TodoSearchResponse>> searchTodos(
    @ModelAttribute TodoSearchRequest request,
    Pageable pageable
) {
    Page<TodoSearchResponse> result = todoService.searchTodos(request, pageable);
    return ResponseEntity.ok(result);
}

사용법

  • URL: /search?page=1&size=10&sort=createdAt,desc
  • 정렬 조건도 함께 전달 가능

주의사항 및 팁

페이지 인덱스 차이

  • 전통적인 방식: 사용자가 보는 페이지 번호(1부터 시작)를 개발자가 직접 변환
  • 자동 바인딩 방식: Spring이 0부터 시작하는 인덱스를 그대로 사용

설정 요구사항

  • Pageable 자동 바인딩은 spring-boot-starter-data-jpa 의존성이 있으면 기본 활성화
  • 필요시 @EnableSpringDataWebSupport 어노테이션으로 명시적 활성화 가능

선택 기준

  • 전통적인 방식: 사용자 친화적인 페이지 번호(1부터 시작)를 원할 때
  • 자동 바인딩 방식: 정렬 기능이 필요하거나 코드를 간결하게 유지하고 싶을 때

두 방식 모두 상황에 따라 적절히 선택하거나 혼용해서 사용할 수 있다.