카테고리 없음

ASGI

kinggoddino 2024. 10. 2.

실시간채팅 기능  - 팀원들한테 설명해줄거

 

daphne

: Django Channels에서 사용되는 ASGI(Asynchronous Server Gateway Interface) 서버

 

Django 기본적으로는 WSGI라는 동기 서버를 사용하지만

WebSocket과 같은 비동기 통신을 처리하기 위해서는 ASGI 서버가 필요함.

 

Daphne는 바로 이 ASGI 서버 역할을 하여,

Django가 비동기 요청(ex: 실시간 채팅, 알림, WebSocket 통신)을 처리할 수 있도록 해줌

 

 

WSGI는 동기식(순차적) 요청 처리만 가능하지만,

ASGI는 비동기식(동시에 여러 요청 처리)이 가능

-> 실시간 통신, 푸시 알림, 채팅 등과 같은 기능을 처리 가능.

 

 

WSGI (Web Server Gateway Interface)

  • 약자: Web Server Gateway Interface

동기 ( synchronous )

  • 동기는 동시에 똑같이 진행된다는 뜻을 가지고 있다.
  • ex) 아이폰을 동기화한다고 하면 아이튠즈와 아이폰이 동시에 같은 상태로 업데이트

ASGI (Asynchronous Server Gateway Interface)

  • 약자: Asynchronous Server Gateway Interface

비동기 ( asynchronous )

  • 비동기는 동기의 반대. 동시에 똑같이 진행되지 않는다는 뜻을 가지고 있다.
  • 작업들의 요청과 응답의 타이밍이 같지 않아도 된다는 것이다.

 

 

Docker를 사용하여 Redis 서버를 실행하는 명령

docker run --rm -p 6379:6379 redis:7

각 부분의 의미:

 

  1. docker run:
    • Docker 명령어로, 새로운 컨테이너를 실행하는 것을 의미
    • 여기서는 redis:7이라는 이름의 Redis 컨테이너를 실행하게 됨
  2. --rm:
    • 컨테이너가 종료되면 컨테이너를 자동으로 삭제하는 옵션
    • 즉, Redis 컨테이너가 중지되면 해당 컨테이너의 데이터를 포함해 모든 것이 삭제됨
  3. -p 6379:6379:
    • 호스트(==로컬 머신)의 포트 6379를 Redis 컨테이너 내부의 포트 6379에 포트 포워딩하는 설정
    • Redis는 기본적으로 6379 포트에서 실행됨 -> 로컬 머신에서도 동일한 포트에서 Redis 서버에 접속할 수 있게 설정
  4. redis:7:
    • 실행하려는 Docker 이미지의 이름. 여기서 redis:7은 Redis 버전 7을 의미함.
    • Redis 버전 7을 기반으로 컨테이너를 실행시킴.

 

그 다음에, 새로운 터미널 창을 열어서 

제대로 연결되고 있는 지 확인

$ python manage.py shell
import channels.layers
channel_layer = channels.layers.get_channel_layer()
from asgiref.sync import async_to_sync
async_to_sync(channel_layer.send)('test_channel', {'type': 'hello'})
async_to_sync(channel_layer.receive)('test_channel')


응답 : {'type': 'hello'}