Pagination은 간단하게 말하면 서버로부터 불러온 데이터를 원하는만큼만 클라이언트 측에 보여주는 방법입니다.\
url query
를 사용해서 전달된 값을 가지고 구현합니다.
이때 url query
에
page
: 현재 페이지
perPage
: 페이지 당 게시글 수
이렇게 두 값을 전달받아 사용하고 url query
를 통해 전달된 값은 문자열이기 때문에 Number
로 형변환하여 사용해야 합니다.
router.get('/post', (req, res) => {
const page = Number(req.query.page || 1);
const perPage = Number(req.query.prePage || 10);
})
이때 req.query.page || 1
문장의 해석은 req.query.page 값을 가져와서 사용하는데 만약 해당하는 값이 없을 경우 1
을 사용한다는 의미입니다.
즉, 일치하는 값이 없을 때 기본값(default)을 1
로 둔다고 이해하면 됩니다.
MongoDB에서는 limit
와 skip
을 사용해 pagination을 구현합니다.
limit
: 검색 결과 수 제한
skip
: 검색 시 포함하지 않을 데이터 수
여기에 추가로 sort
를 사용할 수 있습니다.
sort
: 데이터 정렬router.get('/post', async (req, res) => {
const total = await Post.countDocument({}); // countDocument()는 모든 데이터의 수를 반환하는 MongoDB 함수이다.
const posts = await Post.find({})
.sort({ createdAt: -1 }) // 가장 최신 데이터부터
.skip(perPage * (page - 1))
.limit(perPage);
const totalPage = Math.ceil(total / perPage); // 항상 오름으로 해서 값을 반환해야 한다.
});
이 글은 엘리스 SW 엔지니어 트랙을 기반으로 작성되었습니다.