반응형
페이징은 대용량 데이터를 효율적으로 관리하고 사용자에게 빠르게 제공하기 위해서 필수적인 기능이다. 장고에서는 3가지 페이징 기법을 제공한다.
요청하는 방식으로 나눌 수 있다.
- PageNumberPagination (오프셋 방식)
- LimitOffsetPagination (오프셋 방식)
- CursorPaagination (커서 방식)
PageNumberPagination
가장 기본적인 페이징 기법으로, 페이징 번호를 기반으로 데이터를 나눈다. 사용자는 쿼리 파라미터를 통해 페이지를 이동할 수 있으며, 페이지 크기를 전역으로 지정하여 모든 API에서 동일한 크기의 페이지를 적용할 수 있다.
REST_FRAMEWORK = {
"PAGE_SIZE": 10,
"DEFAULT_PAGINATION_CLASS": "rest_framework.pagination.PageNumberPagination",
}
LimitOffsetPagination
Limit와 Offset을 이용하여 데이터를 페이지 단위로 나누는 방식이다. 특정 범위의 데이터를 요청할때 유용하다.
REST_FRAMEWORK = {
"PAGE_SIZE": 10,
}
설정에서 PAGE_SIZE를 설정해주고 아래와 같이 pagination_class를 정의해주면 된다.
from rest_framework.pagination import LimitOffsetPagination
class PostListAPI(ListAPIView):
queryset = Post.objects.all().order_by("-id")
serializer_class = PostSerializer
pagination_class = LimitOffsetPagination
CursorPagination
커서를 사용하여 데이터를 페이지 단위로 나누는 방식이다. 커서 값을 이용하여 다음 페이지로 이동할 수 있으며, 'id'와 같은 고유한 필드를 기반으로 정렬해주어야한다.
class PkCursorPagination(CursorPagination):
ordering = "-id"
페이징 방식 장단점
방식 | 장점 | 단점 |
PageNumberPagination | 설정이 간단하고 직관적이다 | 페이지 번호가 클 경우 성능 저하 가능성 |
LimitOffsetPagination | 특정 위치에서 데이터를 시작할 수 있어, 유연성이 높다 | 큰 오프셋을 처리할 때 성능 저하 가능성 |
CursorPagination | 대용량 데이터 처리에 최적화, 안정적 | 커서 관리가 복잡할 수 있다. |
Custom Pagination
PageNumberPagination 클래스 동적 생성
LimitOffset 클래스 동적 생성
CursorPagination 클래스 동적 생성
출처
반응형
'BackEnd > Django, DRF' 카테고리의 다른 글
[DRF] Django REST framework의 권한 관리 (0) | 2024.09.12 |
---|---|
[Django] 캐시 API (0) | 2024.08.21 |
[Django] 배포 시 에러 로그와 관리자 이메일 발송 (0) | 2024.08.07 |
[DRF] nested serializer 사용 방법 (0) | 2024.07.03 |
[Django] admin.ModelAdmin 메서드 정리 (0) | 2024.07.03 |