01-Django 6.0 미리보기 - 신규 기능

Django 6.0 알파버전이 출시되었고 정식 문서가 배포 되었다.
정식 버전은 2025년 12월 배포 예정.
https://docs.djangoproject.com/en/6.0/releases/6.0/

Django 6.0은 Python 3.12, 3.13 을 공식적으로 지원하고 두 버전을 사용하는 것을 추천한다.
5.2 버전까지는 3.10, 3.11 을 공식적으로 지원한다.

서드파티 앱은 python -Wd 명령을 실행해서 Django 6.0에서의 호환성 문제를 확인해야 한다.

6.0 신규 기능

Content Security Policy support

  • XSS 등 콘텐츠 주입 공격 방어를 위한 CSP 표준 지원이 내장되어 미들웨어와 설정만으로 보안 정책 적용 가능

Template Partials

  • 템플릿 파일 내에서 {% partialdef %}{% partial %}로 작은 코드 조각을 정의하고 재사용할 수 있어 별도 파일 분리 없이 모듈화 가능

Background Tasks

  • HTTP 요청-응답 사이클 밖에서 이메일 발송이나 데이터 처리 등을 백그라운드에서 실행할 수 있는 @task 데코레이터 기반 Tasks 프레임워크 추가

Adoption of Python’s modern email API

  • Python 3.6의 현대적 email API(email.message.EmailMessage)로 전환하여 더 깔끔하고 유니코드 친화적인 이메일 처리 지원

Minor features

  • Admin 인터페이스의 Font Awesome 아이콘 도입, PBKDF2 반복 횟수 증가(120만), 비동기 페이지네이션(AsyncPaginator), StringAgg 집계 함수의 범용 지원 등 다양한 개선사항 포함
  • Minor features 는 분량이 많아 간략하게 키워드만 정리.
  • django.contrib.admin : Font Awesome Free icon set 6.7.2. AdminSite.password_change_form
    django.contrib.auth : PBKDF2 반복 횟수 증가(120만)
  • django.contrib.gis : GEOSeometry.hash M 차원, Rotate, BaseGeometryWidget.base_layer. coveredby와 isvalid 조회, Collection aggregation, GeoHash 와 IsValid 가 MariaDB 12.0.1+에서 지원. 새로운 geom_type 조회와 GeometryType() 데이터베이스 함수가 지형 조회에 사용 가능
  • django.contrib.postgres : 전문 검색에 Lexeme 표현식. Model fields, 인덱스, 제약(contraints) 가 django.contrib.postgres 설치 확인 포함. reateExtension, BloomExtension, BtreeGinExtension, BtreeGistExtension, CITextExtension, CryptoExtension, HStoreExtension, TrigramExtension, and UnaccentExtension 에 hints 파라미터 추가 - DB 라우팅에 활용 가능.
  • django.contrib.staticfiles : ManifestStaticFilesStorage

Email

  • EmailMessage.message() 에 정책 적용.
  • EmailMessage.attach() 에 표준 파이썬 이메일 API 오브젝트인 MIMEPart 받음

번역

  • Haitian Creole 지원

Management Commands

  • startproject, startapp : 지정한 디렉토리가 없을 때 생성
  • shell 실행 시 django.conf.settings 같은 공통 유틸 자동 임포트

Migrations

  • 스쿼시된 마이그레이션을 다시 스쿼시 가능
  • zoneinfo.ZoneInfo 인스턴스 직렬화 지원
  • 분해 가능한(deconstructible) 객체의 시리얼라이즈에서 파이썬 식별자(identifier) 규칙에 어긋나는 것도 키워드 아규먼트로 사용 가능. 예약어, 공백, 하이픈, 숫자 등.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
MyCustomField(**{
'max-length': 100, # 하이픈 포함
'default value': 'test', # 공백 포함
'class': 'special' # 예약어
})

# 예: 일부 라이브러리가 설정 파일에서 가져온 키를 그대로 사용
class MyField(models.Field):
def __init__(self, **kwargs):
# 'cache-timeout'같은 하이픈 포함 키를 받을 수 있음
self.config = kwargs
super().__init__()

def deconstruct(self):
name, path, args, kwargs = super().deconstruct()
# Django 6.0 이전에는 kwargs 키가 유효한 식별자여야 했음
kwargs['cache-timeout'] = self.config.get('cache-timeout')
return name, path, args, kwargs

Model

  • 제약조건check() 메서드 구현
  • Aggregateorder_by 인자로 정렬 지정 가능
  • 신규 Aggregate.allow_order_by 클래스 속성으로 order_by 지원 여부 지정 가능
  • StringAgg 집계 함수가 PostgreSQL 외 다른 DB에서도 지원
  • save() 실패 시 (update결과가 0일 경우)Model.NotUpdated 예외 발생로 변경됨. 기존 django.db.DatabaseError
  • QuerySet.raw() 가 CompositePrimaryKey 을 가진 모델 지원
  • CompositePrimaryKey 을 반환하는 서브쿼리도 __exact 지원
  • JSONField가 SQLite에서 음수 배열 인덱싱 지원
  • AnyValue 집계 함수 추가 (SQLite, MySQL, Oracle, PostgreSQL 16+). SQL의 ONLY_FULL_GROUP_BY 모드에서 에러를 방지하는 용도로도 사용 혹은 아무 대표값 선정 할 때.
  • GeneratedField와 표현식 필드가 save() 후 자동 새로고침(MySQL, MariaDB처럼 지원하지 않는 것에서도 구현)

페이지네이션

  • AsyncPaginatorAsyncPage로 비동기 페이지네이션 지원

요청/응답

  • ASGI 환경에서 HTTP/2의 다중 Cookie 헤더 지원

템플릿

  • for 루프에서 forloop.length 변수 사용 가능
  • querystring 태그가 일관되게 ? 접두사 추가
  • querystring 태그에서 여러 매핑 인자 지원

테스트

  • DiscoverRunnerforkserver 멀티프로세싱 방식에서 병렬 테스트 실행 지원

다음으로는 더 중요 할 수 있는 하위 버전 호환성에 대해 이어갈 예정.


01-Django 6.0 미리보기 - 신규 기능
https://kimjj81.github.io/2025/10/01/Django-6-0-미리보기-01-신규-기능/
Author
김 정진
Posted on
October 1, 2025
Licensed under