← 전체 글로 돌아가기

API

API pagination 응답에 totalCount를 함께 보내야 하는 이유

totalCount 없이는 클라이언트가 페이지 수를 계산할 수 없다. 그리고 마지막 페이지인지도 알 수 없어서 무한 스크롤 구현이 복잡해진다.

API에서 pagination을 구현할 때 items 배열만 반환하면 클라이언트가 페이지 수를 못 본다.

최소한의 pagination 응답

{
  "items": [...],
  "totalCount": 250,
  "page": 1,
  "pageSize": 20
}

이 정보들로 클라이언트는 "총 250개 중 20개씩 보고 있다"는 걸 알 수 있다.

클라이언트 입장에서 봤을 때

const totalPages = Math.ceil(totalCount / pageSize);
const isLastPage = page === totalPages;
const hasNextPage = page < totalPages;

totalCount가 없으면 이 계산들을 할 수 없다. 그래서 무한 스크롤을 구현할 때 "응답이 pageSize보다 적으면 마지막 페이지"라는 휴리스틱에 의존해야 하는데, 이건 불안정하다.

실제 API 응답 예시

curl -i 'https://example.com/api/items?page=1&pageSize=20'

# 응답
{
  "items": [...20개...],
  "totalCount": 1250,
  "page": 1,
  "pageSize": 20
}

이렇게 하면 프론트엔드에서 "1250개 중 20개씩 페이지네이션하기"를 완벽하게 구현할 수 있다.