Django 3.0 나왔다. async 관련 공식 발표 한 번 정리.
"Django 3.0 begins our journey to making Django fully async-capable... views, middleware, and handlers can be async. ORM is not async yet."
즉 이번 버전에서 할 수 있는 것:
- async view 작성 가능
- ASGI 기반 실행 (daphne/uvicorn)
- async middleware
아직 안 되는 것:
- ORM. 이게 핵심인데 안 됨.
- cache, sessions 등 써드파티 백엔드 대부분
결국 async view 안에서 ORM 호출하려면 sync_to_async로 감싸야 한다.
from asgiref.sync import sync_to_async
async def my_view(request):
items = await sync_to_async(list)(Item.objects.filter(active=True))
return JsonResponse({"items": [i.name for i in items]})
이게 결국 스레드풀로 던지는 거라 순수 async 이득이 없다. 외부 HTTP 호출이 섞여 있을 때만 의미가 있음.
결론적으로 Django 3.0의 async는 "앞으로 갈 방향"을 열어둔 것. 실무에서 async 필요하면 아직은 FastAPI나 aiohttp 쓰는 게 낫다. 전체 스택이 async-ready 될 때까지는 3-4년 더 걸릴 듯하다.
업그레이드 자체는 2.2 LTS에서 3.0으로 가도 큰 이슈는 없었음. Python 3.5 지원 끊긴 것 정도.
댓글 없음:
댓글 쓰기