[DB] 페이지네이션 (Pagination)

·2025년 1월 9일

데이터베이스

목록 보기
15/22
post-thumbnail

페이지네이션(Pagination)이란?

  • 데이터를 일정한 크기로 나누어 페이지 단위로 제공하는 방식
  • 대량의 데이터를 사용자에게 필요한 데이터만 표시하기 위해 사용

페이지네이션 구현 방법 종류

1. Offset 기반 페이지네이션

  • OFFSETLIMIT을 사용하여 특정 범위의 데이터를 가져오는 방식
  • OFFSET: 반환할 행의 개수
  • LIMIT: 반환할 행의 시작 위치 지정
  • 데이터가 많아질수록 큰 OFFSET에서 성능이 저하
    • OFFSET은 결과를 반환하기 전에 지정된 건너뛸 행까지의 데이터를 모두 스캔하고, 이후 행만 반환
    • OFFSET이 클수록 스캔해야 할 데이터 양이 증가하므로 성능 저하가 발생
-- 21번째 행부터 10개의 행을 가져옴 (OFFSET은 0부터 시작)
SELECT *
FROM products
ORDER BY product_id
LIMIT 10 OFFSET 20;

2. Cursor 기반 페이지네이션

  • 이전 페이지의 마지막 데이터(Cursor)를 기준으로 다음 데이터를 가져오는 방식
  • OFFSET을 사용하지 않고 WHERE 조건을 활용
  • OFFSET 방식의 성능 저하 문제를 해결
  • 이전 페이지의 마지막 데이터를 저장하고 있어야 함으로 구현이 상대적으로 복잡
-- 이전 페이지의 마지막 product_id가 100일 경우, 그 이후 데이터 10개를 가져옴
SELECT *
FROM products
WHERE product_id > 100
ORDER BY product_id
LIMIT 10;

비교

구분Offset 기반 페이지네이션Cursor 기반 페이지네이션
구현 난이도쉬움상대적으로 어려움
성능데이터가 많아질수록 OFFSET이 커질 때 성능 저하데이터 크기와 무관하게 일정한 성능 유지
데이터 일관성데이터 추가/삭제 시 페이지 데이터가 변동될 가능성 있음데이터 추가/삭제에도 일관성 유지 가능
역방향 페이지네이션쉽게 구현 가능구현이 복잡하거나 추가적인 작업 필요
필요 조건OFFSET과 LIMIT 지원이전 페이지의 마지막 데이터(Cursor) 정보를 저장해야 함
대규모 데이터셋 처리비효율적효율적
사용 예시간단한 데이터 조회 (게시판, 소규모 데이터)대규모 데이터셋 (로그 데이터, 무한 스크롤 등)

0개의 댓글