악! Django 실시간채팅 앱 만들기 (2)

Dev_Gony·2024년 3월 13일
0

Django

목록 보기
4/4

마저 가봅쉬다 쉬다


Channels를 구성하는 패키지

  • channels : (필수) 장고 통합 레이어

  • daphne : (필수) ASGI 서버
    - 채널스 4.0부터 장고/채널스 개발서버로서 사용됩니다.
    - 실서비스에서는 daphne 명령이나 gunicorn/uvicorn 명령을 사용하여, 장고 서버를 구동합니다

  • channels_redis : (옵션) Redis 채널 레이어
    - Channels 구동에 필수는 아니지만, 채팅 서비스에서는 프로세스간 통신이 필요하기에 필수


scope - 현재 요청의 세부 내역이 담긴 dict(사전)

scope은 dict 타입. channels middleware에 의해 새로운 key/value가 설정

  • Django 기본에서는 HTTP 요청을 처리하는 주체는 View였으며, 함수와 클래스 형태로 구현

  • Channels에서는 HTTP와 웹소켓 요청을 처리하는 주체가 Consumer 클래스
    - 함수 구현은 지원되지 않으며, 클래스로만 구현할 수 있음

View에서는 HttpRequest 객체를 통해서 유저/세션/쿠키/헤더 등의 현재 요청의 모든 내역을 조회할 수 있음

Consumer Instance에서는 self.scope 사전을 통해 현재 요청의 모든 내역을 조회할 수 있음


Channels 주요 구성요소

Consumer 클래스는 channels에서 요청을 처리하는 주체로서 일관된 처리방법을 제시
웹소켓/HTTP 프로토콜을 처리하는 기능
채널레이어를 통해 메세지를 보내고 받는 부분까지 모두 지원

반복을 줄이고, 최소한의 코드로 비즈니스 로직에 집중할 수 있음

View 함수/클래스도 요청 URL에 따라 그 요청을 처리할 View 함수를 결정할 수 있듯이 채널스에서는 3가지 기준으로 현재 요청을 처리할 Consumer Instance를 결정할 수 있습니다.


기준

  1. HTTP 프로토콜 요청과 WebSocket 프로토콜 요청을 구별
    • 이때 ProtocolTypeRouter를 활용
  2. 요청URL 문자열로 분기 URLRouter를 활용
    • 구현하는 대다수의 Consumer 클래스는 개별URL을 가지고, URLRouter에 등록
  3. 채널명에 의한 라우팅
    • channels worker에서 사용하지만 여기선 사용X
    • 채널스에서도 쿠키/세션/인증 기능 활용가능
    • 장고 웹페이지에서의 쿠키/세션을 그대로 Consumer Instance에서도 활용할 수 있는 것

채널스는 ASGI application을 층층이 쌓는 방식으로 구현 - 래핑(Wrapping) 방식으로 동작

싹 다 ASGI application 이라 함!!!

악!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

profile
잔디심는 코린이

0개의 댓글

관련 채용 정보