Channels는 Django를 확장해 웹소켓과 같이 HTTP가 아닌 프로토콜을 핸들링할 수 있게 돕고 비동기적인 처리를 가능하게 해주는 ASGI의 구현체로, 장고를 이용한 실시간 채팅 구현 등에 활용할 수 있습니다. 이 글은 채널즈의 공식 문서를 최대한 원어를 살려 번역한 글입니다. 다소 의역하거나 생략한 부분이 있을 수 있음을 너그러이 양해해주시고, 잘못을 자유롭게 지적해주시면 감사하겠습니다.
채널즈는 PyPI에 등록돼있어서 다음 코드만 실행해 설치할 수 있습니다.
python -m pip install -U channels
그 후엔 channels
를 장고 setting.py
의 INSTALLED_APPS
에 추가해야 합니다.
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
...
'channels',
)
그 다음 장고 프로젝트의 asgi.py
파일(e.g. `mypro을 Django ASGI 애플리케이션을 감싸도록 설정합니다.
import os
from channels.routing import ProtocolTypeRouter
from django.core.asgi import get_asgi_application
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mysite.settings')
application = ProtocolTypeRouter({
"http": get_asgi_application(),
# 지금은 HTTP만 등록합니다. (나중에 다른 프로토콜들도 등록할 거예요!)
})
주의사항
장고 v2.2는 자체 ASGI 지원이 없어 채널즈의 대체 시스템을 이용해야 합니다.
myproject/asgi.py
파일을 이렇게 설정하세요:import os import django from channels.http import AsgiHandler from channels.routing import ProtocolTypeRouter os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mysite.settings') django.setup() application = ProtocolTypeRouter({ "http": AsgiHandler(), # 지금은 HTTP만 등록합니다. (나중에 다른 프로토콜들도 등록할 거예요!) })
마지막으로, ASGI_APPLICATION
가 루트 애플리케이션의 라우팅 오브젝트를 가리키도록 설정하세요:
ASGI_APPLICATION = "myproject.asgi.application"
설정이 모두 끝났습니다! 한 번 활성화되면, channels
는 장고와 통합되어 runserver
커맨드를 제어하게 됩니다. 자세한 사항은 소개를 참조해주세요.
주의사항
다른 서드파티 앱이
runserver
커맨드를 오버로드하거나 대체할 경우에 주의하세요. 채널즈는 별도의runserver
커맨드를 제공하기 때문에 해당 앱과 충돌할 수 있습니다. 그러한 대표적인 사례로whitenoise
앱의runserver_nostatic
이 있습니다. 이를 해결하기 위해선 채널즈를INSTALLED_APPS
설정값의 최상단으로 이동하거나, 충돌하는 다른 앱을 제거해주세요.
채널즈의 최신 버전을 설치하려면, 레포를 클론한 뒤 해당 디렉토리에서 들어가, 현재 가상환경에서 pip install을 실행합니다.
$ git clone git@github.com:django/channels.git
$ cd channels
$ <activate your project’s virtual environment>
(environment) $ pip install -e . # 온점은 현재 레포를 가리킵니다.
튜토리얼로 이어집니다.