사이드프로젝트를 진행하던 도중 목록을 불러오는 API를 구현해야 했다.
처음엔 데이터가 적어서 전체 데이터를 한 번에 불러오도록 했는데,
데이터가 점점 추가되니 로딩 하는데 1초 이상이 걸렸다.
그래서 페이지네이션을 구현하기로 했다.
아래는 기존 코드다.
view-service-serializer-model 레이어로 나누어 로직을 작성했다.
service에서 모든 데이터를 조회한 뒤 serializer로 모델 데이터를 dto로 변환한 후 응답을 주는 코드다.

django의 viewset을 이용하면 더 쉽게 구현할 수도 있었지만, 기존 코드를 최대한 건드리지 않기 위해 PageNumberPagination을 사용하기로 했다.
아래는 페이지네이션이 적용된 코드다.


PageNumberPagination 클래스를 상속한 클래스를 만든다.
- page_size 페이지당 보여줄 항목 수 (한 번에 가져올 항목 수)
- page_size_query_param 페이지 사이즈에 대한 쿼리 파라미터 키
- max_page_size 페이지 최대 당 항목 수
- 예시: api url이 /api/items라고 가정할 때
- /api/items?page=1&size=2
- 페이지 당 항목 수를 2개로 설정한 첫번 째 페이지의 항목들을 조회해줘!
pagenator.get_paginated_response
- 조회한 데이터를 리스트로 만들어 응답을 생성한다.
- 포맷
- count: 전체 사이즈
- prev: 이전 페이지 url
- next: 다음 페이지 url
- results: [조회한 데이터를 리스트로 만든다
- 예시
