본문 바로가기
Backend2026년 6월 10일2분 읽기

API 페이지네이션, offset과 cursor 중 무엇을

YS
김영삼
조회 219
API 페이지네이션, offset과 cursor 중 무엇을

핵심 요약

페이지 번호로 점프해야 하는 관리자 테이블이면 offset(LIMIT/OFFSET), 무한 스크롤·피드·대용량이면 cursor(마지막 항목 기준 그 다음부터)가 맞다. offset은 OFFSET이 커질수록 DB가 앞 행을 다 세야 해서 느려지고, 중간에 삽입되면 항목이 중복·누락된다.

1. 비교

offsetcursor
구현쉬움약간 복잡
깊은 페이지 성능나쁨일정
삽입 시 안정성밀림안정
임의 페이지 점프가능불가

2. cursor 쿼리

-- 마지막으로 본 id 이후 20개
SELECT * FROM posts
WHERE id < $lastId      -- 정렬 컬럼 기준
ORDER BY id DESC
LIMIT 20;

정렬 컬럼은 유일·불변(보통 id나 created_at+id 복합)이어야 안정적이다.

3. 함정

  • offset 깊은 페이지(OFFSET 100000)는 인덱스가 있어도 느리다
  • cursor는 정렬 기준이 유일하지 않으면 경계에서 항목이 샌다 — id를 tiebreaker로
  • cursor 값은 불투명 토큰으로 인코딩하면 API가 깔끔하다

자주 묻는 질문

offset이 왜 느려지나요?

OFFSET N은 앞의 N개를 읽고 버린 뒤 다음을 반환합니다. N이 커질수록 버리는 일이 늘어 느려집니다. cursor는 WHERE로 시작점을 바로 찾아 일정합니다.

cursor로 특정 페이지로 점프가 안 되는데요?

cursor는 본질적으로 "이전 항목 다음"이라 임의 페이지 번호 점프엔 부적합합니다. 점프가 꼭 필요하면 offset을, 무한 스크롤이면 cursor를 쓰세요.

댓글 0

아직 댓글이 없습니다.
Ctrl+Enter로 등록