API 페이징 설계 가이드
offset/limit vs cursor 기반 페이징, 정렬/중복/성능까지 포함한 실무 체크리스트
API 페이징은 “목록 API의 UX/성능/정확성”을 동시에 좌우합니다.
1) offset/limit 페이징 (page 기반)
예: GET /posts?limit=20&offset=40
- 장점: 단순, 구현 쉬움
- 단점: 데이터가 자주 변하면 중복/누락이 생기기 쉬움, offset이 커질수록 느려질 수 있음
2) cursor 페이징 (cursor 기반)
예: GET /posts?limit=20&cursor=...
- 장점: 큰 데이터에서 성능이 안정적이고, 변경에도 상대적으로 강함
- 단점: cursor 설계가 필요(정렬 키, 인코딩/서명 등)
cursor를 설계할 때 자주 쓰는 패턴
- 정렬 키:
created_at DESC, id DESC같이 동일 값 충돌을 깨는 보조 키를 포함 - cursor 값: 마지막 아이템의
(created_at, id)를 base64 등으로 인코딩