회원 정보 목록 조회 기능에 페이지네이션을 적용하는 실습
요약
- 쿼리 메서드는 를 인수로 받아
page,size에 맞게 추려진Page<T>타입을 반환한다PageRequest는Pageable인터페이스 구현체이며page,size를 인수로 가진다Page클래스는getContent(),getTotalElements(),getTotalPages()메서드를 사용 할 수 있다

application.yml의 설정

db/h2/data.sql 의 기본설정 데이터 값이다

MemberMemberResponseDtoList<Member>를 List<MemberResponseDto>로 바꿔주는 mapper 인터페이스의 membersToMemberResponseDtos 메서드@Mapper(componentModel = "spring")를 통해 자동구현이 되어있다pageInfo, MemberResponseDto를 합쳐주는 MemberPageDtoResponseEntity엔티티 List<Member>를 Dto List<MemberResponseDto>로 바꿔준다
ResponseEntity는 생성자의 인수가(T body, HttpStatus status)로 하나의 body만 받을 수 있기 때문에 MemberPageDto 객체로 합쳐서 넣어준다

PageInfo 클래스
@AllArgsConstructor와 @Getter를 적용했다

pageInfo 와 List<MemberResponseDto>를 MemberPageDto로 변환하는 클래스
카테고리 이름을 "Data"로 표시하기 위해 MemberResponseDto를 받는 생성자의 두번째 인수 필드명을 'data'로 설정했다. MemberResponseDto 타입을 받아야 하기에 제네릭 타입으로 설정했다

쿼리 메서드로 레포지토리를 호출하여 값을 리턴할 서비스 클래스
1. page, size를 인수로 PageRequest를 생성하는 of 메서드
2. pageRequest를 인수로 DB 데이터를 Page<Member>로 리턴해줄 findByOrderByMemberIdDesc 쿼리 메서드
멤버 전체조회 메서드인 findMembers를 수정 한다
보통 레포지토리를 통해 DB값 호출시
엔티티 객체를 리턴하거나 엔티티객체 묶음의 Optional<Entity>값을 리턴하지만
지금은 페이지네이션을 적용해야 하니 Page<Member>를 리턴받도록 해야 한다
값을 역순으로 정렬해야 함으로 OrderBy를 Desc로 검색하였다

CrudRepository를 상속받아 쿼리 메서드를 구현하게 해주는 MemberRepository 클래스
Main의 @SpringBootApplication로 빈 등록되어있다
1.
고생하며 마지막으로 memberPage.getContent()로 뽑아내 응답한 코드가
포스트맨 출력값에 Data가 빈 값으로 나온다.
요리보고 조리봐도 뭐가 틀렸는지 모르겠다
Page, pageInfo, pageRequest, Pageable를 돌아가며 서칭해서 인수가 제대로 들어갔는지도 찾아보고
선언부도 읽어보고 별짓을 다했는데 값이 안나오는 이유를 모르겠다!!!
최후의 최후의 수단으로 챗봇에게 코드를 올려 질문했는데 내가 보내준 코드랑 완전 100% 하는걸
보여주며 이렇게 수정하면 되요! 하고 신나게 대답! + 매핑 타입 제대로 확인하라는
(매핑타입이 안맞았으면 인텔리제이가 먼저 잡았겠지 이눔아)별 도움안되는 답만 듣고 고뇌에 빠지길 몇시간
디버깅을 해본다 - Member size가 0으로 나온다??
DB Spl파일을 본다 - 값은 정상적으로 있다
인터넷 서칭을 한다 - 거의 비슷한 내용의 코드 구현 블로그를 찾아 하나씩 비교해가며 수정, 그래도 값이 안나온다
MemberResponseDto 내가 손대지 않는 코드들을 읽어보았다 내가 작성한 코드가 아니기에 의미는 없지만 한번 확인해본다
다시 한번 포스트맨 결과창 내용을 확인하기 위해 보내본다
갑자기 Data가 나오기 시작했다?????????
내일 처음부터 다시 구현해 봐야겠다
2.
과제파일을 새로 받아 재 구현하는데 성공하였다
좀더 이해가 잘되는 기분