Django 6.0 정식 출시 - 미리보기와 달라진 점
Django 6.0이 2025년 12월 3일 정식 출시되었다.
작년 10월에 알파 버전 기준으로 미리보기 블로그를 작성했었는데(신규 기능, 하위호환), 정식 출시 3개월이 지난 지금 정식 릴리스 노트와 비교해서 달라진 점을 정리한다.
정식 릴리스 노트 : https://docs.djangoproject.com/en/6.0/releases/6.0/
전체 내용이 아닌 미리보기 대비 달라진 부분만 다룬다. 전체 내용은 이전 미리보기 글과 공식 문서를 참고.
1. Python 3.14 지원 추가 🐍
미리보기 당시에는 Python 3.12, 3.13만 지원했으나, 정식 버전에서는 Python 3.14도 공식 지원 목록에 추가되었다.
1 | |
Python 3.14는 2025년 10월에 정식 출시되었으므로, Django 6.0 정식 릴리스 시점에 맞춰 지원이 추가된 것으로 보인다.
2. Python 3.12 최소 호환 라이브러리 버전 명시
미리보기에서는 "파이썬 3.12 이상만 지원"이라고만 언급했지만, 정식 릴리스에서는 주요 서드파티 라이브러리의 최소 호환 버전이 명확하게 나열되었다. 마이그레이션 시 아래 버전 이상인지 반드시 확인해야 한다.
| 라이브러리 | 최소 버전 |
|---|---|
| aiosmtpd | 1.4.5 |
| argon2-cffi | 23.1.0 |
| bcrypt | 4.1.1 |
| docutils | 0.22 |
| geoip2 | 4.8.0 |
| Pillow | 10.1.0 |
| mysqlclient | 2.2.1 |
| numpy | 1.26.0 |
| PyYAML | 6.0.2 |
| psycopg | 3.1.12 |
| psycopg2 | 2.9.9 |
| redis-py | 5.1.0 |
| selenium | 4.23.0 |
| sqlparse | 0.5.0 |
| tblib | 3.0.0 |
requirements.txt 나 pyproject.toml 에서 위 라이브러리 버전이 최소 기준을 충족하는지 점검 필수.
3. 주요 기능 상세화
3-1. Content Security Policy (CSP) - 코드 예제와 가이드 추가
미리보기에서는 “미들웨어와 설정만으로 보안 정책 적용 가능” 정도로만 소개했지만, 정식 버전에서는 구체적인 구성 방법이 문서화되었다.
- 미들웨어 :
ContentSecurityPolicyMiddleware - 컨텍스트 프로세서 :
csp()(nonce 지원) - 설정 :
SECURE_CSP,SECURE_CSP_REPORT_ONLY django.utils.csp.CSP상수 (SELF, NONCE 등)
1 | |
위 설정은 아래와 같은 헤더를 생성한다:
1 | |
공식 CSP 가이드와 레퍼런스도 새로 추가되어 뷰별 데코레이터로 정책을 오버라이드하거나 비활성화하는 방법도 확인 가능하다.
3-2. Template Partials - 외부 참조 문법 추가
미리보기에서 {% partialdef %}, {% partial %} 태그를 소개했었는데, 정식 버전에서는 외부에서 파셜을 참조하는 문법이 추가로 문서화되었다.
1 | |
1 | |
기존에 django-template-partials 서드파티 패키지를 사용하고 있었다면, 마이그레이션 가이드도 제공된다.
3-3. Background Tasks - 설정과 제한 사항 명확화
미리보기에서 @task 데코레이터를 소개했었는데, 정식 버전에서는 추가적인 내용이 명확해졌다.
- 백엔드 설정 :
TASKS설정으로 구성 - 내장 백엔드 2개는 개발/테스트용으로만 제공
- Django는 워커(worker) 메커니즘을 제공하지 않음 — 실행은 외부 인프라(별도 프로세스/서비스)에서 관리해야 함
1 | |
그러면 Celery를 직접 사용하는 것과 뭐가 다른가?
한마디로 **“Django가 태스크 큐의 ORM을 만든 것”**이라고 보면 된다.
Django ORM이 PostgreSQL, MySQL 등 다양한 DB에 대한 추상화 계층을 제공하듯이, Django Tasks는 Celery 등 다양한 워커에 대한 표준 추상화 계층을 제공한다.
| Django ORM 비유 | Django Tasks | |
|---|---|---|
| 추상화 계층 | ORM (Django 제공) | Tasks 프레임워크 (Django 제공) |
| 백엔드 설정 | DATABASES 설정 |
TASKS 설정 |
| 실제 실행 | PostgreSQL, MySQL 등 | Celery, 기타 워커 등 |
| 교체 | DB 백엔드만 바꾸면 됨 | Task 백엔드만 바꾸면 됨 |
Celery 직접 사용 시 — 특정 구현체에 강결합
1 | |
Django Tasks 사용 시 — 백엔드 교체 가능
1 | |
1 | |
내장 백엔드 2가지
| 백엔드 | 용도 | 동작 |
|---|---|---|
ImmediateBackend |
개발/테스트 | enqueue 즉시 동기 실행 |
DummyBackend |
테스트 | 실행하지 않고 결과만 저장 |
서드파티 백엔드 (2026년 3월 현재)
Django Community Ecosystem 에 등록된 프로덕션용 백엔드는 현재 3가지다.
| 백엔드 | 큐 저장소 | 특징 |
|---|---|---|
| django-tasks-db | DB (ORM) | 별도 인프라 없이 DB만으로 사용 가능. 간단한 백그라운드 작업에 적합 |
| django-tasks-rq | Redis (RQ 기반) | Redis를 큐로 사용. Valkey 등 Redis 호환 저장소도 사용 가능할 것으로 보임 |
| django-tasks | — | Django 6.0 이전 버전을 위한 django.tasks의 백포트 패키지 |
Celery 전용 백엔드는 아직 공식 등록되어 있지 않지만, BaseTaskBackend을 상속해서 커스텀 백엔드를 직접 구현하거나, 커뮤니티에서 추가될 가능성이 있다. 현시점에서는 django-tasks-db(간단한 경우)나 django-tasks-rq(Redis 인프라가 있는 경우)가 현실적인 선택지다.
참고 : https://djangopackages.org/grids/g/task-framework/
4. 신규 기능 추가 사항
4-1. ForeignObject 다중 from_fields 시스템 체크 에러 (신규)
미리보기에는 없었던 항목으로, ForeignObject에서 여러 from_fields를 사용할 때 Model의 indexes, constraints, unique_together에서 시스템 체크 에러가 발생하도록 변경되었다.
1 | |
4-2. StringAgg delimiter 폐기 (신규)
미리보기에서는 StringAgg가 PostgreSQL 전용에서 범용으로 변경된다는 것만 다뤘지만, 정식 버전에서는 기존 PostgreSQL StringAgg의 delimiter 인자에 문자열을 직접 전달하는 것이 폐기되었다.
1 | |
범용 StringAgg 클래스와의 호환성을 위해 Value() 또는 표현식을 사용해야 한다.
5. 하위 호환 변경 사항
5-1. Field.pre_save() 멱등성 요구 (신규)
미리보기에 없었던 새로운 항목이다.
Field.pre_save()가 모델 인스턴스 저장 시 여러 번 호출될 수 있게 변경되었으므로, 커스텀 구현은 반드시 멱등(idempotent) 이어야 하고 부수 효과(side effects)가 없어야 한다.
공식 문서에서 pre_save()의 대표적인 사용 예시로 언급하는 것은 DateTimeField의 auto_now 구현이다. auto_now는 호출할 때마다 현재 시각을 반환하므로 여러 번 호출되어도 "항상 현재 시각을 세팅한다"는 의미에서 부수효과 없이 멱등하다.
아래는 공식 문서의 원칙을 기반으로 한 응용 예시다.
1 | |
1 | |
5-2. Miscellaneous 섹션 간소화
미리보기에서 하위 호환 Miscellaneous 항목으로 다뤘던 다음 들이 정식 릴리스에서 재분류되거나 제거되었다.
| 미리보기 위치 | 정식 위치 | 항목 |
|---|---|---|
| 하위 호환 Misc | Minor features (admin) | messages.DEBUG/INFO 구분 CSS |
| 하위 호환 Misc | Minor features (gis) | GIS 위젯 인라인 JS 제거 |
| 하위 호환 Misc | Minor features (staticfiles) | collectstatic 출력 간소화 |
| 하위 호환 Misc | 제거됨 | parse_header_parameters() 10000자 제한 |
정식 릴리스의 Miscellaneous 하위 호환 섹션은 다음 3가지만 남았다:
- JSON 직렬화 출력 끝에 개행 추가
- asgiref 최소 버전 3.8.1 → 3.9.1
- Field.pre_save() 멱등성 요구 (신규)
6. 정리
| 구분 | 변경 사항 |
|---|---|
| Python 버전 | 3.14 지원 추가 |
| 라이브러리 호환 | 15개 서드파티 라이브러리 최소 버전 명시 |
| CSP | 설정/미들웨어/상수 코드 예제 및 가이드 추가 |
| Template Partials | template_name#partial_name 외부 참조 문법 |
| Background Tasks | TASKS 설정, 내장 백엔드는 개발용, 워커 미제공 명시 |
| ForeignObject | 다중 from_fields 시스템 체크 에러 (신규) |
| StringAgg delimiter | 문자열 대신 Value() 사용 폐기 안내 (신규) |
| Field.pre_save() | 멱등성 요구 (신규 하위 호환) |
| Misc 하위 호환 | 여러 항목이 Minor features로 재분류 |
결론적으로 미리보기 대비 근본적으로 큰 변경은 없었지만, Python 3.14 지원, 의존 라이브러리 최소 버전 명시, CSP·Tasks 등의 주요 기능 상세 문서화, 그리고 Field.pre_save() 멱등성이라는 꽤 중요한 하위 호환 항목이 추가되었다.
특히 Field.pre_save()를 커스터마이징하고 있는 프로젝트라면 반드시 점검이 필요하다.