본문으로 건너뛰기
김신건의 로그

Django

· 수정 · 📖 약 4분 · 1,212자/단어 #django #python #web-framework #mtv #batteries-included
장고, django, Django, Django 프레임워크, Django 웹 프레임워크

정의

Django 는 2003년 시작된 Python 풀스택 웹 프레임워크. batteries-included (ORM, 관리자, 인증, 폼, 마이그레이션, 캐싱 등 기본 내장)와 MTV (Model-Template-View) 패턴이 특징. Instagram, Pinterest, Mozilla 등 대규모 운영 사례. 현재 LTS 5.2 (2025-04).

이 페이지는 Django 전체 위키의 색인이다. 각 영역은 별도 페이지에서 자세히 다룬다.

역사

연도사건
2003Adrian Holovaty, Simon Willison 이 Lawrence Journal-World 신문사 내부 도구로 개발 시작
2005BSD 라이선스로 오픈소스 공개. “Django” 이름은 기타리스트 Django Reinhardt 에서 유래
2008Django Software Foundation 설립
20131.5 에서 Python 3 지원 시작
2022Python 2 완전 드롭 (4.0)
20234.2 LTS, 5.0 출시
20255.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

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 패턴).

폼과 검증

인증과 권한

미들웨어와 신호

관리자

정적/미디어 파일

캐싱과 성능

비동기와 실시간

REST API (DRF)

국제화 / 이메일 / 로깅

보안

테스팅과 배포

버전 정책

버전출시지원 종료비고
4.2 LTS2023-042026-04이전 LTS
5.02023-122025-04EOL
5.12024-082025-12EOL
5.2 LTS2025-042028-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
DjangoFlaskFastAPI
스타일배터리 포함마이크로API 우선
ORM내장SQLAlchemy 등외부
관리자내장XX
비동기부분 (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

학습 경로

  1. django-overview - 프로젝트 시작
  2. django-models-fields + django-queryset - 데이터 접근
  3. django-views + django-urls + django-templates - MTV
  4. django-forms - 사용자 입력
  5. django-auth - 인증
  6. django-rest-framework - REST API
  7. django-testing - 테스트
  8. django-deployment - 배포

관련 위키

이 글의 용어 (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…

이 개념을 다룬 위키 페이지 (2)

💬 댓글

사이트 검색 / 명령어

검색

스크롤 = 확대/축소 · 드래그 = 이동 · 0 = 원래 크기 · ESC = 닫기