Java Framework/Spring

[Spring] 페이징 (Paiging) 주요 메서드

annovation 2025. 2. 10. 08:50

페이징 (Paging)

페이징(Paging)은 데이터를 한 번에 모두 보여주는 대신, 여러 페이지에 나누어 보여주는 방법입니다.
데이터가 많아지면 한 화면에 전부 출력하는 것은 비효율적이기 때문에 사용자가 원하는 만큼의 데이터만 나누어 보여주도록 하는 것입니다.

예를 들어, 게시판에서 글이 100개가 있을 때 한 페이지에 10개씩 보여준다면 총 10개의 페이지로 나누어 표시하는 방식이 페이징입니다.


페이징 객체 & 클래스 

1. 스프링에서는 페이징 처리를 위해 Pageable Page 객체를 사용합니다.

  • Pageable : 페이지 번호와 페이지당 데이터 개수 등의 페이징 정보를 담는 객체입니다.
Pageable pageable = PageRequest.of(0, 10); // 0번째 페이지부터 10개씩 가져오기
  • Page : 페이징된 데이터와 함께 전체 페이지 수, 총 데이터 개수 등의 정보를 담는 객체입니다.
Page<Question> paging = questionRepository.findAll(PageRequest.of(0, 10));

 

2. 페이징 정보를 설정할 때 PageRequest 클래스를 사용합니다.

(1) 0번째 페이지부터 10개씩 가져오기

Pageable pageable = PageRequest.of(0, 10); // 0번째 페이지부터 10개씩 가져오기
  • of(int page, int size)
    • page : 페이지 번호 (0부터 시작)
    • size : 한 페이지에 보여줄 데이터 개수

(2) 데이터를 특정 기준으로 정렬할 때는 Sort 객체를 사용합니다.

public Page<Question> getList(int page) {
    // 1. 정렬 기준을 설정하기 위한 Sort.Order 객체 생성
    List<Sort.Order> sorts = new ArrayList<>();
    sorts.add(Sort.Order.desc("createDate")); // 'createDate' 필드를 기준으로 내림차순 정렬

    // 2. Pageable 객체 생성 (페이지 번호, 페이지당 개수, 정렬 기준)
    Pageable pageable = PageRequest.of(page, 10, Sort.by(sorts));

    // 3. Repository를 통해 페이징된 결과를 반환
    return this.questionRepository.findAll(pageable);
}
  • Sort.by("createDate").descending()
    • createDate 필드를 기준으로 내림차순 정렬합니다.

페이징 주요 메서드

페이징 결과는 Page 객체를 통해 반환되며 다음과 같은 주요 메서드를 제공합니다.

메서드 설명 반환 값
isEmpty() 데이터가 존재하는지 여부를 확인합니다. true 또는 false
getTotalElements() 전체 데이터의 총 개수를 반환합니다. long (숫자)
getTotalPages() 전체 페이지 수를 반환합니다. int (숫자)
getSize() 한 페이지에 표시되는 데이터 개수를 반환합니다. int (숫자)
getNumber() 현재 페이지 번호를 반환합니다. int (숫자)
hasPrevious() 이전 페이지의 존재 여부를 확인합니다. true 또는 false
hasNext() 다음 페이지의 존재 여부를 확인합니다. true 또는 false
getContent() 현재 페이지의 데이터를 리스트로 반환합니다. List<T> (객체 리스트)
getNumberOfElements() 현재 페이지에 포함된 데이터 개수를 반환합니다. int (숫자)
hasContent() 현재 페이지에 데이터가 존재하는지 확인합니다. true 또는 false
getPageable() 페이징 관련 설정 객체를 반환합니다. Pageable 객체
getSort() 데이터 정렬 기준을 반환합니다. Sort 객체

페이징 속성

Spring의 페이징 기능에서는 Page 객체에 담긴 데이터를 관리하는 여러 속성들이 존재합니다. 이 속성들은 데이터의 상태나 정보(예: 현재 페이지 번호, 페이지 크기 등)를 표현합니다.

속성 설명 예시
paging.number 현재 페이지 번호를 나타냅니다. paging.number = 2 (3번째 페이지)
paging.size 한 페이지에 보여줄 데이터 개수입니다. paging.size = 10
paging.totalPages 전체 페이지 개수를 나타냅니다. paging.totalPages = 5
paging.totalElements 전체 데이터 개수를 나타냅니다. paging.totalElements = 45
paging.hasNext 다음 페이지 존재 여부를 나타냅니다. paging.hasNext = true
paging.hasPrevious 이전 페이지 존재 여부를 나타냅니다. paging.hasPrevious = false

 

➡️ 예시

<td th:text="${paging.getTotalElements - (paging.number * paging.size) - loop.index}"></td>
  • loop.index : 반복문에서의 현재 항목 인덱스입니다. (loop.index = 0 (첫 번째 항목))

출처

OpenAI ChatGPT (https://openai.com)

점프 투 스프링 부트 책 : https://wikidocs.net/162090

'Java Framework > Spring' 카테고리의 다른 글

[Spring] JPA Specification  (1) 2025.02.19
[Spring] Bean  (1) 2025.02.12
[Spring] 바인딩 (Binding)  (0) 2025.02.09
[Spring] Validation Library 데이터 유효성 검사  (0) 2025.02.08
[Spring] HTTP Method  (0) 2025.02.07