Django에서 페이지네이션 구현하기

twid_yuni·2024년 10월 19일
post-thumbnail

사이드프로젝트를 진행하던 도중 목록을 불러오는 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: [조회한 데이터를 리스트로 만든다
  • 예시
profile
프론트엔드 3년차 정연희입니다.

0개의 댓글