티스토리 뷰

반응형

[ Django Channels ]

Django Channels 는 Django 로 HTTP 를 넘어 WebSockets, chat protocols, IoT protocols 등을 핸들링하고 싶을 때

사용합니다.  ASGI 기반이라고 하고 다음과 같은 패키지들로 구성되어있습니다.

 

 

Channels is comprised of several packages:

 

  • Channels, the Django integration layer
  • Daphne, the HTTP and Websocket termination server
  • asgiref, the base ASGI library
  • channels_redis, the Redis channel layer backend (optional)

 

 

[ 설치 ]

Daphne ASGI application server 랑 같이 channels 를 설치하려면 

python -m pip install -U 'channels[daphne]'

 

daphne 없이 오직 channels 만 설치하고 싶으면 

pip install channels

 

 

참고로 이렇게 두번에 나눠서 설치해도 무방합니다. 

pip install channels 
pip install daphne

 

(참고: Installation)

 

 

[ Tutorial ]

간단한 Chat Server 를 만들어보는 튜토리얼을 제공합니다. 

튜토리얼은 Channels 4.0 (which supports  Python 3.7+ and Django 3.2+)  기반으로 작성되어있습니다.

또한 Redis 를 설치/실행 하기 위해 Docker 를 사용할 것 입니다.  (참고: Install Docker )

 

[ Tutorial Part 1: Basic Setup ] 

 

# Project 만들기 / App 만들기 / index view 추가하기

이쪽 내용은 Django 기본 내용이라 스킵! 

 

 

# Integrate the Channels library

우선 Channels 를 위한 routing configuration  을 만듭니다.

routing configuration 은 ASGI application 입니다.

이는 Channels 서버가 HTTP 요청을 수신할 때 어떤 코드를 실행할 지 알려준다는 점에서

Django 의 URLconf 와 유사합니다. 

 

프로젝트를 만들면  mysite/asgi.py 는 이렇게 기본 구성되어있는데요, 

# mysite/asgi.py
import os

from django.core.asgi import get_asgi_application

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")

application = get_asgi_application()

 

다음과 같이 바꿔줍니다. 

...
from channels.routing import ProtocolTypeRouter

...

application = ProtocolTypeRouter(
    {
        "http": get_asgi_application(),
        # Just HTTP for now. (We can add other protocols later.)
    }
)

 

그리고 ASGI version 의 runserver command 를 가능하게 하기 위한 작업을 해줍니다.

mysite/settings.py 로 가서 installed apps 에 'daphne' 을 추가해주고 

# mysite/settings.py
INSTALLED_APPS = [
    'daphne',
     ...
]

 

마지막 줄에 해당 코드를 작성해줍니다.  root 의 routing 구성도 Daphne을 가리켜야하기 때문입니다. 

# mysite/settings.py
# Daphne
ASGI_APPLICATION = "mysite.asgi.application"

 

이제 Daphne이 installed apps 에 있으니 runserver command 를 실행하면 

표준 Django development server 가 ASGI 호환 버전으로 대체됩니다. 

 

(참고로 Daphne development server 가 runserver command 를 대체하는 다른 third-party app 과 충돌할 수 있으니

daphne을 INSTALLED_APPS 의 맨위에 작성하는 것을 권장합니다.)

 

이제 runserver command 를 실행해보면 

python manage.py runserver

 

콘솔에 이렇게 뜨는 것을 볼 수 있습니다. 

Starting ASGI/Daphne version 3.0.2 development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

 

반응형
댓글