실시간채팅 기능 - 팀원들한테 설명해줄거
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
각 부분의 의미:
- docker run:
- Docker 명령어로, 새로운 컨테이너를 실행하는 것을 의미
- 여기서는 redis:7이라는 이름의 Redis 컨테이너를 실행하게 됨
- --rm:
- 컨테이너가 종료되면 컨테이너를 자동으로 삭제하는 옵션
- 즉, Redis 컨테이너가 중지되면 해당 컨테이너의 데이터를 포함해 모든 것이 삭제됨
- -p 6379:6379:
- 호스트(==로컬 머신)의 포트 6379를 Redis 컨테이너 내부의 포트 6379에 포트 포워딩하는 설정
- Redis는 기본적으로 6379 포트에서 실행됨 -> 로컬 머신에서도 동일한 포트에서 Redis 서버에 접속할 수 있게 설정
- 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'}