ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Django Channel
    Django 2024. 10. 2. 21:01

    Django Channel

    장고 채널(Channel)은 Django 프레임워크의 기능을 확장하여 웹 소켓 통신과 같은 실시간 기능을 제공하는 패키지다.

     

    Django의 기본 요소들과 유사한 구조를 가지며, Django 프레임워크와 함께 사용되어 Django 애플리케이션의 구성 요소로 작동한다. ASGI(Asynchronous Server Gateway Interface) 프로토콜을 사용하여 웹 소켓 및 HTTP 기반의 프로토콜을 처리할 수 있다. ASGI는 WSGI(Web Server Gateway Interface)와 유사한 역할을 하며, 비동기적인 웹 애플리케이션 개발을 위한 표준 인터페이스다.

     

     

    채널은 크게 두 가지 요소로 구성된다.

     

    • 1. 채널 라우터(Channel Router)

    라우터는  urls.py와 유사한 역할로 클라이언트가 연결한 채널을 적절한 채널 consumer와 연결해준다.

     

     

    • 2. 채널 레이어(Channel Layer)

    레이어는 채널 간의 메시지 전달과 채널 상태 관리를 담당한다. 채널 레이어는 브로커를 통해 메시지를 전달하고, 다양한 백엔드를 지원하여 채널 간의 상태를 관리할 수 있다. 또한, 채널 레이어는 다수의 프로세스와 호환되어 다중 프로세스 환경에서도 안정적인 동작을 보장한다.

     


    채널의 핵심 개념은 consumer

    consumer는 채널에서 이벤트를 처리하는 코드 단위이며, Django의 view와 유사한 개념이다. Consumer는 클라이언트와 연결된 채널을 처리하고, 레이어와 상호작용하여 다른 채널과 통신할 수 있다. 일반적으로 브로커나 데이터베이스와 상호작용하여 데이터를 저장하거나 전달한다.

    또한 채널을 사용하면 Django 애플리케이션에서 손쉽게 웹 소켓 및 실시간 기능을 구현할 수 있으며, 이를 통해 더욱 높은 수준의 상호작용성과 사용자 경험을 제공할 수 있다.

     

    채팅방으로 예시를 들면, 클라이언트가 채팅방 주소에 요청을 보내며 채널 레이어에서 적절한 프로토콜을 선택하고 > 선택된 프로토콜을 통해 클라이언트와 서버가 연결되면, 채널 라우터에서 적절한 채널의 consumer와 연결한다.

     

    Protocol Selection > Consumer 연결

     

    Http와  Websocket 차이점

     

    1. 연결 방식

    1. HTTP 프로토콜은 Stateless한 프로토콜이다. HTTP는 클라이언트가 서버에 요청(request)을 보내면, 서버는 클라이언트에 응답(response)을 보내고 연결을 끊는 형식으로 작동한다.
    2. 반면, WebSocket 프로토콜은 TCP를 기반으로하는 양방향 통신을 지원하는 프로토콜이다. 클라이언트와 서버 간의 연결을 한번 맺으면, 연결을 유지하면서 양방향으로 데이터를 주고받을 수 있다.

    2. 속도

    1. HTTP 프로토콜은 클라이언트에서 요청을 보내고, 서버에서 응답을 받기까지의 시간이 필요하다. 이를 "request-response cycle"이라고 하는데, 이 방식은 클라이언트가 요청을 보내고 응답을 기다리는 동안 다른 작업을 수행하지 못하고 대기해야 하기 때문에, 실시간으로 반응이 필요한 애플리케이션에서는 적합하지 않다.
    2. WebSocket 프로토콜은 연결이 유지되는 동안 클라이언트와 서버가 언제든지 데이터를 주고받을 수 있기 때문에, HTTP 프로토콜에 비해 빠른 속도를 제공한다.

    3. 프로토콜 형식

    1. HTTP 프로토콜은 요청(request)과 응답(response)을 주고받는 형식으로 작동한다. 요청이 발생할 때마다 항상 새로운 연결을 맺고, 응답이 완료되면 연결을 끊는다.
    2. WebSocket 프로토콜은 한번 연결을 맺으면, 클라이언트와 서버가 언제든지 데이터를 주고받을 수 있고, 이를 통해 HTTP 프로토콜보다 더 적은 프로토콜 형식을 사용하여 데이터를 전송할 수 있다.

    4. 서버 부하

    1. HTTP 프로토콜은 클라이언트에서 요청을 보낼 때마다 서버에서는 항상 요청을 받아 처리하고 응답을 보내야 한다. 이러한 과정에서 서버 부하가 발생한다.
    2. WebSocket 프로토콜은 한번 연결을 맺은 후, 연결이 유지되는 동안 데이터를 주고받으므로, HTTP 프로토콜에 비해 서버 부하가 적다. 

    Django Channel 의 역할

     

    WebSocket 연결에 대한 URL 처리 웹소켓 연결이 성공하면, 클라이언트와 서버 사이에서 양방향 통신이 가능해진다.

     

    채널 라우팅  해당 URL과 연결된 채널 라우터를 호출한다. 채널 라우터는 클라이언트와 서버 간의 통신을 관리한다.

     

    비동기 처리 장고 채널은 비동기 처리를 지원하는데, 비동기 처리는 서버의 부하를 줄이고, 대용량의 데이터 처리를 가능하게 해준다.

     

    메시지 처리 클라이언트에서 보낸 메시지를 서버가 처리하거나, 서버에서 보낸 메시지를 클라이언트가 처리할 수 있다.

     

    연결 관리  연결이 끊어졌을 때, 재연결을 시도하거나, 연결이 유지되는지 확인할 수 있다.


    구성 요소

     

    채널 레이어와 채널 라우터
    클라이언트가 서버로 요청을 보낼 때 어떤 프로토콜을 사용하는지에 대한 정보가 담겨있어, 채널 레이어에서 적절한 채널 라우터로 요청이 전송된다. 채널 라우터는 클라이언트의 요청을 처리하고, 해당 요청이 사용할 채널 레이어와 적절한 Consumer를 연결해준다.

      

    채널 그룹

    채널 그룹(Channel Group)은 채널 레이어 상에서 여러 개의 채널을 그룹화한 것인데, 채널 그룹을 이용하면 그룹 내의 모든 채널에 대해 메시지를 한 번에 보낼 수 있다. 이를 통해 각 채널로 메시지를 전송하는 것보다 효율적인 메시지 전송이 가능해진다. 예를 들어, 채팅방 애플리케이션에서는 채팅방마다 채널 그룹을 만들어 각 채팅방에 있는 사용자들끼리 메시지를 주고받을 수 있다.

     


    즉, 

    장고 채널은 Django 프레임워크에서 웹 소켓 통신과 같은 실시간 기능을 제공하기 위해 사용되는 패키지이다.

     

    ASGI 프로토콜을 사용하여 웹 소켓 및 HTTP 기반의 프로토콜을 처리할 수 있으며, 채널 라우터와 채널 레이어로 구성되어 있다.

     

    Consumer는 채널에서 이벤트를 처리하는 코드 단위이며, Django의 view와 유사한 개념이다. 채널을 사용하면 Django 애플리케이션에서 손쉽게 웹소켓 및 실시간 기능을 구현할 수 있다.

     

    WebSocket 프로토콜TCP를 기반으로하는 양방향 통신을 지원하는 프로토콜로, 클라이언트와 서버 간의 연결을 한 번 맺으면, 연결을 유지하면서 양방향으로 데이터를 주고받을 수 있다. 이를 통해 HTTP 프로토콜에 비해 더욱 빠른 속도와 실시간 통신이 가능하다.

     

     

     

Designed by Tistory.