피드로 돌아가기
Offset Pagination Step by Step (with Sharding)
Dev.toDev.to
Database

Offset Pagination 최적화 및 Cursor 기반 전환 전략 분석

Offset Pagination Step by Step (with Sharding)

Mohamed Idris2026년 5월 10일10intermediate

Context

대규모 데이터셋 반환 시 발생하는 거대한 JSON 페이로드와 브라우저 렌더링 부하 및 DB 부하 해결 필요. 데이터 슬라이싱을 통한 페이지네이션 구현으로 시스템 안정성 확보를 목표로 함.

Technical Solution

  • skip = (page - 1) * size 공식을 통한 Page Number 기반의 OFFSET/LIMIT 쿼리 설계
  • COUNT(*) 전수 조사 대신 다음 페이지 존재 여부만 확인하는 Peek-based Count 쿼리로 응답 속도 개선
  • NestJS ParamDecorator를 활용한 쿼리 파라미터의 Page 객체 추상화 및 중앙 집중형 파싱 구조 적용
  • 고정된 PAGE_SIZE 설정을 통한 클라이언트의 과도한 요청 및 리소스 남용 방지
  • Sharding 환경 내에서 Shard별 페이지 탐색 후 다음 Shard로 전이하는 계층적 탐색 로직 구현
  • 데이터 일관성 및 Deep Page 성능 저하 해결을 위해 Index 기반의 Cursor Pagination 전환 경로 설계

- UI상 페이지 번호 점프가 필요한가? (Yes: Offset / No: Cursor) - 데이터 변경이 빈번하여 중복 데이터 노출 위험이 있는가? (Yes: Cursor) - Offset 사용 시 LIMIT 1개 더 많은 데이터를 조회하여 다음 페이지 존재 여부를 판단하는가? - 고정된 Page Size를 통해 API Abuse를 방지하고 있는가?

원문 읽기