geeks for geeks - 장고를 이용한 채팅 앱
이번에는 asgi 세팅을 해볼 것이다. ASGI가 무엇인지에 대해서는 아래 링크를 참고하였다.
CGI, WSGI, ASGI 정리
Python ASGI vs WSGI
ASGI는 비동기 및 동기 처리를 모두 지원하는 확장된 표준 인터페이스입니다. ASGI는 WSGI의 한계를 극복하기 위해 설계되었으며, 특히 비동기 작업이 필요한 환경에서 효율적입니다.
위 내용 정도로 요약되는 것 같다. 자세한 내용은 링크를 들어가서 확인하자.
위에서 나온 ASGI를 사용하기 위해선 django-channels 라이브러리가 필요하다고 한다.
이를 위해 pip을 이용하여 설치할 수 있다.
또한 channels 4.0부터는 개발모드에서 asgi runserver가 작동하지 않아 daphne를 설치해야 한다고 한다.
daphne는 django-channels를 위해 개발된 http, http2, 웹소켓 서버라고 한다.
python -m pip install -U channels
python -m pip install -U daphne
config의 settings.py에 설치한 라이브러리를 추가해주었다.
INSTALLED_APPS = [
"django.contrib.admin",
"django.contrib.auth",
"django.contrib.contenttypes",
"django.contrib.sessions",
"django.contrib.messages",
"django.contrib.staticfiles",
# 'daphne', # daphne 넣으니까 오히려 작동안함....??
'channels' ,
]
ASGI_APPLICATION = 'config.asgi.application'
이상한게 있었지만 일단 넘어갔다.
그 다음으로는 config의 asgi.py의 스크립트를 수정해주었다.
import os
from channels.routing import ProtocolTypeRouter
from django.core.asgi import get_asgi_application
django_asgi_app = get_asgi_application()
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings")
application = ProtocolTypeRouter({
"http:": django_asgi_app,
# just HTTP for now. (We can add other protocols later!)
})
ASGI_APPLICATION = get_asgi_application()
앱의 라우터를 channels의 라우터로 바꿔주었다.
+)알아볼 것