Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Java8
- 생성자
- 무중단배포
- PULL방식아키텍쳐
- controller
- 어노테이션
- 프로그래머스
- 정보처리기사
- 정보처리기사필기
- Docker
- 롬북
- 빌드스크립트
- git
- CICD
- 서버
- 시계열디비
- 알고리즘
- API
- spring
- 자바
- 완전탐색알고리즘
- 정처기
- 정처기공부
- Groovy문법
- java
- 롬복
- 정처기필기
- 롬복사용시주의할점
- 빌드자동화도구
- aws
Archives
- Today
- Total
우당탕탕 개발일지
[JPA] Pageable이란? 본문
페이징(Pagingation)
기본적으로 게시판에서 작성된 포스트를 한 페이지에 모두 보여주기 보다 페이지를 나누어 쪽수별로 제공한다.
게시판의 포스트 뿐만 아니라 포스트에 작성 된 댓글이나 블로그 등도 마찬가지로 페이징처리를 하여 효과적으로 정보를 제공 한다. 이러한 페이징을 개발하기 위해 개발자가 직접 페이지 관련 쿼리를 파라미터로 받아 처리하는 방법도 있지만,
JPA에서 제공하는 Pageable 객체를 사용하게 되면 보다 쉽게 페이징 처리를 할 수 있다.
Pageable 사용
1
2
3
4
5
|
// 댓글 조회
@GetMapping("/{postId}/comments")
public Response<Page<CommentListResponse>> listComment(@PathVariable Long postId, Pageable pageable){
// 생략
}
|
cs |
위의 코드와 같이 Pageable를 인자 값으로 넘기면 설정한 페이지 만큼의 comment list를 반환받을 수 있다.
이 코드는 Page를 반환 값으로 받고 있는데, JPA에서는 반환값으로 List, Slice, Page 와 같이 다양한 반환값을 제공하고 있다.
Page<T>
- 전체 Page의 크기를 알아야하므로 필요한 Page 요청과 함께 전체 페이지 수를 계산하는 count 쿼리가 자동으로 생성되어 실행 된다.
- offset과 totalPage를 이용하여 서비스를 제공할 수 있다.
Slice<T>
- 더보기 형태의 페이징에서 사용된다.
- Page<T> 에서 존재하던 totalPages, totalElements가 없어지고 number와 numberOfElements가 존재한다.
- Page<T>와 달리 count 쿼리 없이 다음 페이지를 확인 할 수 있다.
List<T>
- 가장 기본적인 방법으로 count 쿼리 없이 결과만 반환한다.
@PageDefault
1
2
3
4
5
|
// 포스트 전체 조회
@GetMapping("")
public Response<Page<PostListResponse>> postList(@PageableDefault(size = 20) @SortDefault(sort = "createdAt",direction = Sort.Direction.DESC) Pageable pageable){
// 생략
}
|
cs |
@PageDefault에 설정한대로 사용자에게 보여준다.
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
|
{
"resultCode": "SUCCESS",
"result":{
"content":[{"id": 98, "title": "안녕!", "body": "나야!", "userName": "mingyeong",…],
"pageable":{
"sort":{"empty": false, "sorted": true, "unsorted": false},
"offset": 0, // 해당 페이지에 첫 번째 게시글 수
"pageSize": 20, // 한 페이지에서 나타내는 게시글 수
"pageNumber": 0, // 페이지 번호(0번 부터 시작)
"paged": true,
"unpaged": false
},
"last": false,
"totalPages": 4, // 페이지로 제공되는 총 페이지 수
"totalElements": 66, // 모든 페이지에 존재하는 총 게시글 수
"size": 20,
"number": 0,
"sort":{
"empty": false,
"sorted": true, // 정렬 상태
"unsorted": false
},
"numberOfElements": 20,
"first": true,
"empty": false
}
}
|
cs |
'Spring' 카테고리의 다른 글
[Spring] 🔒 스프링 시큐리티(Spring Security) 란? (0) | 2023.01.03 |
---|---|
[Spring] @ControllerAdvice / @RestControllerAdvice 란? (0) | 2023.01.01 |
[Spring] ResponseEntity 이란? (0) | 2022.12.22 |
💡 JWT(JSON Web Token) 이란? (0) | 2022.12.09 |
빌더 패턴(Builder Pattern) / 빌더 어노테이션(@Builder) (0) | 2022.11.23 |