작성자 : 김다희
시리즈 데이터를 내려줄 때 최신순으로 시리즈 데이터를 내려주기로 했다.
오프셋 방식은
으로 인해 커서 방식을 채택했다.
커서 방식 페이지네이션을 방식을 이용해서 아래와 같이 코드를 구현했고 버그가 발생했다.
조회 요청시 마지막 id가 7이고 7 다음으로 가져와야하는
데이터는 2, 1 인데 실제로는 6, 5, 4, 3, 2, 1번 id가 조회되었다. 어디서 문제가 발생했을까?
먼저 코드를 봐보자!
@GetMapping
public SeriesSubscribeList.Response getSeriesList(
@RequestParam(required = false) Long lastSeriesId,
@RequestParam @Positive Integer size,
@RequestParam(required = false, defaultValue = "ALL") Category[] categories
) {
return this.seriesService.getSeriesList(lastSeriesId, size, List.of(categories));
}
public SeriesSubscribeList.Response getSeriesList(
Long lastSeriesId,
Integer size
) {
PageRequest cursorPageable = PageRequest.of(
0,
size,
Sort.by(Direction.DESC, "createdAt", "id")
);
return new SeriesSubscribeList.Response((
(lastSeriesId == null) ? this.seriesRepository.findAll(cursorPageable)
: this.seriesRepository.findByIdLessThan(lastSeriesId, cursorPageable)
)
}