반응형
- 우리가 알고 있는 페이지네이션 자체는 리스트 데이터를 잘라서 몇 개씩 보여주는 것이 목적

페이지네이션에는 방식 2가지가 있다.
- offset 기반 페이지네이션 (LIMIT / OFFSET)
- 커서 기반 페이지네이션 (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 |