피드로 돌아가기
44BITS44BITS

Django 4.1 릴리스와 주요 변경 사항

Django 4.1이 클래스 기반 뷰의 비동기 핸들러와 비동기식 ORM 인터페이스를 도입해 async/await 기반 웹 애플리케이션 개발 지원 확대

raccoonyy2022년 8월 8일

Context

Django 3.1부터 비동기 뷰가 도입되었으나 함수 기반 뷰에만 제한되어 있었고, ORM 인터페이스도 동기 방식만 제공하고 있었다. 비동기 코드에서 동기식 ORM 인터페이스를 호출하면 SynchronousOnlyOperation 오류가 발생하는 제약이 있었다.

Technical Solution

  • 클래스 기반 뷰에 비동기 핸들러 지원: View 클래스의 get, post 등 메서드를 async def로 정의 가능
  • 비동기식 ORM 인터페이스 추가: 기존 메서드 앞에 'a' 접두사 붙인 형태(acreate, afirst, etc.) 제공
  • 비동기 ORM 인터페이스 내부 구현: 기존 동기 연산을 sync_to_async()로 감싼 형태로 제공 중
  • 모델 제약 조건의 유효성 검증 개선: Check, unique, exclusion 제약을 모델 유효성 검증 과정에서 검사해 ValidationError 발생 (기존에는 IntegrityError 발생)
  • 폼 템플릿 접근성 개선: <div> 기반의 DjangoDivFormRenderer 폼 템플릿 도입 가능
  • PBKDF2 해시 보안 강화: 반복 횟수를 320,000회에서 390,000회로 증가
  • 마이그레이션 개선: RenameIndex 도입으로 인덱스 이름 변경 시 RemoveIndex + AddIndex 대신 단일 마이그레이션 생성
  • 마이그레이션 관리 명령어 확장: migrate --prune으로 삭제된 마이그레이션 정리, 선택적 black 포매팅 지원

Impact

PBKDF2 해시 반복 횟수가 320,000회에서 390,000회로 증가했다.

Key Takeaway

비동기 ORM 인터페이스는 현재 내부적으로 sync_to_async()를 사용하지만, 향후 데이터베이스 드라이버 비동기 지원이 완성되었을 때 코드 변경 없이 성능 향상을 얻을 수 있도록 미리 도입하면 유익하다.

원문 읽기