Django vs Django DRF 프레임워크 차이

HY_1023·2026년 3월 6일

헷갈리는 부분 정리

목록 보기
22/40

Django vs Django DRF 프레임워크 차이


🤔 한 줄 요약

Django     → 웹 페이지(HTML) 를 만드는 프레임워크
Django DRF → 데이터(JSON) 를 주고받는 프레임워크

1️⃣ Django 프레임워크 과정

브라우저 요청
     ↓
urls.py (URL 매칭)
     ↓
views.py (로직 처리)
     ↓
models.py (DB 조회)
     ↓
template (HTML 생성)
     ↓
HTML 페이지 응답

실제 코드

# views.py
def todo_list(request):
    todos = Todo.objects.all()
    return render(           # HTML 반환!
        request,
        "todo/todo.html",    # 템플릿 파일
        {"todos": todos}
    )
<!-- todo.html -->
{% for todo in todos %}
    <p>{{ todo.name }}</p>
{% endfor %}
결과
────────────────────────
브라우저에 HTML 페이지가 보임
화면 + 데이터 같이 반환

2️⃣ Django DRF 프레임워크 과정

브라우저/앱 요청
     ↓
urls.py (URL 매칭)
     ↓
views.py (로직 처리)
     ↓
models.py (DB 조회)
     ↓
serializers.py (JSON 변환)
     ↓
JSON 데이터 응답

실제 코드

# serializers.py (DRF에만 있음!)
class TodoSerializer(serializers.ModelSerializer):
    class Meta:
        model = Todo
        fields = "__all__"

# views.py
class TodoViewSet(ModelViewSet):
    queryset = Todo.objects.all()
    serializer_class = TodoSerializer  # JSON 변환!
// 결과 - JSON 데이터 반환
{
    "id": 1,
    "name": "공부하기",
    "complete": false,
    "created_at": "2026-03-06"
}

3️⃣ 핵심 차이점

Django                    Django DRF
──────────────────────────────────────────
HTML 반환                 JSON 반환
render()                  Response()
템플릿 필요               템플릿 불필요
Serializer 없음           Serializer 필수
브라우저만 사용           앱/웹 모두 사용

4️⃣ 파일 구조 차이

Django                    Django DRF
──────────────────────────────────────────
models.py      ✅         models.py      ✅
views.py       ✅         views.py       ✅
urls.py        ✅         urls.py        ✅
templates/     ✅         templates/     ❌ 불필요
serializers.py ❌ 없음    serializers.py ✅ 추가됨

5️⃣ views.py 차이

# Django - 함수형 뷰
def todo_list(request):
    todos = Todo.objects.all()
    return render(request,          # HTML 반환
        "todo/todo.html",
        {"todos": todos})


# DRF - 클래스형 뷰
class TodoViewSet(ModelViewSet):
    queryset = Todo.objects.all()
    serializer_class = TodoSerializer
    # CRUD 자동 생성!
    # JSON 자동 반환!

6️⃣ URL 설정 차이

# Django urls.py
urlpatterns = [
    path("todo/", views.todo_list),      # 직접 연결
    path("todo/<int:pk>/", views.todo_detail),
]


# DRF urls.py
router = DefaultRouter()
router.register("todo", TodoViewSet)    # 자동 생성!

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

# 자동으로 이런 URL들이 생성됨
# GET    /todo/      목록 조회
# POST   /todo/      생성
# GET    /todo/1/    상세 조회
# PUT    /todo/1/    수정
# DELETE /todo/1/    삭제

7️⃣ Serializer란?

DRF에만 있는 핵심 개념!

DB 데이터                  JSON
────────────────────────────────
<Todo: 공부하기>  →  {"name": "공부하기"}
(Python 객체)         (JSON 데이터)

역할
────────────────────────
① 데이터 변환 (Python ↔ JSON)
② 데이터 유효성 검사
③ 데이터 저장
class TodoSerializer(serializers.ModelSerializer):
    class Meta:
        model = Todo           # 어떤 모델?
        fields = "__all__"     # 어떤 필드?

8️⃣ 언제 뭘 쓰나?

Django 사용                DRF 사용
──────────────────────────────────────
웹사이트만 만들 때          앱도 같이 만들 때
HTML 페이지 필요할 때       API 서버 만들 때
혼자 쓰는 서비스            여러 플랫폼 서비스
블로그, 쇼핑몰              카카오, 인스타그램

🗺️ 전체 흐름 비교

Django
──────────────────────────────────────
요청 → URL → View → Model → Template → HTML


DRF
──────────────────────────────────────
요청 → URL → View → Model → Serializer → JSON


차이점
Template → Serializer 로 바뀐 것!
HTML     → JSON       으로 바뀐 것!

💡 핵심 요약

Django
────────────────────────
HTML 만드는 도구
눈에 보이는 화면 제공
템플릿(HTML) 이 핵심

DRF
────────────────────────
데이터 주고받는 도구
JSON 데이터 제공
Serializer 가 핵심

결론
────────────────────────
Django  = 완성된 음식 제공 🍱
DRF     = 재료(데이터)만 제공 🥩
         (요리는 앱/프론트가 함)
profile
개발언어를 배우는 과정 기록

0개의 댓글