## ๐Ÿ“„ Spring Boot | Page ๊ฐ์ฒด๋กœ ํŽ˜์ด์ง• ์ •๋ณด ๋‹ค๋ฃจ๊ธฐ

Yeeunยท2025๋…„ 4์›” 24์ผ
0

SpringBoot

๋ชฉ๋ก ๋ณด๊ธฐ
12/46

๐Ÿ“„ Spring Boot | Page ๊ฐ์ฒด๋กœ ํŽ˜์ด์ง• ์ •๋ณด ๋‹ค๋ฃจ๊ธฐ

Spring Data JPA์—์„œ๋Š” Pageable๊ณผ Page<T>๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋ฉด ํŽ˜์ด์ง• ์ฒ˜๋ฆฌ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•จ๊ณผ ๋™์‹œ์—, ์ „์ฒด ํŽ˜์ด์ง€ ์ˆ˜, ์ „์ฒด ๋ฐ์ดํ„ฐ ๊ฐœ์ˆ˜, ๋‹ค์Œ ํŽ˜์ด์ง€ ์ •๋ณด ๋“ฑ ๋‹ค์–‘ํ•œ ์ •๋ณด๋ฅผ ํ•จ๊ป˜ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๐Ÿ“Œ Repository ์ฝ”๋“œ

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;

public interface BoardRepository extends JpaRepository<Board, Long> {
    Page<Board> findByTitleContaining(String searchKeyword, Pageable paging);
}

Page<T>๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉด ํŽ˜์ด์ง• ์ฒ˜๋ฆฌ๋œ ์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฟ ์•„๋‹ˆ๋ผ, ํŽ˜์ด์ง€ ๊ด€๋ จ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋„ ํ•จ๊ป˜ ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค.


๐Ÿงช ํ…Œ์ŠคํŠธ ์ฝ”๋“œ

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import java.util.List;

public class BoardRepositoryTest {

    @Autowired
    private BoardRepository boardRepo;

    @Test
    public void testFindByTitleContaining() {
        Pageable paging = PageRequest.of(0, 5, Sort.Direction.DESC, "seq");
        Page<Board> pageInfo = boardRepo.findByTitleContaining("์ œ๋ชฉ", paging);

        // ํŽ˜์ด์ง€ ์ •๋ณด ์ถœ๋ ฅ
        System.out.println("PAGE SIZE : " + pageInfo.getSize());
        System.out.println("TOTAL PAGES : " + pageInfo.getTotalPages());
        System.out.println("TOTAL COUNT : " + pageInfo.getTotalElements());
        System.out.println("NEXT : " + pageInfo.nextPageable());

        // ์‹ค์ œ ์ฝ˜ํ…์ธ 
        List<Board> boardList = pageInfo.getContent();
        System.out.println("๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ");
        for (Board board : boardList) {
            System.out.println(board.toString());
        }
    }
}

๐Ÿงพ ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ ์˜ˆ์‹œ

PAGE SIZE : 5
TOTAL PAGES : 60
TOTAL COUNT : 300
NEXT : Page request [number: 1, size 5, sort: seq: DESC]
๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ
Board [seq=300, title=ํ…Œ์ŠคํŠธ ์ œ๋ชฉ200, writer=ํ…Œ์Šคํ„ฐ, content=ํ…Œ์ŠคํŠธ ๋‚ด์šฉ200, cnt=0]
Board [seq=299, title=ํ…Œ์ŠคํŠธ ์ œ๋ชฉ199, writer=ํ…Œ์Šคํ„ฐ, content=ํ…Œ์ŠคํŠธ ๋‚ด์šฉ199, cnt=0]
Board [seq=298, title=ํ…Œ์ŠคํŠธ ์ œ๋ชฉ198, writer=ํ…Œ์Šคํ„ฐ, content=ํ…Œ์ŠคํŠธ ๋‚ด์šฉ198, cnt=0]
Board [seq=297, title=ํ…Œ์ŠคํŠธ ์ œ๋ชฉ197, writer=ํ…Œ์Šคํ„ฐ, content=ํ…Œ์ŠคํŠธ ๋‚ด์šฉ197, cnt=0]
Board [seq=296, title=ํ…Œ์ŠคํŠธ ์ œ๋ชฉ196, writer=ํ…Œ์Šคํ„ฐ, content=ํ…Œ์ŠคํŠธ ๋‚ด์šฉ196, cnt=0]


๐Ÿ“Œ ์ •๋ฆฌ

  • Page<T>๋Š” ์‹ค์ œ ๋ฐ์ดํ„ฐ ๋ชฉ๋ก๋ฟ ์•„๋‹ˆ๋ผ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฉ”ํƒ€ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค:

    • getSize() โ†’ ํ˜„์žฌ ํŽ˜์ด์ง€๋‹น ๋ฐ์ดํ„ฐ ์ˆ˜
    • getTotalPages() โ†’ ์ „์ฒด ํŽ˜์ด์ง€ ์ˆ˜
    • getTotalElements() โ†’ ์ „์ฒด ๋ฐ์ดํ„ฐ ์ˆ˜
    • nextPageable() โ†’ ๋‹ค์Œ ํŽ˜์ด์ง€ ์ •๋ณด (Pageable ํƒ€์ž…)
  • ์ •๋ ฌ ๊ธฐ์ค€์€ PageRequest.of(ํŽ˜์ด์ง€ ๋ฒˆํ˜ธ, ์‚ฌ์ด์ฆˆ, ์ •๋ ฌ ๋ฐฉํ–ฅ, ์ •๋ ฌ ๊ธฐ์ค€ ํ•„๋“œ๋ช…) ์œผ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

  • ํ•ด๋‹น ํด๋ž˜์Šค๋“ค(Page, Pageable, Sort, PageRequest)์€ ๋ชจ๋‘ Spring Data JPA ๋„๋ฉ”์ธ ์œ ํ‹ธ ํŒจํ‚ค์ง€์— ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค:

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;

0๊ฐœ์˜ ๋Œ“๊ธ€