본문 바로가기
🔍 CS/데이터베이스

페이지네이션 최적화 - 03. 오프셋 기반 페이징 구현의 문제(1)

by 컴쏘 2023. 6. 6.

오프셋 기반의 페이징 구현 : 마지막 페이지를 구하기 위해 전체 갯수를 알아야 함

  • 전체 페이지의 크기가 클수록 전체 사이즈를 구하는 것 자체가 큰 부하가 될 수 있음
  • 실제 대용량 데이터를 제공하는 서비스를 본다면, 마지막 페이지에 대한 접근을 막거나 무한 스크롤 형태로 제공

  • 그 외에도 쿼리를 보낼 때, offset과 limit의 쿼리를 사용

offset = 4, size = 2의 예시

  • 4번 Offset부터 시작하기 위해 0~3번 Offset까지 데이터를 다시 읽음
  • 4번 Offset부터 size만큼 반환
  • 실제로 반환하는 데이터는 2개인데, 반환하는 2개의 데이터를 읽기까지 4개의 데이터를 읽고 버리게 된다. **(**지금은 Offset이 작기때문에 4개만 버리지만, 실제로는 Offset 사이즈가 커지면 커질수록 버려지는 데이터들이 훨씬 많다)

따라서 데이터 사이즈가 커질 수록 페이지네이션 방식은 다른 방식에 비해 훨씬 불리한 방식이다. → 대안으로 커서 기반 페이징

커서 기반 페이징

오프셋 기반의 페이징에서는 페이지 번호를 줬지만, 커서 기반 페이징에서는 key를 준다.

  • 예시의 요청은 key 4, size 2이므로 4번부터 2개를 달라는 요청

4번 이전의 데이터를 보지 않고, 4번 이후의 데이터부터 데이터를 읽어서 사이즈만큼의 데이터를 찾아 반환함

  • 서버는 마지막 key 번호를 클라이언트에게 준다. (다음 요청시에 클라이언트가 사용함)

따라서 커서 기반 페이징은 키를 기준으로 데이터 탐색범위를 최소화

→ 하지만, 커서 기반 페이징은 전체 데이터를 조회하지 않기 때문에 아래 UI 구현이 어려움

커서 기반 페이징으로는 구현이 어려움

상황에 따라 페이지네이션 방식을 고집해야 할 수도 있고, 페이지네이션 기반의 부하 문제를 해결할 솔루션으로 커서 기반 페이징을 사용하기도 하지만, 대안이 1개만 있는 것은 아님


2023 KAKAO Tech Campus_BackEnd 필수 과정
DB(MySQL) 강의 정리 내용입니다.