- 웹 프레임워크 Django의 6.0 버전이 공개되어 Python 3.12 이상을 지원하고, 보안·템플릿·비동기 기능이 대폭 강화됨
-
Content Security Policy(CSP) 가 기본 내장되어 XSS 등 콘텐츠 주입 공격 방어를 위한 정책 설정이 가능함
-
Template Partials 기능으로 템플릿 내 재사용 가능한 부분 정의가 가능해져 코드 모듈화가 향상됨
-
Background Tasks 프레임워크가 추가되어 요청-응답 사이클 외부에서 비동기 작업 실행을 지원함
- Python 최신 이메일 API 도입, MariaDB 10.5 지원 종료, DEFAULT_AUTO_FIELD 기본값 변경 등으로 호환성 조정과 현대화가 이루어짐
Python 호환성
- Django 6.0은 Python 3.12, 3.13, 3.14를 지원하며, 각 시리즈의 최신 릴리스만 공식 지원
- Django 5.2.x는 Python 3.10 및 3.11을 지원하는 마지막 버전임
- Django 6.0 이후 서드파티 앱은 Django 5.2 이전 버전 지원을 중단할 것을 권장함
주요 신규 기능
Content Security Policy(CSP) 지원
- Django에 CSP 표준이 내장되어 XSS 등 콘텐츠 주입 공격 방어 강화
-
ContentSecurityPolicyMiddleware, csp() 컨텍스트 프로세서, SECURE_CSP 설정을 통해 정책 정의 가능
- Python 딕셔너리 기반 설정으로 명확하고 안전한 정책 구성 지원
-
SECURE_CSP_REPORT_ONLY로 모니터링 모드 설정 가능
- 뷰 단위로 정책을 재정의하거나 비활성화할 수 있는 데코레이터 제공
Template Partials
-
템플릿 일부(fragment) 를 정의하고 재사용할 수 있는 partialdef 및 partial 태그 추가
-
template_name#partial_name 구문으로 get_template(), render(), {% include %} 등에서 직접 참조 가능
- 기존 서드파티 패키지 django-template-partials 사용자용 마이그레이션 가이드 제공
Background Tasks 프레임워크
- Django에 비동기 작업 실행용 내장 프레임워크 추가
- HTTP 요청-응답 사이클 외부에서 이메일 전송, 데이터 처리 등 수행 가능
-
@task 데코레이터로 작업 정의, enqueue()로 큐에 등록
- 백엔드는 TASKS 설정으로 지정하며, 개발·테스트용 기본 백엔드 2종 포함
- Django는 작업 생성과 큐잉만 담당하며, 실행은 외부 워커 프로세스가 수행해야 함
Python 최신 이메일 API 채택
- Django의 이메일 처리 로직이 Python 3.6 이후의 현대적 이메일 API(email.message.EmailMessage)로 전환
- 이전 SafeMIMEText, SafeMIMEMultipart 클래스는 더 이상 사용되지 않음
-
EmailMessage.message() 반환 타입이 Python의 EmailMessage 인스턴스로 변경됨
세부 개선 사항
Admin
-
Font Awesome Free 6.7.2 아이콘 세트 적용
-
AdminSite.password_change_form 속성으로 관리자 비밀번호 변경 폼 커스터마이즈 가능
-
messages.DEBUG와 messages.INFO에 별도 아이콘 및 CSS 스타일 적용
Auth
-
PBKDF2 해시 반복 횟수가 1,000,000 → 1,200,000으로 증가
GIS
-
GEOSGeometry.hasm 속성으로 M 차원 여부 확인 가능
-
Rotate 함수로 지정 각도 회전 지원
-
BaseGeometryWidget.base_layer 속성으로 지도 타일 제공자 커스터마이즈 가능
- MariaDB 12.0.1 이상에서 coveredby, isvalid, GeoHash, IsValid 등 기능 지원
- 위젯 렌더링 시 인라인 JavaScript 제거, 커스터마이즈 시 템플릿 수정 필요
PostgreSQL
-
Lexeme 표현식 추가로 전체 텍스트 검색어 제어 강화
-
CreateExtension 등 확장 관련 연산에 hints 매개변수 추가
-
django.contrib.postgres 관련 필드·인덱스·제약조건에 시스템 체크 추가
Staticfiles
-
ManifestStaticFilesStorage가 경로 정렬 일관성을 보장해 불필요한 diff 감소
-
collectstatic 명령이 기본적으로 요약만 출력, 세부 정보는 --verbosity 2 이상에서 표시
기타
-
Haitian Creole 언어 지원 추가
-
startproject, startapp 명령이 존재하지 않는 디렉터리 자동 생성
-
shell 명령에서 django.conf.settings 등 기본 유틸 자동 임포트
- 마이그레이션에서 zoneinfo.ZoneInfo 직렬화 지원
-
StringAgg, AnyValue 등 새로운 집계 함수 추가
-
AsyncPaginator, AsyncPage로 비동기 페이지네이션 지원
- ASGI 환경에서 HTTP/2 다중 Cookie 헤더 지원
- 템플릿 내 forloop.length 변수 추가, querystring 태그 개선
-
DiscoverRunner가 forkserver 방식 병렬 테스트 지원
비호환 변경 사항
데이터베이스 백엔드 API
-
BaseDatabaseSchemaEditor 및 PostgreSQL 백엔드가 컬럼 삭제 시 CASCADE 사용 중단
-
return_insert_columns() → returning_columns() 등 메서드명 변경
-
UPDATE … RETURNING 지원 시 DatabaseFeatures.can_return_rows_from_update=True 설정 가능
지원 중단
-
MariaDB 10.5 지원 종료 (10.6 이상 필요)
-
Python 3.12 미만 지원 종료
- 주요 라이브러리 최소 버전: aiosmtpd 1.4.5, bcrypt 4.1.1, Pillow 10.1.0, psycopg 3.1.12 등
Email
-
mixed_subtype, alternative_subtype, encoding 속성 제거
- 내부 구현 변경으로 커스텀 EmailMessage 서브클래스 점검 필요
DEFAULT_AUTO_FIELD 기본값 변경
- 기본값이 AutoField → BigAutoField로 변경
- Django 3.2 이후 경고(models.W042)를 처리하지 않은 프로젝트는 설정 추가 필요
ORM 표현식
-
as_sql() 메서드의 반환 파라미터는 tuple 형식이어야 함
기타
- JSON 직렬화 시 항상 개행 추가
-
asgiref 최소 버전 3.9.1로 상향
폐기 예정 기능
django.core.mail API
-
get_connection(), send_mail() 등에서 선택적 인자는 키워드 인자로만 전달해야 함
-
EmailMessage, EmailMultiAlternatives 생성 시 첫 4개 인자 외에는 키워드 인자만 허용
기타
-
BaseDatabaseCreation.create_test_db(serialize) 폐기, serialize_db_to_string() 사용
- PostgreSQL 전용 StringAgg, OrderableAggMixin 폐기
-
urlize, urlizetrunc 기본 프로토콜이 Django 7.0에서 HTTPS로 변경 예정
-
ADMINS, MANAGERS 설정은 (이름, 주소) 튜플 대신 이메일 문자열 리스트로 지정해야 함
-
SafeMIMEText, SafeMIMEMultipart, BadHeaderError 등 이메일 관련 클래스 폐기
제거된 기능
-
BaseConstraint의 위치 인자 지원 제거
-
DjangoDivFormRenderer, Jinja2DivFormRenderer 삭제
-
cx_Oracle 데이터베이스 드라이버 지원 제거
-
forms.URLField 기본 스킴이 "http" → "https"로 변경
-
Model.save() 및 Model.asave()의 위치 인자 지원 제거
-
ModelAdmin.log_deletion(), LogEntryManager.log_action() 삭제
-
django.utils.itercompat 모듈 제거
-
GeoIP2.coords(), GeoIP2.open() 메서드 삭제
-
ForeignObject.get_joining_columns() 및 관련 메서드 제거
Django 6.0은 보안 강화, 비동기 처리, 현대적 이메일 API 도입을 통해 프레임워크의 안정성과 확장성을 높였으며, Python 3.12 이상 환경으로의 전환을 명확히 함.