💡뉴스피드 팀 프로젝트
배경
뉴스피드 조회 기능 중에서 생성일자를 기준으로 한 내림차순 정렬과 페이지네이션 기능을 추가하던 중
발단
서비스 레이어에서 Pageable 객체를 인자로 받아와 아래와 같이 findAll() 메서드를 수정하려고 하였다.
// Repository
Page<Post> findAll(Pageable pageable);
public List<PostResponseDto> findAll(Pageable pageable) {
return postRepository.findAll(pageable)
.map(PostResponseDto::toDto)
.toList();
}
전개
그러자 타입 불일치 오류가 발생한 것을 알 수 있었다.
이유는 postRepository.findAll(pageable)은 Page<Post>를 반환하는데 List<PostResponseDto> 타입으로 반환하려고 해서 타입 불일치 오류가 발생한 것이었다.
Page 객체는 데이터를 반환할 때 그 페이지에 해당하는 데이터뿐만 아니라 페이징 정보도 함께 제공하기 때문에 List로 변환할 수 없었다.
위기
public Page<PostResponseDto> findAll(Pageable pageable) {
return postRepository.findAll(pageable)
.stream()
.map(PostResponseDto::toDto)
.toList();
}
반환 타입을 Page<PostResponseDto>로 변경하고 Page.map() 메서드를 사용하여 페이징된 데이터를 그대로 반환하도록 수정하였는데 컴파일 오류가 뜨는 것을 알 수 있었다.
해결
public Page<PostResponseDto> findAll(Pageable pageable) {
return postRepository.findAll(pageable)
.map(PostResponseDto::toDto);
}
Page 객체는 이미 페이징된 데이터를 포함하고 있기 때문에 stream()을 호출할 필요 없이 직접 map()을 사용하여 변환하면 된다는 것을 알게되어 .stream()과 .toList()를 없애주었다.
'내배캠' 카테고리의 다른 글
| 최종 프로젝트 트러블슈팅(1) - pageable (0) | 2025.01.09 |
|---|---|
| 개인과제 트러블슈팅 - 일정 관리 앱 Develop (0) | 2024.11.29 |
| 개인과제 트러블슈팅 - 일정 관리 앱 Develop (0) | 2024.11.15 |
| 개인과제 트러블슈팅 - 일정 관리 앱 (0) | 2024.11.08 |
| 개인과제 트러블슈팅 - 숫자 야구 게임 (0) | 2024.10.25 |