[ Spring Data JPA 페이지네이션(Pagination) ]
Spring Data JPA에서는 Pageable과 Page 인터페이스를 사용하여 데이터를 페이지 단위로 조회할 수 있어요.
이를 통해 대량의 데이터를 한 번에 불러오는 것이 아니라, 필요한 만큼 가져올 수 있도록 해줍니다.
✅ 페이지네이션 핵심 개념
📌 기본 개념
- Pageable : 페이지 정보를 담는 인터페이스
- 요청한 페이지 번호(page), 페이지 크기(size), 정렬 방식(sort)을 포함
- PageRequest.of(page, size)를 사용하여 객체 생성
- Page<T> : 페이지 결과를 담는 객체
- getContent() : 현재 페이지의 데이터 리스트
- getTotalPages() : 전체 페이지 수
- getTotalElements() : 전체 데이터 개수
- hasNext(), hasPrevious() : 이전/다음 페이지 여부 확인
📌 데이터베이스에서 어떻게 동작할까?
Spring Data JPA에서 Pageable을 사용하면 자동으로 LIMIT과 OFFSET을 적용한 SQL을 실행해요.
- LIMIT 5 → 한 번에 5개의 데이터만 가져옴
- OFFSET 5 → 앞에서 5개를 건너뛰고(= 2페이지 시작점) 조회
✅ Pageable을 활용한 페이징 API 구현
(1) Pageable을 사용한 Repository 인터페이스
Spring Data JPA는 JpaRepository에서 Pageable을 자동으로 지원합니다.
(2) UserService에서 페이지네이션 적용
Pageable을 받아서 Page<User>를 반환하도록 수정
- PageRequest.of(page, size, Sort.by("id").descending())
- page: 가져올 페이지 번호 (0부터 시작)
- size: 한 페이지에 포함될 데이터 개수
- Sort.by("id").descending(): id 기준 내림차순 정렬
(3) UserController에서 페이지네이션 적용
컨트롤러에서 @RequestParam을 이용해 쿼리 파라미터로 페이지 정보를 받습니다.
(4) 정렬 추가 (Sort.by())
-오름차순 정렬 (기본)
Pageable pageable = PageRequest.of(page, size, Sort.by("name").ascending());
-내림차순 정렬
Pageable pageable = PageRequest.of(page, size, Sort.by("name").descending());
-다중 정렬 (이름 오름차순, ID 내림차순)
Pageable pageable = PageRequest.of(page, size, Sort.by("name").ascending().and(Sort.by("id").descending()));
✅ 결론
개념 | 설명 |
Pageable | 페이지 정보를 담는 객체 (page, size, sort) |
Page<T> | 페이지 결과를 담는 객체 (데이터 + 전체 페이지 수 등) |
기본 크기 적용 | @RequestParam(defaultValue = "10") int size |
페이징 SQL 변환 | LIMIT ? OFFSET ? 자동 적용 |
정렬 적용 | Sort.by("column").ascending()/descending() |
'개발 > 부트캠프' 카테고리의 다른 글
본캠프 : 중복 코드 메서드로 만들기 (0) | 2025.02.20 |
---|---|
본캠프 : 뉴스피드 제작(팀 프로젝트)_소프트 삭제(Soft Delete) (0) | 2025.02.19 |
본캠프 : 뉴스피드 제작(팀 프로젝트)_비밀번호 수정 API (0) | 2025.02.14 |
본캠프 : READEME에 사진 추가하는 법 (0) | 2025.02.13 |
본캠프 : 개인 과제(일정 관리 앱-Develop 만들기) 트러블 슈팅 (0) | 2025.02.13 |