Spring Data JPA를 사용하여 Paging & Sort를 동시에 구현해보자

노혁·2023년 6월 30일
1
post-thumbnail

먼저 Paging이 무엇인지 JPA를 사용하여 어떻게 구현 하는지 알아보자!!

What is Paging?


Paging은 말 그대로 Page화 하는 것이다. 조회 결과가 너무 많을 경우 일정한 크기를 갖는 페이지로 조회 목록을 쪼개는 것이다. 이를 이용하여 검색 결과나 게시물의 메인페이지를 조회하는 부분에서 유용하게 사용될 수 있습니다.

페이지는 Size, Page, Sort 3가지 값을 필요로 합니다.

Size

  • Size는 Page의 개수를 의미한다. 10개의 조회 목록이 있을 경우 Size가 3이라면 4개의 페이지가 생성되고 마지막 페이지에는 1개의 목록만 있게 됩니다.

Page

  • Page는 생성된 페이지를 접근할 때 사용하는 인덱스입니다.

Sort

  • Sort는 페이지를 자르기 전 목록을 정렬한다. 이 때 정렬할 기준값을 설정할 수 있습니다.
    • Sort.By(”기준 컬럼 프로퍼티명”).desending() 이나 .asending()을 하여 오름차순, 내림차순 정렬을 정해 줄 수 있습니다.
    • 기준 값으로 하고자하는 값은 객체에 존재하는 컬럼의 프로퍼티명을 적어주면 됩니다.(예: idx)

Paging & Sort를 동시에


처음 해보시는 분들을 위하여 실제 구현한 Controller부터 Service, Repository까지의 예시를 보면서 설명하겠습니다.

Controller

@RestController
@RequestMapping("/post")
class PostController(
	private final postConverter: PostConverter
	private final getLatestPostsService: GetLatestPostsService
) {
	// 최신순으로 게시물을 정렬하는 Controller 입니다.
	@GetMapping
    fun getAllPostList(pageable: Pageable): ResponseEntity<PostListResponse> = 
				getLatestPostsService.getLatestPost(pageable)
						.let { postConverter.toResponse(it) }
						.let { ResponseEntity.ok(it) }
    }
} 

실제 프로젝트에서 http://localhost:8080/post?page=0&size=2 쿼리 스트링을 사용하여 page, size 값을 받았습니다. 이때 Reuqest 값으로는 Pageable 타입으로 받으면 됩니다. 위의 코드를 자세히 볼 필요는 없고 그냥 Request를 어떤 타입으로 받는지만 보시면 될꺼같습니다.

Service

override fun getLatestPosts(pageable: Pageable): List<PostDto> = 
			postRepository.findAll(
            	PageRequest.of(pageable.getPageNumber(), pageable.getPageSize(), Sort.by("idx").descending())
            	.toList()
            	.let { postConverter.toDto(it) }

함수의 내용을 자세히 살펴보면, postRepository에서 findAll() 메소드를 사용하여 모든 게시물을 가져온 뒤, Pageable 인터페이스를 구현한 PageRequest.of()를 사용하여 페이지 번호와 페이지 크기, 그리고 정렬 방식을 지정합니다. 최신순으로 정렬을 하는 API이기 때문에 idx 값을 기준으로 내림차순 정렬을 하도록 설정되어 있습니다.

이처럼 PageRequest.of를 사용하여 Pageable과 Sort를 동시에 진행할 수 있습니다.

PageRequest.of에 대해 설명하진 않았지만 구글링하면 금방 나오니깐 이해가 가질 않으시다면 찾아보는걸 추천해드립니다.

profile
백엔드 개발자입니다.

0개의 댓글