본문 바로가기
python/Django

Django 5.0 버전 출시 전 살펴보기

by Redking

Django는 과거부터 지속적으로 유지보수되는 프레임워크로, 끊임없는 업데이트를 통해 많은 개발자들에게 선호되어 왔습니다. 3년에 한 번씩 메이저 버전을 업데이트하고, 8개월에 한 번씩 마이너 버전을 릴리스하는 등의 전략을 채택하고 있습니다. 현재(2023년 11월 23일)에는 Django 4.x 시리즈가 주로 사용되고 있습니다.

 

그러나 다가올 12월에는 Django 5.0 버전이 새롭게 릴리즈 될 예정입니다. 이번 글에서는 이 곧 출시될 5.0 버전의 주요 변경 사항에 대해 미리 알아보도록 하겠습니다. Django 5.0이 기존 버전 대비 어떠한 혁신과 개선을 가져올지, 개발자들에게 어떠한 새로운 기회를 제공할지에 대해 살펴보겠습니다.

 

Python Version

Django 5.0에서는 개발의 기본 요소 중 하나인 Python 버전을 3.10 이상으로 지원하게 되었습니다. 만약 버전을 업그레이드한다면, 현재 사용 중인 Python 버전을 확인하고 Django 5.0에서 지원하는 Python 버전으로 변경하는 작업이 필요할 것으로 예상됩니다.

Python 3은 3.10 버전 이후에도 계속해서 발전하고 있으며, 간결한 패턴 매칭과 향상된 오류 처리 등의 측면에서 큰 개선이 이루어지고 있는 것으로 알려져 있습니다. 따라서 Django 5.0이 Python 3.9 버전을 지원하지 않는건 더 최신의 Python 기능을 활용하고 Django를 더 효과적으로 개발하기 위한 선택으로 해석될 수 있습니다. 새로운 버전의 Django는 항상 최신 Python 기능을 채용하여 개발자들에게 더 나은 경험을 제공하는 경향이 있습니다.

Reusable field group tamplates

Django 5.0에서는 재사용 가능한 그룹 템플릿이 추가되었습니다. Django는 자체적으로 우수한 프론트엔드 기능을 갖추고 있지만, 재사용성 부족으로 인해 유지 보수 측면에서 항상 어려움이 있었습니다. 이런 문제를 해결하기 위해 도입된 이 기능은 Model과 그 내부 Field를 노출하는 Form에 중점을 두고 있습니다. 데이터의 무결성이 중요한 경우, 이 기능을 활용하면 더 나은 사용성을 제공할 수 있을 것으로 기대됩니다. Django 5.0은 프로젝트의 구조를 더 효율적으로 관리하고 개발자들에게 유용한 도구를 제공하는 측면에서 의미 있는 업그레이드로 보입니다.

GenerateField

Django 5.0에서 소개된 generate Field는 매우 유용한 업데이트 중 하나입니다. 이 기능을 이용하면 이전에 annotate를 사용하여 필드 값을 계산하고 노출했던 작업을 generate Field로 더 효과적으로 관리할 수 있습니다. 이전에 작성한 글에서 여러 번 사용되는 annotate를 모델에서 관리하고 호출하는 방법이 유용하다고 언급했었는데, 이제는 이러한 상황에 generate Field를 활용할 수 있습니다. 이것은 코드를 더 간결하게 유지하면서도 필요한 계산을 효율적으로 처리할 수 있는 뛰어난 방법입니다.

예시는 아래와 같습니다.

from django.db import models
from django.db.models import F


class Square(models.Model):
    side = models.IntegerField()
    area = models.GeneratedField(
        expression=F("side") * F("side"),
        output_field=models.BigIntegerField(),
        db_persist=True
    )

generate Field는 다른 필드를 기반으로 계산되는 필드로, 이러한 계산은 데이터베이스에서 자동으로 관리되고 업데이트됩니다. SQL 구문에서는 GENERATED ALWAYS가 사용됩니다.

generate Field에는 저장된 열과 가상 열이 있습니다. 저장된 열은 기록될 때 계산되어 일반 열처럼 스토리지를 차지합니다. 반면에 가상 열은 스토리지를 차지하지 않고 읽을 때 동적으로 계산됩니다.

이 값은 계산이 계속되기 때문에 객체를 임의로 저장하고 새로운 값으로 업데이트하려면 해당 객체를 다시 불러와서 값을 계산해야 합니다. 이러한 특성은 데이터의 일관성을 유지하면서 동적인 값에 접근하는 효율적인 방법을 제공합니다.

http.disconnect

시간이 오래 걸리는 요청의 경우, 뷰가 응답을 반환하기 전에 클라이언트에서는 오래 걸림을 감지하고 연결을 끊을 수 있습니다. 이 경우, 뷰에서는 asyncio.CancelledError가 발생하며, 필요한 경우 이 오류를 잡아서 트래킹 한 후 정리 작업을 수행할 수 있습니다.

 

새로운 비동기 함수 지원

django.contrib.auth.aauthenticate()

aget_user()

alogin()

alogout()

aupdate_session_auth_hash()


이번 5.0 업데이트에서  제가 제시한 기능 외에도 다양하고 중요한 기능이 많이 추가되었습니다. 개발을 진행하시는 동안 공식 문서를 참고하여 유용한 정보를 얻으시기를 권장합니다. 제가 제시한 기능 이외에도 다양한 기능들이 있을 수 있으니, 문서를 확인하여 미래의 개발 작업에 도움이 되길 기대합니다.

 

참고

https://docs.djangoproject.com/en/dev/releases/5.0/#django-contrib-auth

 

'python > Django' 카테고리의 다른 글

Django 시그널  (0) 2023.12.13
Django JSONField (Postgresql)  (0) 2022.12.06
Django bulk_create/bulk_update  (0) 2022.11.16
Django sitemap 분할 관리하기  (0) 2022.10.13
Django annotate management  (0) 2022.10.12

댓글