Django와 Web Server가 주고 받기 위해서는 WSGI 프로토콜을 사용합니다.
Django Channels를 배포하기 위해서는 HTTP 요청은 uWSGI 프로토콜로 받고, WS(Web Socket) 요청은 ASGI 프로토콜로 받아야 합니다. 즉, HTTP 요청 뿐만 아니라, WS 요청도 처리해야 합니다.
ASGI(Asynchronous Server Gateway Interface)란?
Web Server와 Django, 애플리케이션을 비동기로 연결해주는 Python의 표준 인터페이스라고 보면 된다.
여러 프로토콜( HTTP, HTTP/2, WebSocket 포함 ) 스타일을 처리 할 수 있다.
ASGI(Asynchronous Server Gateway Interface)란?Web Server와 Django, 애플리케이션을 비동기로 연결해주는 Python의 표준 인터페이스라고 보면 된다.
여러 프로토콜( HTTP, HTTP/2, WebSocket 포함 ) 스타일을 처리 할 수 있다.
Daphne은 Django Channels를 지원하기 위해 개발된 HTTP, HTTP2, WS 프로토콜 서버로서, HTTP와 WS 요청을 받아들여서 자동으로 어떤 프로토콜로 처리해야 할지 스스로 결정합니다.
Django Channels란?
Django 3.0에서 Channels 기능을 제공하는데 Channels는 ASGI를 기반으로 만들어진 프로젝트입니다. 기존의 HTTP 통신을 넘어서 웹 소켓, 채팅 프로토콜, IoT 프로토콜 등을 처리할 수 있습니다. 장고의 핵심을 그대로 따오고 계층화 시켜서 장고는 동기로 실행하지만 기타 Connection과 socket을 비동기적으로 처리할 수 있도로고 합니다.
Channels는 Django를 변경해 Django에서 동기로 작동하는 코어 하위에 비동기 코드를 작성했습니다. 따라서 HTTP 통신 뿐만 아니라 웹 소켓, MQTT, 챗봇 등 긴 연결 시간이나 많은 연결들을 갖는 프로토콜을 처리할 수 있습니다.
Django의 동기적이고 사용하기 쉬운 특성을 유지하면서 Django View나 완전한 비동기 또는 이를 혼합하여 사용하는 것과 같은 방법을 제공합니다. 또한 인증 시스템과 세션 시스템 등과 통합돼 HTTP 전용 프로젝트를 다른 프로젝트로 쉽게 확장할 수 있습니다.
또한 프로세스들 사이에서 쉽게 통신할 수 있는 시스템인 채널 계층을 event-driven 아키텍쳐로 제공하고 프로젝트를 다른 프로세스로 분리할 수 있습니다.
ASGI는 Channels에 내장된 비동기 서버의 이름입니다. WSGI와 마찬가지로 Channels과 Daphne 서버에 귀속되지 않고 다른 서버와 프레임워크를 선택할 수 있습니다.
[참고] brownbears.tistory.com/505
'Development > Django' 카테고리의 다른 글
[Django] User Model 확장 (1) - 4가지 방법 (0) | 2021.02.23 |
---|---|
[Django] Web Socket (0) | 2021.02.09 |
[Django] URL 패턴 - 정규식과 path() 차이점 (0) | 2021.02.08 |
[Django] Gunicorn - Threads (0) | 2021.02.02 |
[Django] WSGI (Web Server Gateway Interface ) (0) | 2021.02.02 |