Paging은 OS에서 메모리 관리 기법으로 사용된다. 서버에서는 웹이나 앱에서 불러오려는 데이터가 많을 경우 이를 나눠서 불러오도록 하는 기법이다. 어떻게 보면 데이터를 나눈다는 점에서 같다고 생각할 수도 있겠다.
온라인 쇼핑을 예로 들어보자. 전체 상품이 100개라고 할 때 paging을 사용하지 않으면 100개의 상품을 한번에 불러오게 된다. 이 때 서버에 과부하가 오는 경우가 발생할 수 있다. paging을 사용하게 되면 이를 관리자가 정한 갯수 만큼만 불러오게 된다. 만약 관리자가 limit을 10으로 설정했다면 100개의 상품을 10개씩 10페이지로 보여주게 되는 것이다.
select *
from Items
order by createdAt desc limit (?-1)*10, 10;
?는 페이지 번호를 의미한다. ?에 1을 넣게 되면 10개의 상품을 보여주는 1페이지를 조회하게 된다.
select *
from Items
order by createdAt desc
where idx > ? limit 10;
이 코드에서는 ?에 마지막 인덱스가 저장된다. 무한 스크롤인 경우 앞의 코드와 같은 방식으로 구현하게 되면 마지막으로 보여진 상품이 한번 더 보이게 된다. 이를 방지하기 위해 마지막 인덱스를 클라이언트가 저장하여 서버로 보내주게 된다. 이렇게 작성하면 인스타그램 같은 무한 스크롤을 구현할 수 있다.
Paging은 간단하지만 서비스의 효율을 높일 수 있는 필수적인 기능이라고 생각한다.