장고 기초 #1 Django 란 — Why Django, FastAPI와의 비교
모던 파이썬 실전 시리즈에서 FastAPI로 작은 API를 만들면서 타입 힌트와 비동기를 한곳에 모았습니다. 이번 장고 기초 시리즈는 같은 파이썬을 쓰지만 풀스택 모놀리스를 짓는 방식 — Django — 를 처음부터 다시 봅니다. 7편으로 작은 블로그 한 채를 짓는 흐름입니다.
- #1 Django 란 — Why Django, FastAPI와의 비교 ← 이번 글
- #2 프로젝트 셋업 — uv + django-admin startproject
- #3 Models와 ORM 기초 — migration, ForeignKey, QuerySet
- #4 URL과 Views (FBV)
- #5 Templates와 정적 파일
- #6 Forms와 ModelForm
- #7 Django Admin과 built-in 인증
기초 7편이 끝나면 중급 7편 — CBV, ORM 중급, 시그널, 권한 — 그 다음 고급 7편 — async, 캐싱, Channels, 배포 — 마지막으로 실전 DRF 6편으로 이어집니다. 총 27편. 길지만, 하나의 프로젝트가 자라나는 흐름으로 봐주시면 됩니다.
Django 한 줄 정의 #
Django는 파이썬으로 쓰여진 풀스택 웹 프레임워크입니다. “풀스택"이라는 단어가 핵심입니다. 라우팅, 템플릿, ORM, 마이그레이션, 폼, 인증, 관리자 페이지, 보안 헤더, 정적 파일 처리까지 — 웹 앱 한 채를 짓는 데 필요한 거의 모든 부품이 한 패키지 안에 들어 있습니다. 이걸 Django 진영에서는 batteries included (건전지 포함) 라고 부릅니다.
짧은 역사 #
Django는 2003년 미국 캔자스주의 작은 신문사 Lawrence Journal-World에서 시작됐습니다. Adrian Holovaty와 Simon Willison 두 인턴 개발자가 신문사의 온라인 콘텐츠 관리 시스템을 만들면서, 반복되는 웹 개발 작업을 추상화한 도구를 만들기 시작한 것이 출발점이었습니다.
2005년 7월 21일, Django 0.90이 오픈 소스로 공개됐습니다. 이름은 재즈 기타리스트 Django Reinhardt에서 따왔습니다. 이후 20년 가까운 시간 동안 Django는 Instagram, Pinterest, Mozilla, Disqus, Bitbucket 같은 큰 서비스를 뒷받침해왔습니다. 2026년 현재는 Django 5.x가 주류이고, 이 시리즈도 5.x 기준으로 씁니다.
MTV — Django 식 MVC #
Django는 자기 구조를 MTV (Model-Template-View) 라고 부릅니다. 보통 말하는 MVC와 거의 같은데 이름만 다릅니다.
| Django MTV | 일반 MVC | 용도 |
|---|---|---|
| Model | Model | DB 테이블 정의, ORM |
| Template | View | HTML 렌더링 |
| View | Controller | 요청 처리 로직 |
“View가 Controller 인데?” 하고 처음에는 헷갈리지만, 한 번만 외우면 됩니다. Django의 View는 함수 (또는 클래스)이고, Template이 HTML입니다.
풀스택의 의미 — 무엇이 따라오는가 #
Django 한 줄 설치로 따라오는 것들:
- ORM — Python 클래스로 DB 테이블을 정의, SQL 직접 작성 없이 쿼리
- 마이그레이션 — 모델 변경을 DB 스키마 변경으로 자동 변환
- Admin — 모델만 등록하면 자동으로 따라오는 관리자 페이지 (CRUD UI 무료)
- 인증/권한 — User 모델, 로그인/로그아웃, 그룹/퍼미션
- 세션/쿠키 — built-in
- 폼 — HTML 폼 정의, 검증, 렌더링
- 템플릿 엔진 —
{% if %},{% for %}, 상속 - 보안 — CSRF, XSS, SQL Injection, Clickjacking 기본 방어
- 국제화 (i18n) — 다국어 지원
- 캐싱 — backend 추상화 (Redis, Memcached, DB, 파일)
- 메일 발송, 메시지 프레임워크, 시그널, 미들웨어 …
이걸 다 직접 모으거나 라이브러리로 조립하면 한 달은 걸립니다. Django는 하루에 다 갖춰집니다. 이게 Django의 철학 — 해야 할 일은 이미 다 해뒀다, 너는 비즈니스 로직만 써라.
Django vs Flask vs FastAPI #
FastAPI #1에서 한 번 본 표를, 이번에는 Django의 시각으로 다시 그려봅니다.
| Django | Flask | FastAPI | |
|---|---|---|---|
| 스타일 | 풀스택 (배터리 포함) | 마이크로 | 마이크로 + 타입 |
| 주된 용도 | 풀스택 웹 앱, 사내 도구, CMS | 작은 웹/API | 비동기 API |
| ORM | 빌트인 (강력) | 외부 (SQLAlchemy 등) | 외부 (SQLAlchemy 등) |
| Admin UI | 빌트인 (자동) | 없음 | 없음 |
| 인증/세션 | 빌트인 | 외부 라이브러리 | 외부 + 직접 |
| 폼 처리 | 빌트인 | 외부 (WTForms) | API 위주 (Pydantic) |
| 마이그레이션 | 빌트인 | Alembic 등 외부 | Alembic 등 외부 |
| 비동기 | 부분 (4.0+, 점진 확대) | 외부 | 네이티브 |
| 자동 API 문서 | DRF 등 별도 | 별도 | 빌트인 |
| 학습 곡선 | 가파름 (배울 게 많음) | 매우 평탄 | 평탄 |
| 적합한 팀 규모 | 중,대규모, 장기 운영 | 1인~소규모 | API 중심 팀 |
세 프레임워크는 각자 잘 맞는 지점이 다릅니다. 우열이 아니라 적합한 상황의 차이입니다.
Django가 어울리는 경우 #
다음 중 2개 이상 해당된다면 Django를 우선 고려하세요.
- 관리자 페이지가 필요하다 — 내부 도구, 운영자가 데이터를 직접 보고 수정해야 한다
- 풀스택 모놀리스 한 채로 충분 — 프론트와 백을 굳이 분리하고 싶지 않다
- DB가 핵심 — 스키마, 관계, 트랜잭션이 비즈니스의 중심
- 인증,권한이 복잡 — 사용자, 그룹, 퍼미션, 세션이 많이 얽힌다
- 장기 운영 — 5년 이상 한 코드베이스를 유지보수할 가능성이 크다
- 팀이 크다 — 컨벤션과 구조가 잡혀 있어야 신규 합류가 쉽다
대표 예시 — 사내 ERP, 학습 관리 시스템 (LMS), 콘텐츠 관리 시스템 (CMS), 전자상거래, 예약 시스템, 커뮤니티/블로그 플랫폼.
Django가 약한 경우 #
반대로 다음 경우에는 다른 도구가 더 어울립니다.
- 순수 비동기 API 한 조각 — FastAPI가 더 가볍고 빠릅니다
- 마이크로서비스 한 토막 — Django의 풀스택이 부담입니다
- WebSocket 중심 실시간 — Django Channels로 가능하지만 Node/Go/Elixir 진영이 더 익었습니다
- 초저지연 / 고빈도 호출 — 동기 WSGI의 비용
다만 이 경우도 Django + DRF 또는 Django 5.x async views로 풀 수 있는 경우가 늘고 있습니다 — 고급 #1에서 Async views, 실전 #1에서 DRF로 다룹니다.
“Django와 FastAPI, 결국 뭘 배워야 하나” #
둘 다입니다. 같은 파이썬 위에서 다른 성격의 도구라서 성격이 달라지면 같이 쓸 수 있습니다. 실제 제품에서 자주 보이는 조합:
- Django로 사내 어드민 + FastAPI로 외부 공개 API — 어드민의 풍부한 기능과 API의 비동기/타입 안전을 모두
- Django 모놀리스 + 비동기 작업만 별도 FastAPI 워커 — 책임 분리
- Django + DRF 단일 모놀리스 — 가장 흔한 시작점, 그러다 트래픽이 커지면 분리
이 시리즈는 Django 단독으로 한 채 짓는 흐름이지만, 마지막 실전 DRF 트랙에서는 Django 위에 REST API를 얹는 흐름도 다룹니다.
이번 시리즈가 만드는 것 — 작은 블로그 #
7편으로 만드는 것은 블로그 앱입니다. 사용자, 글, 댓글, 태그, 관리자 페이지까지 정리합니다. 매 글이 그 위에 한 부품씩 쌓는 구성입니다.
| 글 | 추가되는 부품 |
|---|---|
| #2 | 프로젝트 셋업, blog 앱 만들기 |
| #3 | Post, Tag 모델, 마이그레이션 |
| #4 | /posts/, /posts/<id>/ URL + view |
| #5 | 글 목록, 글 상세 HTML 템플릿 |
| #6 | 글 작성/수정 폼 (ModelForm) |
| #7 | Admin 등록 + 로그인 보호 |
기초 7편이 끝나면 작동하는 작은 블로그가 한 채 남습니다. 중급/고급/실전에서는 그 위에 한 층씩 쌓아 올립니다.
알아두면 좋은 어휘 #
읽다 보면 자주 마주칠 단어들 미리.
- project —
manage.py가 있는 최상위. 한 사이트 = 한 project - app — 재사용 가능한 기능 단위. 한 project는 여러 app으로 구성. 예:
blog,accounts,payments - model — DB 테이블에 매핑되는 Python 클래스
- migration — 모델 변화를 SQL로 변환한 파일
- view — 요청 처리 함수 (또는 클래스). FBV / CBV
- template — HTML 템플릿
- URLconf — URL 패턴 → view 매핑
- manage.py — Django의 모든 CLI 진입점
정리 #
이번 글에서 잡은 것:
- Django = 파이썬 풀스택 웹 프레임워크, batteries included
- 2003 Lawrence Journal-World에서 시작, 2005 오픈 소스, 2026 5.x
- MTV = MVC (이름만 다름)
- ORM, Admin, 인증, 폼, 마이그레이션, 보안 — 다 한 패키지에
- Django가 잘 맞는 경우 — 풀스택, 관리자 필요, DB 중심, 장기 운영, 큰 팀
- FastAPI가 잘 맞는 경우 — 비동기 API, 타입 중심, 마이크로
- 둘은 경쟁이 아니라 다른 성격의 도구, 같이 쓸 수도 있음
- 이번 시리즈가 만드는 것 — 작은 블로그 한 채
다음 글(#2 프로젝트 셋업)에서는 모던 파이썬 실전 #1에서 본 같은 uv 도구로 Django 프로젝트를 만들고, manage.py runserver로 첫 페이지를 띄워봅니다.