SteadyDrills

장고(Django)의 Routers 본문

웹개발

장고(Django)의 Routers

Drills 2025. 1. 10. 22:30

250110

 

Routers란?

Django REST framework(DRF)에서 사용되는 개념으로  ViewSet과 URL을 자동으로 연결해 주는 역할을 한다.
일반적으로, API 엔드포인트의 URL 패턴을 수동으로 설정해야 하지만, Router를 사용하면 이를 자동화할 수 있다.

 

Routers의 기본 구성 요소

구성요소 설명
routes URL 패턴(엔드포인트)을 정의하는 규칙 목록.
각 라우트는 URL 경로, HTTP 메서드, ViewSet 메서드 등을 정의.
register() ViewSet과 URL prefix를 연결하고 라우트 정보를 등록. URL 패턴 생성을 준비.
get_urls() Router에 등록된 ViewSet에 따라 URL 패턴 리스트를 생성 및 반환.
urlconf_name 생성된 URLConf의 이름.

 

예시

from django.urls import path,include

#Router 생성 및 ViewSet 등록
router = SimpleRouter()
router.register(r'users', UserViewSet, basename='user')

#urlpatterns 생성
urlpatterns = [
    path('', include(router.urls)),
]

 

Router 클래스

SimpleRouter

  • 가장 기본적인 Router 클래스로 기본 CRUD URL 패턴 (list, retrieve, create, update, destroy)만 생성한다.
  • 별도의 API 루트(/api/ 같은 최상위 엔드포인트)는 생성하지 않는다.

  • 특징
    • 단순한 CRUD 엔드포인트만 필요할 때 적합.
    • basename을 명시적으로 설정하지 않으면 ViewSet 이름을 기준으로 생성.

예시

from rest_framework.routers import SimpleRouter
from django.urls import path, include
from .views import UserViewSet

router = SimpleRouter()
router.register(r'users', UserViewSet, basename='user')

urlpatterns = [
    path('', include(router.urls)),
]

  • 생성되는 URL 패턴HTTP 메서드 URL ViewSet 메서드
    GET /users/ list
    POST /users/ create
    GET /users/<pk>/ retrieve
    PUT /users/<pk>/ update
    DELETE /users/<pk>/ destroy

DefaultRouter

  • SimpleRouter를 확장한 버전으로, 추가적으로 API 루트 페이지와 브라우저 탐색 가능한 인터페이스를 제공한다.
  • API 루트(/)에 등록된 ViewSet을 자동으로 나열한다.

  • 특징
    • API 탐색 기능이 필요한 프로젝트에 적합.
    • 브라우저에서 직접 API 루트를 확인할 수 있습니다.
  • 예시
from rest_framework.routers import DefaultRouter
from django.urls import path, include
from .views import UserViewSet

router = DefaultRouter()
router.register(r'users', UserViewSet, basename='user')

urlpatterns = [
    path('', include(router.urls)),
]

  • 추가적으로 생성되는 API 루트 HTTP 메서드 URL 설명
    GET / API 루트 페이지 (등록된 엔드포인트 목록)

 

Router의 장단점

장점 단점
CRUD URL 자동 생성 복잡한 URL 패턴 처리 한계가 있다.
일관된 RESTful 구조 제공 자동 생성된 URL의 직관성 부족 → 협업 시 두드러짐.
API 루트와 브라우저 탐색을 지원한다. ViewSet에 의존적 이다.
간편한 유지보수와 확장성 모든 프로젝트에 적합하지 않음
생산성 극대화 및 커스터마이징이 가능하다. 퍼포먼스 오버헤드 발생 가능 → 내부적 추상화 계층이 더 많아서 동작하는 로직이 복잡하다.

 

 

공식문서:https://www.django-rest-framework.org/api-guide/routers/

'웹개발' 카테고리의 다른 글

Django의 APIView, ViewSets, Generic View  (0) 2025.01.16
로컬 스토리지(LocalStorage)란?  (0) 2025.01.13
장고(Django) ViewSets  (3) 2025.01.06
웹의 세션, 쿠키, 캐시  (0) 2025.01.04
레디스 명령어 모음  (0) 2024.12.23