[Spring Boot] Pagination(νŽ˜μ΄μ§€λ„€μ΄μ…˜)

2025. 7. 15. 10:50Β·Development/Back-end

πŸ‘‰ Pagination(νŽ˜μ΄μ§€λ„€μ΄μ…˜)μ΄λž€?

 

νŽ˜μ΄μ§€λ„€μ΄μ…˜μ΄λž€, ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ νŽ˜μ΄μ§€ ν•˜λ‚˜ λ‹Ή ν•„μš”ν•œ 만큼 데이터 μš”μ²­μ„ 보내고 μ„œλ²„μ—μ„œ 그만큼 λ³΄λ‚΄μ£ΌλŠ” ν˜•μ‹μ„ λ§ν•œλ‹€.

 

 

πŸ‘‰ Pagination(νŽ˜μ΄μ§€λ„€μ΄μ…˜)을 μ‚¬μš©ν•˜λŠ” 이유

 

μ‚¬μš©μžκ°€ ν•œ νŽ˜μ΄μ§€μ—μ„œ μˆ˜λ°±λ§Œκ°œλ‚˜ λ˜λŠ” 데이터듀을 ν•œ λ²ˆμ— λ³΄λŠ” 것은 λ‹Ήμ—°νžˆ μ–΄λ ΅κ³  λΆˆνŽΈν•œ 일이닀.

이 λΆˆνŽΈν•¨μ„ μ€„μ΄κ³ μž, ν΄λΌμ΄μ–ΈνŠΈκ°€ μ λ‹ΉλŸ‰μ„ μš”μ²­ν•΄μ„œ μ„œλ²„μ—μ„œ 그만큼 데이터λ₯Ό λ³΄λ‚΄μ£ΌλŠ” 것이닀.

 

λ˜ν•œ μ„œλ²„μ—μ„œλ„ νŽ˜μ΄μ§€λ³„λ‘œ ν•„μš”ν•œ 만큼만 μ‘°νšŒν•˜λ©΄ μ„œλ²„ λΆ€ν•˜λ„ 쀄고, λ°˜μ‘μ†λ„λ„ 빨라진닀.

 

 

πŸ‘‰ μŠ€ν”„λ§λΆ€νŠΈλ‘œ κ΅¬ν˜„ν•˜κΈ°

 

μŠ€ν”„λ§λΆ€νŠΈμ—μ„œ μ§€μ›ν•˜λŠ” Page와 Pageable을 μ‚¬μš©ν•  것이닀. Pageable은 μš”μ²­ν•œ νŽ˜μ΄μ§€ 정보λ₯Ό λ‹΄λŠ” μΈν„°νŽ˜μ΄μŠ€μ΄λ‹€.

 

μ΄λ•Œ import ν•˜λŠ” PageλŠ”

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

 

μ΄λ‹ˆ, ν—·κ°ˆλ¦¬μ§€ λ§ˆμ‹œκΈΈ.

 

BoardService.java

 

public Page<BoardResponse> getAllBoardResponses(SortType sortType, Pageable pageable) {
    Page<Board> boards = switch (sortType) {
        // μ‘°νšŒμˆ˜κ°€ 높은 μˆœμ„œλŒ€λ‘œ
        case VIEWS -> boardRepository.findAllByIsDeletedFalseOrderByViewCountDesc(pageable);
        // μ’‹μ•„μš” μˆ˜κ°€ λ§Žμ€ 순
        case LIKES -> boardRepository.findAllByIsDeletedFalseOrderByLikeCountDesc(pageable);
        // μ΅œμ‹ μˆœ(생성일이 λŠ¦λŠ” 순)
        case CREATES -> boardRepository.findAllByIsDeletedFalseOrderByCreatedAtDesc(pageable);
        default -> boardRepository.findByIsDeletedFalse(pageable);
    };

    return boards.map(board -> {
        long likeCount = likeRepository.countByBoard(board);
        List<CommentResponse> comments = commentService.findByBoardId(board.getId());
        int commentCount = comments.size();
        return new BoardResponse(board, likeCount, false, commentCount);
    });
}

 

μ„œλΉ„μŠ€ ν΄λž˜μŠ€μ—μ„œ BoardResponse νƒ€μž…μ„ Page둜 λ³€κ²½ν•΄μ€€λ‹€.

μ£Όμ˜ν•  점은, μ„œλΉ„μŠ€μ—μ„œ μ‚¬μš©λœ λ©”μ„œλ“œλ“€μ€ λ ˆν¬μ§€ν† λ¦¬μ—μ„œλ„ Board νƒ€μž…μ„ Page둜 ν•΄μ€˜μ•Όν•œλ‹€.

 

BoardController.java

 

@GetMapping
public ResponseEntity<Page<BoardResponse>> getAllBoards(
        @RequestParam(defaultValue = "CREATES") SortType sortType,
        Pageable pageable
) {
    Page<BoardResponse> boards = boardService.getAllBoardResponses(sortType, pageable);
    return ResponseEntity.ok(boards);
}

 

μ»¨νŠΈλ‘€λŸ¬μ—μ„œλŠ” λ˜‘κ°™μ΄ Pageλ₯Ό νƒ€μž…μœΌλ‘œ ν•˜μ—¬ μ„œλΉ„μŠ€ λ‘œμ§μ„ ν˜ΈμΆœν•˜λ©΄ λœλ‹€.

 

πŸ‘‰ Postman으둜 ν…ŒμŠ€νŠΈν•˜κΈ°

 

 

쑰회수λ₯Ό κΈ°μ€€μœΌλ‘œ 0번째 νŽ˜μ΄μ§€μ— 데이터λ₯Ό 5개 λ‹΄μ•„μ„œ λ³΄λ‚΄λ‹¬λΌλŠ” μš”μ²­μ„ λ³΄λƒˆλ‹€.

데이터가 두 κ°œλ°–μ— μ—†μ–΄μ„œ κ·Έλ ‡μ§€λ§Œ,, 값이 잘 좜λ ₯λ˜λŠ” 것을 λ³Ό 수 μžˆλ‹€.

 

 

 

κ°μ‚¬ν•©λ‹ˆλ‹€ O(∩_∩)O

'Development > Back-end' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[Spring Boot] @Scheduled μ‚¬μš©ν•˜κΈ°  (0) 2025.08.10
[Spring Boot] Redisλ₯Ό μ‚¬μš©ν•œ λ‘œκ·Έμ•„μ›ƒ κ΅¬ν˜„ν•˜κΈ°  (0) 2025.07.23
[Socket.io] Socket.io 에 λŒ€ν•˜μ—¬  (0) 2025.06.07
[Express] μ’‹μ•„μš” κΈ°λŠ₯ κ΅¬ν˜„ν•˜κΈ°  (0) 2025.06.06
[Express] μ•Œλ¦¬κ³  APIλ₯Ό μ‚¬μš©ν•œ 둜그인/νšŒμ›κ°€μž… κ΅¬ν˜„ν•˜κΈ°  (0) 2025.06.02
'Development/Back-end' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
  • [Spring Boot] @Scheduled μ‚¬μš©ν•˜κΈ°
  • [Spring Boot] Redisλ₯Ό μ‚¬μš©ν•œ λ‘œκ·Έμ•„μ›ƒ κ΅¬ν˜„ν•˜κΈ°
  • [Socket.io] Socket.io 에 λŒ€ν•˜μ—¬
  • [Express] μ’‹μ•„μš” κΈ°λŠ₯ κ΅¬ν˜„ν•˜κΈ°
knhye
knhye
  • 전체
    였늘
    μ–΄μ œ
  • knhye
    3n1hye_
    knhye
  • 링크

    • GitHub
    • λΆ„λ₯˜ 전체보기 (61)
      • Development (28)
        • Back-end (21)
        • DB (3)
        • CS (4)
      • Algorithm (6)
      • DevOps (10)
        • git (1)
        • Cloud Platform (5)
        • CICD (1)
        • Cloud Native (2)
      • Internet (2)
      • 맀일메일 (6)
      • 회고 (5)
        • Capstone (2)
        • Hackathon (1)
        • 2025 (2)
      • 자격증 (1)
      • λΈ”λ‘œκ·Έ 리딩 (3)
  • 졜근 κΈ€

  • hELLOΒ· Designed Byμ •μƒμš°.v4.10.3
knhye
[Spring Boot] Pagination(νŽ˜μ΄μ§€λ„€μ΄μ…˜)
μƒλ‹¨μœΌλ‘œ

ν‹°μŠ€ν† λ¦¬νˆ΄λ°”