작성자 : 김다희

문제 배경

시리즈 데이터를 내려줄 때 최신순으로 시리즈 데이터를 내려주기로 했다.

오프셋 방식은

으로 인해 커서 방식을 채택했다.

커서 방식 페이지네이션을 방식을 이용해서 아래와 같이 코드를 구현했고 버그가 발생했다.

조회 요청시 마지막 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)
  )
}