Search
▪️

Adding Pagination

Retrieving Chunk of Data

Pagination을 돕는 Third Party Package가 있다. 하지만 Package 없이도 Routing Query만으로도 구현할 수 있다.
Mongoose에서 Pagination을 구현하는데 유효한 Method는 skip() limit() Method이다. Page에 해당하는 항목들만 Fetch하기 위해선, 이전의 정보를 Skip한 뒤, 그 이후부터 가져올 항목 수를 Limit하는 것이다.
skip()과 limit() 모두 find() Method로 찾은 항목들에 대해서 동작하게 된다.
find()라고 하는 Method 별다른 설정이 없다면 Cursor를 이용한다고 했었는데, skip() Method는 바로 이 Cursor를 받아서 특정 개수 만큼 Skip이 가능하다.
limit()이라는 Method는 특정 개수의 항목만 Retrieve할 수 있는 Method이다.
항목 개수에 따른 Page에 나눠서 적용하는 것은 위 두 Method로 가능했지만, Page 자체를 Dynamic 하게 생성하는 것이 필요하다.
** SQL의 경우도 똑같은 로직으로 처리한다. 다만 Mongoose에서의 skip()은 OFFSET, limit()은 LIMIT으로 사용한다.

Preparing Pagining Data on the Server

Pagination을 위해서는 Pagination을 하고자 하는 항목의 Count가 중요하다. 이에 대해서는 find() Method로 항목의 Cursor들을 받은 뒤에 countDocuments() Method를 통해서 개수를 얻을 수 있다.
그렇다면 Render할 때, View에 넘겨줘야 하는 데이터들은 무엇일까? 아래와 같은 정보 등이 필요하다.
1.
Next Page가 있는 지에 대한 hasNextPage
2.
이전 페이지가 있는 지에 대한 hasPreviousPage
3.
nextPage
4.
previousPage
5.
currentPage
6.
lastPage
7.
총 항목의 개수 count
이렇게 수행하는 Pagination은 Query String에 따라서 Client에서 조정하는 것이므로 Server-Side Pagination은 아니다. 수행하는 과정을 따라가보면 알다 싶이, 모든 항목들을 다 불러온 후에 Pagination을 수행한다.