[Django] Django channels

윤찬효·2023년 7월 4일
0

django channels

목록 보기
1/2

django channels를 이용하여 비동기적 채팅을 구현해보았다.
실시간 채팅을 구현하기 위해 WebSocket을 사용하였고 django 프로젝트에서 이를 가능하게 해주기 위해 channels 라이브러리를 알아보았다.

django channels 공식문서


정의

WebSocket 이란?

WebSocket은 프로토콜로서, 실시간으로 데이터를 양방향 통신 할 수 있게 해주는 기술 입니다.
Socket이란 쉽게 생각해서 통신을 위한 통로이며, 이를 Web에도 적용했다고 생각하면 된다.

Web 환경은 필요한 정보를 HTTP 기반으로 Request/Response로 연결하여 데이터를 주고 받아 네트워크의 연결을 유지하지 않는 특징을 가지고 있어 실시간으로 데이터를 주고 받기에는 WebSocket이 필요하게 된 것이다.

WebSocketClientServer간의 접속을 유지하는 방법은 HandShake 이다.
이 과정을 통해 연결을 유지함으로서 방화벽과 같은 환경에서도 연결을 유지할 수 있고, HandShaking 과정을 살펴면 Client는 랜덤한 키 값을 전송하고 Server는 키 값으로 생성된 토큰을 Client에게 Response 한다.


Channels 란?

Channelsdjango에서 HTTP 프로토콜이 아닌 다른 프로토콜을 사용할 수 있게 해준다.
WebSocket은 프로토콜의 일종으로서 이를 사용하기 위해 Channels를 이용하였다.

위 사진에서 확인시 Channel Layer가 생겨 일반적인 http messages 외에도 websocket messages를 처리할 수 있게 된다.


ASGI 란?

ASGI( Asynchronous Server Gateway Interface )WSGI(Web Server Gateway Interface)를 계승한 것으로 비동기 방식으로 실행된다.
웹 서버와 python 응용프로그램 간의 표준 인터페이스를 제공하기 위해 Django Channels와 배포에 사용되는 Daphne 서버에서 정의한 사양으로서 HTTP, HTTP/2 및 WebSocket와 같은 프로토콜을 지원한다.
ASGI는 비동기 요청인 웹 소켓을 처리하는 이벤트로서 connect, send, receive, disconnect가 있다.



0개의 댓글