기존의 Django는 전통적인 WSGI (동기적) 기반이었지만,
이제는 ASGI (비동기) 를 지원하면서 다음과 같은 장점이 생겼음
• 동시에 여러 요청을 효율적으로 처리 가능
• WebSocket, HTTP/2, SSE 같은 실시간 프로토콜 지원
• IO-bound 작업에서 성능 향상
Django 구성요소 비동기 지원 여부 비고
Views (CBV/FBV) 지원 Django 3.1부터 async def 사용 가능
ORM 부분 지원 Django 4.1 이후 async ORM 일부 지원
Middleware 지원 async def middleware 작성 가능
Templates 미지원 여전히 동기적
WSGI vs ASGI ASGI 필요 Channels, Daphne

from django.http import JsonResponse
import asyncio
async def my_async_view(request):
await asyncio.sleep(1) # 비동기 작업 예시
return JsonResponse({'message': 'Hello async!'})
from myapp.models import MyModel
async def my_view(request):
obj = await MyModel.objects.aget(id=1)
return JsonResponse({'name': obj.name})
기존의 get() 대신 aget() 을 사용
acreate(), aupdate(), adelete() 등 비동기 ORM 메서드 존재
class ChatConsumer(AsyncWebsocketConsumer):
async def connect(self):
...
WebSocket 처리는 전형적인 비동기임
AsyncWebsocketConsumer 가 바로 비동기 컨슈머
• 스레드 안정성 (Thread safety): ORM 등 일부 동기 코드와 섞일 때 주의
• 외부 라이브러리: 일부 라이브러리는 비동기를 지원하지 않음
• 병렬성: asyncio를 잘못 사용하면 오히려 병목 발생 가능
사용자 요청 → ASGI 서버 (Daphne/Uvicorn 등) → Django ASGI Application → Async View, Async ORM, Channels 등 처리
동기적 처리 비동기적 처리
I/O 대기 동안 블로킹 I/O 대기 중 다른 작업 가능
단순함 성능 효율적
전통적인 웹 페이지에 적합 WebSocket, API 서버 등에 유리

• 실시간 채팅
• 알림 시스템
• 외부 API 호출
• 파일 업로드, 다운로드
• 크롤링 등 I/O-bound 작업
• ASGI, Django Channels, Uvicorn, Daphne
• asyncio, await, aiohttp
• asgiref, database_sync_to_async()