Kkrap/개발하면서 공부하게 된 것들

커서 기반 페이지네이션이란?

재윤 2025. 7. 30. 15:15
반응형
  • 우리가 알고 있는 페이지네이션 자체는 리스트 데이터를 잘라서 몇 개씩 보여주는 것이 목적

페이지네이션에는 방식 2가지가 있다.

  1. offset 기반 페이지네이션 (LIMIT / OFFSET)
  2. 커서 기반 페이지네이션 (cursor-based)

offset 방식 문제점

  • 10개씩 자를 때 → 21~30번째데이터
SELECT * FROM folders ORDER BY created_at DESC LIMIT 10 OFFSET 20;

 

문제는

  • 데이터가 많아질 수록 offset 건너 뛰는 비용 증가
  • 실시간으로 데이터 추가/삭제 되면 페이지 결과가 깨짐 == 데이터 중복/누락

 

예를 들어

  • 사용자가 페이지 2까지 봤는데 그 사이 새로운 폴더가 추가되거나 삭제되면 사용자한테 같은 데이터가 중복 보이거나 빠짐

 

→ 데이터가 변경되는 환경에서 페이지번호 + offset으로 불러오는 거는 안 좋음

 

커서 기반 페이지네이션이 필요한 이유?

  • 커서 기반은 어디까지 봤는지 기준으로 그 다음 데이터를 가져와
  • 이 ID 이후 이 created_at 이후 기준으로

 

예시 쿼리

SELECT * FROM folders
WHERE created_at < '2024-05-10 12:00:00'
ORDER BY created_at DESC
LIMIT 10;

 

내 서비스에서 홈화편, 팔로우 페이지, 최신순 등 커서 기반으로 해야 제일 안정적

그러면 우리 서비스에서 어떤 조회든 elasticsearch로 처리를 하는데 커서 기반 페이지네이션을 합쳐서 진행

표준이 보통 elasticsearch + 커서 기반 페이지네이션으로 많이 사용됨

https://velog.io/@minsangk/커서-기반-페이지네이션-Cursor-based-Pagination-구현하기

 

커서 기반 페이지네이션 (Cursor-based Pagination) 구현하기

사실 처음에는 이 주제로 포스트를 쓰려고 했던건 아니고 Apollo GraphQL 에서 커서 기반 페이지네이션 구현 을 주제로 글을 쓰려고 했습니다. 그런데 막상 찾아보니 백엔드-프론트엔드를 함께 고려

velog.io

 

반응형

'Kkrap > 개발하면서 공부하게 된 것들' 카테고리의 다른 글

[Spring boot] JWT 로그인 요청 검증 방법  (3) 2025.08.08
[Spring boot] JWT 관리 코드 분석  (2) 2025.08.08
JWT란?  (5) 2025.08.03
ElasticSearch란?  (2) 2025.07.29
검색 엔진이란?  (0) 2025.07.29