레코드 갯수가 많은 경우 하나의 API 요청으로 모든 레코드를 얻는 것은 피해야한다. 이런 경우에 여러 페이지에 나눠서 request를 처리할 수 있다.
DRF에서는 아래와 같은 페이징 기법을 지원해주고 있다. 두 방법 모두 url의 get parameter를 이용하여 페이징을 지원한다.
1. PageNumberPagination : page 인자를 통해 페이징 처리
2. LimitOffsetPagination : limit 인자를 통해 페이징 처리
두 방법 중 PageNumberPagination이 더 많이 쓰이는 페이징 기법이므로 이에 대해 알아본다.
우리가 상속받는 settings.py에는 페이징에 대한 필드가 있지만 디폴트 값으로 None이 설정되어 있다. 페이징을 사용하려면
이를 재정의하여 어느 pagination을 적용할지와 그에 대한 parameter 값을 지정해준다.
# settings.py
REST_FRAMEWORK = {
    'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
    'PAGE_SIZE': 3, 
}settings를 통해 위와 같이 설정을 해주면 모든 view에 대해서 같은 설정을 할 수 밖에 없다. 따라서 각각 API에 대해 pagination을 개별적으로 설정하는 방법을 알아본다.
전역으로 설정된 pagination을 커스텀하기 위해서는 각 뷰에서 pagination설정을 해서 전역설정을 덮어써야한다.
우선 pagination.py 파일을 만들어 pagination 설정을 해준다.
# pagination.py
from rest_framework.pagination import PageNumberPagination
class PostPageNumberPagination(PageNumberPagination):
    page_size = 2view에서는 위에서 정의한 클래스를 임포트한 후, pagination_class로 이를 지정만 해주면 된다.
# views.py
from rest_framework.viewsets import ModelViewSet
from rest_framework.filters import SearchFilter
from .models import Post
from .serializers import PostSerializer
from .pagination import PostPageNumberPagination
class PostViewSet(ModelViewSet):
    queryset = Post.objects.all()
    serializer_class = PostSerializer
    pagination_class = PostPageNumberPagination