1. 프로토콜 분기
urls.py에서는 HTTP와 WebSocket 요청을 분기하여 처리한다. HTTP 요청은 일반적으로 views.py에서 처리되며, WebSocket 요청은 consumer.py 내에서 처리된다. 이는 asgi.py 파일에서 ProtocolTypeRouter를 사용해 프로토콜별로 라우팅하여 이루어진다.
2. Consumer
WebSocket 요청을 처리하기 위해 JsonWebsocketConsumer를 상속받아 WebChatConsumer 클래스를 구현합니다.
이 클래스는 connect, receive_json, chat_message, disconnect와 같은 메서드를 통해 WebSocket 연결, 메시지 수신 및 전송, 연결 종료를 관리합니다.
3. Middleware
Middleware는 WebSocket 연결 시 사용자 인증과 같은 사전 처리를 위해 사용된다. 일반 HTTP 요청의 Middleware와 유사하게 작동하지만, 비동기 환경에서 WebSocket을 지원하는 방식으로 동작한다.
👉 정리
channels 라이브러리는 Django에 WebSocket 기능을 추가하기 위한 비동기 프레임워크로, ASGI를 통해 Django와 Uvicorn 웹 서버가 연결된다.
commands.md 파일에 작성한 명령어를 통해 ASGI 서버를 실행하여 Django Channels가 동작하도록 설정한다.