Django 2.2 LTS 릴리스와 주요 변경 사항

Django 2.2가 드디어 출시되었습니다. 2.x 버전으로는 첫 LTSLong-term Support Release입니다. 이 글에서는 Django 2.2에 추가된 기능과 바뀐 점을 알아보려 합니다. Django 2.2 공식 릴리스 노트 를 참고하였습니다.

주의! 개인적으로 판단하기에 사소한 사항들은 번역하지 않았고, 릴리스 노트만으로 이해하기가 어려운 기능엔 설명을 조금 보태었습니다.

파이썬 호환성

Django 2.2는 파이썬Python 3.5, 3.6, 3.7에서 작동합니다. 각 버전별 마지막 릴리스를 사용하기를 추천합니다.

44BITS 소식과 클라우드 뉴스를 전해드립니다. 지금 5,000명 이상의 구독자와 함께 하고 있습니다 📮

새 기능

모델 제약 조건인 CheckConstraint와 UniqueConstraint

모델의 Meta.contraints 옵션에 CheckConstraintUniqueConstraint를 사용하여, 데이터베이스 제약 조건을 추가할 수 있습니다. 예를 들어 여덟 자 이하로는 비밀번호를 저장하지 않으려고 한다면,

사소한 변경

django.contrib.admin

TabularInline의 컬럼 헤더에 CSS 클래스를 추가할 수 있습니다.

django.contrib.auth

RemoteUserBackend.configure_user()의 첫 번째 인자로 HttpRequest 객체를 전달할 수 있습니다.

django.contrib.postgres

ArrayAggStringAgg를 사용하면서 애그리게이트 객체의 순서를 결정하기 위해 ordering 인자를 지정할 수 있습니다.

django.contrib.staticfiles

collectstatic –ignore 옵션에 /vender/*.js 같은 패턴을 추가할 수 있습니다.

데이터베이스 백엔드

SQLite에서 QuerySet.iterator()를 실행해도 결과를 일부분씩만 얻을 수 있습니다. (다른 데이터베이스에 대해서는 이미 지원하던 기능인데, 이번에 SQLite에 대해서도 지원하기 시작했습니다.)

제네릭 뷰

dispatch() 전에 뷰 속성을 초기화하는 View.setup 훅이 추가되었습니다.

국제화

아르메니아 언어հայերեն 에 대한 지원과 번역이 추가되었습니다.

관리용 명령어

마이그레이션

모델

요청과 응답

직렬화

테스트

URL

Validator

하위 호환이 중단된 기능

Django Admin의 actions 수집 방식

Django 관리 도구의 actions에서 부모 ModelAdmin 클래스의 actions를 수집하지 않습니다. 부모 클래스의 actions까지 사용하고 싶다면 파이썬의 기본 상속 방식을 따라, 다음과 같이 해야 합니다.

class SubAdmin(BaseAdmin):
    actions = BaseAdmin.actions + ['sub_admin_action']

GDAL 지원

Geo Django에서 GDAL 1.9와 1.10 지원을 중단합니다.

테스트 실행시 초기화용 데이터 마이그레이션

초기화용 데이터 마이그레이션 과정은 기존 데이터베이스가 삭제된 후 테스트의 마지막에 실행됩니다. 이전 버전에서는 테스트 시작 부분에 실행되었는데 이 때문에 test --keepdb 옵션이 제대로 작동하지 않곤 했습니다. (기본 TransactionTestCase를 수정하지 않았다면, 여러분의 테스트 케이스에 아무런 영향을 주지 않을 겁니다.)

sqlparse 라이브러리 의존성 추가

sqlparse 라이브러리 의존성이 추가되었습니다.

cached_property를 alias화하기

일반적인 방식으로는 cached_property를 alias화할 수 없습니다.

class Sample:
    @cached_property
    def method_name(self):
        return ...
    m_name = method_name

대신, 이렇게 할 수 있습니다.

import operator

class Sample:
    @cached_property
    def method_name(self):
        return ...

    m_nmae = property(operator.attrgetter('method_name'))

프록시 모델의 권한

이전 버전에서는 프록시 모델에 권한을 설정하더라도, (프록시 모델이 아닌) 구체concrete 모델의 content type이 생성되었습니다. 이제부터는 프록시 모델은 권한을 상속받지 않습니다. 따라서, 프록시 모델에 자체적인 권한을 설정하면 프록시 모델의 content type이 생성됩니다.

class Animal(models.Model):
    class Meta:
        permissions = (('can_sleep', 'Can sleep'))

class Cat(Animal):
    class Meta:
        proxy = True
        permissions = (('can knead', 'Can knead'))

>>> content_type = ContentType.objects.get_for_model(Cat, for_concrete_model=False)
>>> cat_permissions = Permission.objects.filter(content_type=content_type)
>>> [perm.codename for perm in cat_permissions]
['add_cat', 'change_cat', 'delete_cat', 'view_cat', 'can_knead']

폼의 Media 에셋

폼의 Media 에셋들을 합칠 때 위상 정렬topological sort algorithm 알고리즘을 사용합니다. 이전에 사용하던 쌍 정렬pairwise merging algorithm이 몇몇 경우에 제대로 작동하지 않았기 때문입니다. 이 변화로 인해, 의존성을 명시하지 않은 자바스크립트 파일과 CSS 파일은 제대로 정렬되지 않을 수 있습니다.

예를 들어, django.jQuery를 의존하는 위젯에서는 폼 미디어 에셋을 정의할 때 반드시 js = ['admin/js/jquery.init.js']를 명시해야 합니다.

자잘한 변경

중단 예정인 기능

Meta.ordering이 GROUP BY에 영향을 끼치지 않음

모델의 Meta.ordering 속성은 GROUP BY 쿼리에 영향을 끼치지 않습니다. 이런 식의 쿼리를 작성하면 order_by()를 추가하라는 안내문이 나타나며, Django 3.1부터는 이런 식의 쿼리가 무시될 예정입니다.

자잘한 변경

요약은 여기까지입니다. 개인적으론 중요하지 않아 보여서 적지 않은 내용이 여러분에겐 더 중요할 수도 있으니, Django 2.2 공식 릴리스 노트를 꼼꼼히 살펴보시는 건 어떨까요?

도움이 되셨나요?
RSS 리더 피들리에서 최신 글을 구독할 수 있습니다.
트위터, 페이스북으로 44BITS의 새소식을 전해드립니다.
✔ 44BITS의 다른 활동도 확인해보세요. 다양한 채널에서 만나볼 수 있습니다.
✔ 따뜻한 댓글 하나와 피드백은 큰 힘이 됩니다.

아마존 엘라스틱캐시(Elasticache)의 멤캐시디(Memcached) 클러스터 스케일 아웃

🗒 기사, 2018-12-17 - 아마존의 엘릭스틱 캐시는 키 멤캐시디와 레디스 매니지드 서비스를 제공합니다. 이 서비스들을 사용해 신뢰도 높은 키-밸류 캐시를 구축하는 것이 손쉽게 가능합니다. 이러한 캐시 서버는 스케일 업과 스케일 아웃 방식으로 확장할 수 있는데 이 글에서는 스케일 아웃을 하는 방법과 스케일 아웃 시 주의해야할 점에 대해서 살펴봅니다.

AWS 파게이트(Fargate) 가격 30%-50% 인하 발표

🗞 새소식, 2019-01-10 - AWS 파게이트는 AWS ECS 상에서 컨테이너를 인스턴스 없이 실행하는 서비스입니다. 파게이트는 가격이 비싼 편이었는데 대폭적인 가격 인하를 발표했습니다. 서울 리전을 포함해 1월 7일부터 기존 자격 대비 vCPU는 20%, 메모리는 65% 단위 가격을 인하합니다.

xclip으로 터미널에서 클립보드 활용하기

🗒 기사, 2014-07-29 - GUI 환경과 CLI 환경 사이에서 정보를 공유하는 것은 생각보다 까다로운 일입니다. 리눅스의 X클립(XClip은)이 두 환경의 클립보드를 연동해주는 애플리케이션입니다. 이 글에서는 X클립을 사용해 GUI 클립보드의 내용을 터미널에서 붙여넣기 하는 방법과 터미널의 문자열을 GUI 클립보드로 복사하는 방법을 소개합니다.