오늘은 개인 프로젝트 2일 차이다. 오늘 구현한 내용은 다음과 같다.
1. 페이징 조회 구현 및 테스트 코드 작성
1. 페이징 조회를 구현하기 위해서 여러 사이트를 찾아보면서 Pagerble로 간편하게 구현이 가능하다고 해서 여러 구글링과 튜터님의 조언을 통해 구현 완료했다.
Controller는 다음과 같다.
@GetMapping("/todo")
public ResponseEntity<?> getPagingCard(Pageable pageable , @AuthenticationPrincipal UserDetailsImpl userDetails){
ToDoPageCardListResponseDto toDoPageCardListResponseDto = toDoService.getPageCard(pageable, userDetails);
return ResponseEntity.status(SUCCESS_GET_PAGE_CARD.getHttpStatus().value())
.body(new SuccessResponse(SUCCESS_GET_PAGE_CARD,toDoPageCardListResponseDto));
}
Controller를 보면 단순하게 Pageable의 데이터와 User의 정보만 받는 것을 확인할 수 있다. @RequestParam으로 원래 개별적으로 page, size, sort에 대한 정보를 받아야 하지만 Pageable을 설정하면 따로따로 입력받을 필요 없이 아래의 POSTMAN처럼 간편하게 입력을 받을 수 있다.
다음은 Service 코드이다 입력받은 Pageable을 통해 바로 Repository JPQL을 호출하여 원하는 데이터를 받는다.
public ToDoPageCardListResponseDto getPageCard(Pageable pageable, UserDetailsImpl userDetails){
Page<ToDoCard> pageCardList = toDoRepository.findPageCard(pageable, userDetails.getUser().getId());
return new ToDoPageCardListResponseDto(pageCardList);
}
Repository에 있는 코드는 다음과 같다. JQPL쿼리를 통해 완료처리와 히든처리가 안된 카드와 히든처리가 됐다면 히든처리한 유저의 ID와 같은지 검사하여 Page목록을 반환하는 코드이다.
@Query("select t from ToDoCard t WHERE (t.complete = false AND t.hidden = false) OR (t.hidden = true AND t.user.id = :id)")
Page<ToDoCard> findPageCard(Pageable pageable, @Param("id") Long userId);
POSTMAN을 통해 간단하게 한명의 user에서 4개의 카드를 생성한 다음 2,3번만 완료처리를 하고 출력한 페이지 출력이다.
{
"status": 200,
"message": "카드 조회 완료",
"data": {
"pageList": {
"content": [
{
"toDoId": 4,
"title": "user1_testCard3 ",
"username": "testuser1",
"contents": "user1_testCard_contents",
"createdAt": "2023-12-20T19:12:30.282437"
},
{
"toDoId": 1,
"title": "user1_testCard ",
"username": "testuser1",
"contents": "user1_testCard_contents",
"createdAt": "2023-12-20T19:12:00.004198"
}
],
"pageable": {
"pageNumber": 0,
"pageSize": 5,
"sort": {
"empty": false,
"sorted": true,
"unsorted": false
},
"offset": 0,
"paged": true,
"unpaged": false
},
"last": true,
"totalElements": 2,
"totalPages": 1,
"size": 5,
"number": 0,
"sort": {
"empty": false,
"sorted": true,
"unsorted": false
},
"first": true,
"numberOfElements": 2,
"empty": false
}
}
}
결과를 보면 목록 아래에 pageable있는 부분을 보면 데이터 목록의 개수 및 몇 번째 페이지인지 페이지의 크기는 얼마인지 보여주는 코드들이 있다. 전체적인 변수의 의미는 파악하지 못했지만 핵심적인 부분만 봤을 때 정상적으로 출력된 것을 확인할 수 있다.
오늘 처음 페이징 처리관련해서 적용했지만 아직은 모르는 부분이 더 많다. 다양하게 응용이 가능해 보이는데 추가적으로 기능 구현을 하면서 아마 수도 없이 많은 페이징처리를 할 때 효율적이고 추가적인 응용을 통해 코드를 발전시킬 수 있을 것 같다.
'내일 배움 캠프' 카테고리의 다른 글
2023-12-22 (0) | 2023.12.24 |
---|---|
2023-12-21 (1) | 2023.12.22 |
2023-12-19 (0) | 2023.12.19 |
2023-12-18 (1) | 2023.12.18 |
2023-12-15 (0) | 2023.12.15 |