Django: 6.0의 새로운 기능 – Adam Johnson

발행: (2025년 12월 10일 오전 05:33 GMT+9)
7 min read

Source: Hacker News

Django 6.0이 오늘 출시되었습니다, 20년 역사를 가진 오래된 파이썬 웹 프레임워크의 또 다른 릴리스 사이클이 시작됩니다! 이번 버전은 많은 사람들의 기여로 이루어진 모자이크 같은 새로운 기능들을 담고 있으며, 그 중 일부는 제가 직접 참여했습니다. 아래는 릴리즈 노트에서 제가 골라낸 하이라이트입니다.

Upgrade with help from django-upgrade

Django 5.2 이하 버전에서 프로젝트를 업그레이드한다면 제 도구 django-upgrade (문서)를 사용해 보세요. 오래된 Django 코드를 새로운 기능으로 자동 변환하고, 폐기 경고를 해결해 주며, Django 6.0용 5개의 수정기도 포함합니다. (언젠가 에너지와 시간이 허락한다면 django-upgrade를 공식 Django 프로젝트로 제안하고 싶습니다…)

Template partials

Django 6.0에는 네 가지 주요 기능이 있는데, 먼저 이 기능부터 살펴보겠습니다:

Django 템플릿 언어가 이제 템플릿 파셜을 지원하여 템플릿 파일 내에서 작은 이름이 지정된 조각을 캡슐화하고 재사용하기가 쉬워졌습니다.

파셜은 새로운 {% partialdef %}{% endpartialdef %} 태그로 표시된 템플릿의 구간입니다. 같은 템플릿 안에서 재사용하거나 독립적으로 렌더링할 수 있습니다.

Reuse partials within the same template

아래 템플릿은 filter_controls 파셜을 정의하고 두 번 재사용합니다:

{% partialdef filter_controls %}
    {{ filter_form }}
{% endpartialdef %}

{% partial filter_controls %}

{% for video in videos %}
## {{ video.title }}

{% endfor %}

{% partial filter_controls %}

정의 부분을 제자리에서 렌더링하는 inline 옵션을 사용하면 이 패턴을 더 간단히 만들 수 있습니다:

{% partialdef filter_controls inline %}
    {{ filter_form }}
{% endpartialdef %}

{% for video in videos %}
## {{ video.title }}

{% endfor %}

{% partial filter_controls %}

같은 파일 안에서 템플릿 코드를 반복하고 있다면 언제든 이 패턴을 사용하세요. 파셜은 변수를 사용할 수 있기 때문에, 데이터가 다른 유사한 컨트롤들을 중복 제거하는 데도 도움이 됩니다.

Render partials in isolation

다음 템플릿은 자체적으로 다시 렌더링될 view_count 파셜을 정의합니다. inline 옵션을 사용해 전체 템플릿이 렌더링될 때 파셜이 포함되도록 합니다. 페이지는 htmx(django‑htmx 패키지를 통해)로 조회수를 주기적으로 새로 고칩니다.

{% load django_htmx %}

## {{ video.title }}

Your browser does not support the video tag.

{% partialdef view_count inline %}
    {{ video.view_count }} views
{% endpartialdef %}

{% htmx_script %}

해당 뷰 코드:

from django.shortcuts import render

def video(request, video_id):
    # …
    return render(request, "video.html", {"video": video})

def video_view_count(request, video_id):
    # …
    return render(request, "video.html#view_count", {"video": video})

video 뷰는 전체 템플릿을 렌더링하고, video_view_count는 템플릿 이름 뒤에 #view_count를 붙여 view_count 조각만 렌더링합니다—HTML 조각을 URL의 ID로 참조하는 방식과 유사합니다.

History

이 기능은 htmx에서 영감을 받았으며, 그 창시자 Carson Gross가 크로스‑프레임워크 리뷰 포스트에서 설명했습니다. Django의 템플릿 파셜 지원은 처음에 Carlton Gibson이 만든 django‑template‑partials 패키지에서 시작되었으며, 오래된 Django 버전에서도 여전히 사용할 수 있습니다. Django 자체에 통합된 작업은 올해 Google Summer of Code 프로젝트 동안 학생 Farhan Ali가 진행하고 Carlton이 멘토링했습니다(see Ticket #36410). 자세한 내용은 Farhan의 회고 블로그 포스트를 참고하세요. Farhan, Carlton, Natalia Bidart, Nick Pope, Sarah Boyce에게 감사드립니다.

Tasks framework

Django는 이제 HTTP 요청‑응답 사이클 밖에서 코드를 실행할 수 있는 내장 Tasks 프레임워크를 포함합니다. 이를 통해 이메일 전송이나 데이터 처리와 같은 작업을 백그라운드 워커에게 오프로드할 수 있습니다.

백그라운드 작업은 흔히 필요한 요구사항입니다(예: 이메일 전송, 이미지 처리, 보고서 생성). 기존에는 Django가 CeleryDjango Q2와 같은 서드파티 솔루션에 의존했으며, 설정이 복잡한 경우가 많았습니다.

새로운 Tasks 프레임워크는 백그라운드 작업을 정의하기 위한 표준 API를 제공하며, 서드파티 작업 실행기가 이를 활용할 수 있도록 공통 기반을 마련합니다.

@task 데코레이터로 작업을 정의합니다:

from django.tasks import task

@task
def resize_video(video_id):
    ...

Task.enqueue() 로 백그라운드 실행을 위해 큐에 넣습니다:

from example.tasks import resize_video

def upload_video(request):
    # …
    resize_video.enqueue(video.id)
    # …

Execute tasks

현재 Django는 프로덕션 수준의 작업 백엔드를 포함하고 있지 않습니다. 개발 및 테스트용으로 두 가지 백엔드가 제공됩니다:

  • ImmediateBackend – 작업을 동기적으로 실행하여 완료될 때까지 블록합니다.
    (문서)
  • DummyBackend – 작업이 큐에 들어가도 아무 동작을 하지 않으며, 나중에 검증할 수 있게 해줍니다. 테스트에 유용합니다.
    (문서)

향후 릴리스에서는 공식 백엔드가 추가되거나 인기 서드파티 실행기와 통합될 수 있습니다.

Back to Blog

관련 글

더 보기 »

Django: 6.0의 새로운 기능

2025-12-03 !https://adamj.eu/tech/assets/2025-12-03-django-mosaic.webp Django 6.0이 오늘 출시되었습니다 https://www.djangoproject.com/weblog/2025/dec/03/django-60-r...

Part 2: 첫 번째 Django 프로젝트 설정

이것은 “Learn Backend Development by Building a Social Media App” 시리즈의 파트 2입니다. 다시 오신 것을 환영합니다! 이전 파트에서는 백엔드가 실제로 무엇인지 배웠습니다.

Django 6

번역할 텍스트를 제공해 주세요.