<./>.dev./hood

Pagination의 종류

PHP에서 자주 쓰이는 Pagination은 3가지가 있습니다.

  1. Offset Pagination
    - Limit(페이지 당 개수) / Offset(어디서부터 시작하여 데이터를 가져올 것인가?)을 이용한 페이징 방식입니다.
  2. Offset Pagination With Deferred Joins
    - 지연 조인(Deferred Joins)을 적용한 Offset Pagination은 index를 이용하여 데이터 목록에 대한 접근을 최소화하는 쿼리 최적화의 방법입니다.
  3. Cursor Pagination
    - Limit를 이용하지만 Offset이 없어서 단순하게 “이전 페이지와 다음 페이지”만 이동할 수 있는 페이징 방식입니다.

3가지 Pagination을 쿼리로 표현하면 아래와 같습니다. SQL은 저희가 사용하는 MySQL 기준입니다.

 

-- Offset Pagination
select * from data_table order by id limit 20 offset 1000000;

-- Offset Pagination With Deferred Joins
select * from data_table
    inner join (select id from data_table order by id limit 20 offset 1000000) as dt using (id)
order by id;

-- Cursor Pagination
select * from data_table where id > 999999 order by id limit 20;

 

로컬 환경 기준으로 기존 Offset Pagination 방식으로 약 0.4 ~ 0.5초의 시간이 걸리는 작업이 Offset Pagination With Deferred Joins을 사용한다면 약 0.2초로 줄어들고 Cursor Pagination을 이용하게 되면 약 0.0004초로 큰 폭으로 줄어들었습니다. 하지만 Cursor Pagination은 리스트의 합계를 사용하지 못하는 단점이 있습니다. 그래서 이전 또는 다음 페이지만 이동할 수 있는 곳에서만 사용하거나 무한 스크롤 시에 사용하면 좋을 것.

 

출처 -

https://developer.comento.kr/post/php-pagination-23-12-11

 

백엔드 개발자의 Pagination 모험 : 어떻게 골라야 할까?

코멘토에서 더 좋은 서비스를 제공하기 위해서 여러가지를 실험해보고 있습니다. 그 중에서 Pagination에 대한 에피소드입니다.

developer.comento.kr