Django
장고, django, Django, Django 프레임워크, Django 웹 프레임워크
정의
Django 는 2003년 시작된 Python 풀스택 웹 프레임워크. batteries-included (ORM, 관리자, 인증, 폼, 마이그레이션, 캐싱 등 기본 내장)와 MTV (Model-Template-View) 패턴이 특징. Instagram, Pinterest, Mozilla 등 대규모 운영 사례. 현재 LTS 5.2 (2025-04).
이 페이지는 Django 전체 위키의 색인이다. 각 영역은 별도 페이지에서 자세히 다룬다.
역사
| 연도 | 사건 |
|---|---|
| 2003 | Adrian Holovaty, Simon Willison 이 Lawrence Journal-World 신문사 내부 도구로 개발 시작 |
| 2005 | BSD 라이선스로 오픈소스 공개. “Django” 이름은 기타리스트 Django Reinhardt 에서 유래 |
| 2008 | Django Software Foundation 설립 |
| 2013 | 1.5 에서 Python 3 지원 시작 |
| 2022 | Python 2 완전 드롭 (4.0) |
| 2023 | 4.2 LTS, 5.0 출시 |
| 2025 | 5.2 LTS (현재). 비동기 ORM 지원 강화 |
핵심 아키텍처
요청은 URL Dispatcher → View → Model → Template 순서로 처리된다.
flowchart TB
Request["HTTP Request"] --> MW["Middleware Stack"]
MW --> URL["urls.py\n(URL Dispatcher)"]
URL --> V["views.py\n(View)"]
V --> M["models.py\n(ORM)"]
M --> DB[("Database")]
DB --> M
M --> V
V --> T["templates/\n(Template)"]
T --> Response["HTTP Response"]
Response --> MW
- django-overview - 프로젝트 구조, MTV 패턴, manage.py
- django-urls - path/re_path/include, namespace, reverse
- django-views - FBV vs CBV, generic views, decorator
- django-templates - DTL, 태그, 필터, 상속
- django-mixins - LoginRequired, UserPasses, custom mixin
- django-pagination - Paginator, ListView, cursor
Batteries Included (내장 기능)
Django 의 핵심 철학은 “웹 개발에 필요한 것을 다 들고 온다”. 주요 내장 기능:
| 기능 | 설명 |
|---|---|
| ORM | 모델 정의 → SQL 자동 생성, QuerySet API |
| 마이그레이션 | 모델 변경을 DB 스키마 변경으로 추적 |
| 관리자 (Admin) | 모델 기반 CRUD UI 자동 생성 (/admin/) |
| 인증 (Auth) | User, Group, Permission, 세션, 로그인/로그아웃 |
| 폼 (Forms) | HTML 폼 렌더링 + 검증 + 정제 |
| URL Dispatcher | 정규식/경로 패턴으로 뷰 라우팅 |
| 템플릿 엔진 (DTL) | 파이썬 객체 → HTML 렌더링 |
| 미들웨어 | 요청/응답 가로채기 스택 |
| 캐싱 | per-view, fragment, low-level, Redis/Memcached 백엔드 |
| 이메일 | send_mail, SMTP/파일/콘솔 백엔드 |
| 정적/미디어 파일 | collectstatic, MEDIA_ROOT |
| 국제화 (i18n) | gettext, 번역, 시간대 처리 |
| 보안 | CSRF 방지, XSS 이스케이프, SQL injection 방지, 클릭재킹 방어 |
| 시그널 | 모델 이벤트(pre_save, post_delete 등) 훅 |
ORM / Model
데이터 접근 추상화. Active Record 패턴이 아닌 Data Mapper 에 가깝다 (manager 패턴).
- django-models-fields - Field 타입, Meta, 관계
- django-queryset - 기본 쿼리, F/Q, lazy
- django-orm-advanced - N+1, Subquery, Window
- django-aggregations - annotate, aggregate, Case/When
- django-migrations - makemigrations, RunPython, squash
- django-content-types - GenericForeignKey, polymorphic
- django-mvc-model - MTV 패턴, 관계 필드 개요
폼과 검증
- django-forms - Form, ModelForm, formset, widget
인증과 권한
- django-auth - User, AbstractUser, login_required
- django-sessions - 세션 백엔드, signed cookies
미들웨어와 신호
- django-middleware - 요청/응답 가로채기
- django-signals - 모델 이벤트 hook (사용)
- django-signals-internal - 옵저버 패턴 내부 구현 심층 분석
관리자
- django-admin - ModelAdmin, inline, 액션
정적/미디어 파일
- django-static-media - STATIC/MEDIA, whitenoise, S3
캐싱과 성능
- django-cache - per-view, fragment, low-level, Redis
비동기와 실시간
- django-async-views - async view, ASGI, sync_to_async
- django-channels - WebSocket, Consumer, Group
- django-celery - 백그라운드 작업, Beat, retry
REST API (DRF)
- django-rest-framework - Serializer, ViewSet, Router 개요
- django-drf-serializers - 심화: nested, projection, validation
- django-drf-viewset - 심화: action, mixin, nested router
- django-drf-permissions - permission, throttle, filter
국제화 / 이메일 / 로깅
- django-i18n - gettext, 다국어, 시간대
- django-email - send_mail, anymail, Celery 통합
- django-logging - LOGGING 설정, JSON 로그, Sentry
보안
- django-security - CSRF, XSS, SQL injection, header
테스팅과 배포
- django-testing - TestCase, factory_boy, pytest-django
- django-management-commands - 커스텀 manage.py 명령
- django-settings - 환경 분리, secrets, 12-factor
- django-deployment - Gunicorn, Uvicorn, whitenoise, Docker
버전 정책
| 버전 | 출시 | 지원 종료 | 비고 |
|---|---|---|---|
| 4.2 LTS | 2023-04 | 2026-04 | 이전 LTS |
| 5.0 | 2023-12 | 2025-04 | EOL |
| 5.1 | 2024-08 | 2025-12 | EOL |
| 5.2 LTS | 2025-04 | 2028-04 | 현재 LTS |
LTS 는 3년 지원. 프로덕션은 LTS 권장. LTS 가 아닌 버전은 약 8개월 지원.
Django vs 대안
flowchart LR
subgraph "풀스택 / Batteries-Included"
D["Django\n(Python)"]
R["Rails\n(Ruby)"]
end
subgraph "마이크로 / 경량"
F["Flask\n(Python)"]
FA["FastAPI\n(Python)"]
E["Express\n(Node.js)"]
end
subgraph "엔터프라이즈"
S["Spring Boot\n(Java)"]
N["NestJS\n(Node.js/TS)"]
end
| Django | Flask | FastAPI | |
|---|---|---|---|
| 스타일 | 배터리 포함 | 마이크로 | API 우선 |
| ORM | 내장 | SQLAlchemy 등 | 외부 |
| 관리자 | 내장 | X | X |
| 비동기 | 부분 (3.1+) | 부분 | 네이티브 |
| 학습 곡선 | 중 | 낮 | 중 |
| 타입 힌트 | 선택적 | 선택적 | 필수 (Pydantic) |
| 문서화 | 별도 설정 | 별도 설정 | 자동 (OpenAPI) |
| 적합 | 일반 웹앱, CMS | 작은 API/앱 | API, 마이크로서비스 |
다른 언어 비교: ruby-on-rails (Ruby), spring-overview (Java).
Django 에서 비동기 사용
3.1+ 에서 async view 지원, 4.1+ 에서 async ORM 지원 (일부):
# async view
async def post_list(request):
posts = [p async for p in Post.objects.filter(published=True)]
return JsonResponse({'posts': [str(p) for p in posts]})
완전한 async 가 필요하면 FastAPI/Starlette 또는 django-channels 활용.
빠른 시작
pip install django
django-admin startproject myproject
cd myproject
python manage.py startapp blog
python manage.py runserver # http://127.0.0.1:8000/
# blog/models.py
from django.db import models
class Post(models.Model):
title = models.CharField(max_length=200)
body = models.TextField()
created = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.title
python manage.py makemigrations blog
python manage.py migrate
python manage.py createsuperuser
학습 경로
- django-overview - 프로젝트 시작
- django-models-fields + django-queryset - 데이터 접근
- django-views + django-urls + django-templates - MTV
- django-forms - 사용자 입력
- django-auth - 인증
- django-rest-framework - REST API
- django-testing - 테스트
- django-deployment - 배포
관련 위키
- django-overview - 프로젝트 구조 전체
- django-mvc-model - MTV 패턴 + Model 기본
- django-models-fields - 필드 타입 심화
- django-queryset - QuerySet API
- django-rest-framework - DRF 개요
- django-testing - 테스트 전략
- django-deployment - 배포 가이드
- ruby-on-rails - Rails 비교
- spring-overview - Spring 비교
이 글의 용어 (39개)
- [Django] 개요와 프로젝트 구조django
- 정의 Django는 2003년 시작된 Python 풀스택 웹 프레임워크. "Web framework for perfectionists with deadlines"라는 모토대로 b…
- [Django] 마이그레이션: makemigrations, migrate, 데이터 마이그레이션django
- 정의 Django 마이그레이션은 모델 변경을 DB 스키마 변경으로 변환·기록하는 시스템. 는 모델과 현재 마이그레이션 상태를 비교해 새 마이그레이션 파일 생성. 는 DB에 적용.…
- [Django] 배포: Gunicorn, Uvicorn, whitenoise, Dockerdjango
- 정의 Django 프로덕션 배포는 WSGI/ASGI 서버 + 리버스 프록시 + 정적 파일 + DB + 캐시 + 큐 조합. runserver는 개발 전용. nginx + gunic…
- [Django] 보안: CSRF, XSS, SQL injection, headersdjango
- 정의 Django는 OWASP Top 10 대부분을 기본 방어한다: CSRF 토큰, ORM의 SQL 인젝션 방지, 템플릿 자동 escape, 비밀번호 해싱, 세션 쿠키 보안 등.…
- [Django] 인증: User, login, permissionsdjango
- 정의 Django는 User 모델, 인증·세션, 권한·그룹을 기본 제공한다. 앱이 핵심. 비밀번호 해싱(PBKDF2, scrypt, Argon2), 세션, 권한, 그룹, 비밀번호…
- [Django] 테스트: TestCase, Client, factory_boydjango
- 정의 Django는 표준 라이브러리 기반 TestCase를 제공한다. 트랜잭션 격리, fixtures, test client, DB 셋업 자동화. 실무는 + 가 사실상 표준. 기…
- [Django] Admin: 자동 생성 관리자 페이지django
- 정의 Django Admin은 모델 등록만으로 CRUD UI 자동 생성하는 내장 백오피스. 내부 운영 도구, 콘텐츠 관리(CMS) 등에 강력. 권한 시스템 통합. Rails에는 …
- [Django] Aggregation: annotate, aggregate, F, Q, Windowdjango
- 정의 Django ORM의 annotate / aggregate / F / Q / Window는 SQL의 GROUP BY, 집계 함수, 동적 조건, 컬럼 참조, Window 함수…
- [Django] async views와 ASGIdjango
- 정의 Django 3.1+ 부터 async view를 지원한다. 로 view를 정의하면 ASGI 서버(Uvicorn, Daphne, Hypercorn) 아래에서 코루틴으로 실행.…
- [Django] Caching: per-site, per-view, low-leveldjango
- 정의 Django 캐싱은 데이터/페이지 재생성 비용 회피의 핵심. 4단계 그래뉴얼리티 제공: site-wide → per-view → template fragment → low-…
- [Django] Celery: 비동기 태스크와 큐django
- 정의 Celery는 Python의 분산 태스크 큐. 비동기·예약·재시도 작업을 워커가 처리. Django와 통합되어 이메일 발송, 이미지 처리, ML 추론, 스크래핑 같은 무거운…
- [Django] Channels: WebSocket, Consumer, Groupdjango
- 정의 Django Channels는 Django에 WebSocket, 비동기 프로토콜, 백그라운드 작업을 추가하는 공식 확장. 기본 Django는 HTTP만, Channels는 …
- [Django] ContentTypes, Generic Relationsdjango
- 정의 는 모든 모델을 동적으로 참조하는 시스템. 댓글이 Post, Photo, Video 등 여러 모델을 가리킬 수 있게 함. + 을 활용. 활성화 기본 에 포함됨: 각 모델마다…
- [Django] DRF 개요: Serializer, ViewSet, Routerdjango
- 학습 로드맵 이 페이지는 개요. 처음 접하는 사람은 아래 순서로 읽으면 자연스럽다: DRF 는 파이프라인이 핵심. 한번 그림으로 보면 이해가 쉽다: 정의 Django REST F…
- [Django] DRF Permission, Throttle, Filterdjango
- 정의 DRF는 view 호출 전 인증(Authentication) → 권한(Permission) → 스로틀(Throttle) 순으로 검사. 각 단계가 통과해야 view 메서드 실…
- [Django] DRF Serializer 심화django
- 정의 DRF Serializer는 JSON ↔ Python ↔ Model의 변환과 검증을 담당한다. Django Form과 비슷한 인터페이스이나 API/JSON에 특화. 검증, …
- [Django] DRF ViewSet, Router, @actiondjango
- 정의 ViewSet은 같은 리소스의 관련 view들을 클래스 하나로 묶는다. Django의 generic views와 비슷하나 / / / / / action 메서드로 통일. Ro…
- [Django] Email: send_mail, EmailMessage, 템플릿django
- 정의 Django의 은 SMTP, 콘솔, 파일, 메모리, dummy 등 다양한 백엔드를 통합한 이메일 전송 API. 외부 서비스(SendGrid, Mailgun, AWS SES,…
- [Django] Form과 ModelFormdjango
- 정의 Django Form은 사용자 입력 정의·검증·렌더링·바인딩을 통합. 일반 은 임의 필드, 은 모델 자동 매핑. 검증과 보안(CSRF, SQL 인젝션 방지) 내장. Form…
- [Django] i18n: 다국어와 시간대django
- 정의 Django는 gettext 기반 국제화(i18n)와 지역화(l10n) 표준 시스템을 제공한다. 코드/템플릿의 문자열을 추출해 파일로 번역, 컴파일된 파일을 런타임에 사용.…
- [Django] Logging: LOGGING 설정과 구조화 로그django
- 정의 Django는 Python 모듈을 그대로 사용하나 설정 dict로 일괄 구성한다. 구조화 로그(JSON), 외부 서비스(Sentry, Datadog, CloudWatch) …
- [Django] Management Commandsdjango
- 정의 Django 커스텀 명령은 형태로 실행되는 CLI 도구. 정기 작업(cron + management command), 데이터 마이그레이션, import/export, 디버깅…
- [Django] Middleware: 요청/응답 가로채기django
- 정의 Middleware는 모든 요청/응답을 가로채는 체인 구조 처리기. 요청은 위 → 아래, 응답은 아래 → 위로 흐른다. 인증, 세션, CSRF, gzip 압축, 보안 헤더 …
- [Django] Mixin 패턴: LoginRequired, UserPasses, Customdjango
- 정의 Django Mixin은 CBV에 공통 기능을 추가하는 작은 클래스. 다중 상속으로 조합. 인증, 권한, 로깅, 메시지 등에 활용. MRO(Method Resolution …
- [Django] Model과 Field 타입django
- 정의 Django 모델은 DB 테이블의 Python 표현이다. 상속, 클래스 속성 = 컬럼, 메타 클래스 = 테이블 설정. 모델 정의 후 + 로 DB 스키마 자동 생성. 기본 정…
- [Django] MTV 패턴과 Model 기본django
- 정의 Django 는 MTV (Model, Template, View) 패턴 사용. 다른 프레임워크의 MVC 와 이름만 다르고 개념은 유사. | MVC | Django MTV |…
- [Django] ORM 심화: N+1, prefetch, Subquery, Windowdjango
- 정의 Django ORM은 SQL을 잘 모르는 개발자에게도 안전하지만 비효율을 숨기기 쉽다. N+1, 비효율 JOIN, 큰 결과셋 메모리 폭발이 흔한 함정. selectrelat…
- [Django] Pagination: Paginator, ListView, DRFdjango
- 정의 Django는 빌트인 클래스와 ListView의 자동 페이지네이션을 제공한다. DRF는 PageNumber / LimitOffset / Cursor 3종. 페이지네이션은 큰…
- [Django] QuerySet과 Managerdjango
- 정의 QuerySet은 DB 쿼리를 lazy하게 빌드하는 객체. , 같은 메서드를 체이닝해도 실제 SQL 실행은 평가 시점( , , , slice 등)에 한 번 발생. Manag…
- [Django] Sessions와 Cookiesdjango
- 정의 Django Session은 서버 측 사용자 상태 저장. 클라이언트엔 세션 ID만 쿠키로 저장, 실제 데이터는 백엔드(DB, cache, file, cookie). 인증, …
- [Django] settings 관리: 환경 분리, secrets, 12-factordjango
- 정의 Django settings는 단일 Python 파일에 모든 설정을 두는 게 기본이지만, 환경별 분리·비밀 정보 분리·12-factor 원칙 적용이 실무 표준. 개발/스테이…
- [Django] Signals 내부 구현: 옵저버 패턴 심층 분석django
- 정의 Django signal은 GoF의 옵저버(Observer) 패턴을 Python의 동적 디스패치, weakref, threading.lock으로 구현한 것이다. 일반 사용은…
- [Django] Signals: 모델 이벤트 hookdjango
- 정의 Django signal은 발신자(sender)가 특정 이벤트를 알리면 등록된 수신자(receiver)들이 호출되는 옵저버 패턴. 모델 저장/삭제, 요청 시작/종료, 마이그…
- [Django] Static과 Media 파일django
- 정의 Django는 정적 파일을 두 카테고리로 구분한다. - Static: 앱·테마의 일부인 CSS/JS/이미지. 배포 시 으로 한 곳에 모음. - Media: 사용자가 업로드한…
- [Django] Template 언어: 태그, 필터, 상속django
- 정의 Django Template Language (DTL)는 HTML과 Python 사이의 안전한 표현 언어. 임의 Python 실행 차단(보안), 로 변수, 로 태그, 로 필…
- [Django] URL 디스패치: path, re_path, includedjango
- 정의 Django는 URL 패턴 리스트로 요청을 view에 라우팅한다. 1.01.x는 (regex만), 2.0+ (간결한 converter 문법)와 (regex) 두 방식. 기본…
- [Django] View: 함수 기반 vs 클래스 기반django
- 정의 Django View는 HTTP 요청을 받아 응답을 반환하는 callable. 두 스타일이 공존. - FBV (Function-Based View): 일반 함수. 간단하고 …
- [Spring] 개요: Framework, Boot, Cloudspring
- 정의 Spring은 Java 엔터프라이즈 표준 프레임워크 그룹. 2003년 Rod Johnson이 EJB 대안으로 시작. IoC/DI가 핵심. 현재는: - Spring Frame…
- Ruby on Railsrails
- 정의 Ruby on Rails (또는 Rails)는 Ruby 언어 기반의 풀스택 웹 프레임워크다. David Heinemeier Hansson (DHH)이 2004년 Baseca…
💬 댓글