-
반응형
4월 6일, Django 3.2 마이너 버전이자 3.X의 LTS 버전이 릴리즈 되었다. 이번 릴리즈에는 편의 기능들이 다소 많이 포함되었는데 그 중 가장 반가운 소식은 ORM에서 AutoField에 설정에 대해서 전체 설정을 할 수 있게 됬다는 점이다. AutoField, 즉 PK가 기본값이 int이기 때문에 각 Model마다 BigAutoField로 재정의 해야하는 귀찮음(?)이 있었는데 간단한 설정으로 기본값을 변경할 수 있게 되었다.
이번 마이너 릴리즈의 주요 변경사항은 아래 3가지이다.
AppConfig 자동 발견
Django에서는 하나의 프로젝트에 여러개의 앱을 운용할 수 있게 지원하고 있다. python manage.py startapp [APP_NAME] 명령으로 기본 뼈대를 만들어낼 수 있는데 그 때 apps.py 파일이 만들어지고 아래와 같이 앱 설정을 할 수 있다. 아래는 api라는 앱을 만들었을 때 AppConfig 예시이다.
from django.apps import AppConfig class ApiAppConfig(AppConfig): name = 'api'
이 때 앱의 디렉토리 위치를 변경하게 되면 Django에서는 실행시 AppConfig를 못찾게 되는 문제점이 발생한다. 이를 해결하기 위해 __init__.py에 default_app_config 변수에 config 위치를 명시해주곤 했었는데 이제는 자동적으로 config 위치를 찾는 것이 가능해졌다.
앱에 대한 경로를 변경하지 않는다면 유용한 내용이 아닐 수 있겠으나 점점 불어나는 앱들을 잘 관리하기 싶거나 그룹 관리하고 싶다면 위치 변경은 필수적이라서 이와 같은 설정은 개발하는데 좀 더 편의성을 가져다 주고 삽질하는 시간 또한 줄여줄 것이다. 참고로 더 이상 불필요해진 default_app_config는 곧 deprecated된다.
AutoField의 기본값 변경 지원
from django.db import models class MyModel(models.Model): id = models.BigAutoField(primary_key=True)
AutoField는 Django ORM에서 자동적으로 생성되는 Auto increment Primary key를 말한다. 기본값이 AutoField로 int 크기를 갖게 되는데 거의 매번 bigint 사이즈 사용을 위해 Model을 정의할 때 bigint로 정의 하기 모델마다 별도 선언을 해주었었다.
이제는 settings.py에 DEFAULT_AUTO_FIELD 설정을 하면 전역적으로 설정이 반영된다. 이미 진행하고 있는 프로젝트에는 해당 기능을 넣기는 애매할 수 있으나 처음 시작할 때에는 해당 옵션을 포함하는 것을 추천한다.
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
참고로, CLI로 startapp 명령을 내리면 apps.py에 관련 설정이 자동으로 들어가기도 한다.
from django.apps import AppConfig class ApiConfig(AppConfig): default_auto_field = 'django.db.models.BigAutoField' name = 'api'
Functional Indexes
from django.db import models from django.db.models import F, Index, Value from django.db.models.functions import Lower, Upper class MyModel(models.Model): first_name = models.CharField(max_length=255) last_name = models.CharField(max_length=255) height = models.IntegerField() weight = models.IntegerField() class Meta: indexes = [ Index( Lower('first_name'), Upper('last_name').desc(), name='first_last_name_idx', ), Index( F('height') / (F('weight') + Value(5)), name='calc_idx', ), ]
위 예시대로 DB의 Functional index을 Model에서 표현할 수 있게 되었다. Lower, Upper, F, 연산자등을 활용하여 Function based 인덱스 설정이 가능하다.
Minor 변경 내용 중 ...
마이너 변경사항 또한 굉장히 많지만 더이상 지원하지 않는 DB 버전 내용이 있어 공유한다.
- Dropped support for PostgreSQL 9.5
- Dropped support for MySQL 5.6
Reference
반응형