[python] Django REST framework에서의 웹소켓 통신 처리 방법
웹소켓은 실시간으로 양방향 통신이 가능한 프로토콜로, Django REST framework에서도 웹소켓 기능을 쉽게 구현할 수 있습니다. Django Channels 패키지를 사용하여 웹소켓 통신을 처리할 수 있습니다.
1. Django Channels 설치
먼저, Django Channels 패키지를 설치해야 합니다. 다음 명령어를 사용하여 설치할 수 있습니다.
pip install channels
2. 프로젝트 설정
웹소켓을 사용하기 위해서는 Django Channels를 프로젝트에 설정해야 합니다. settings.py
파일에 다음과 같이 설정해줍니다.
INSTALLED_APPS = [
#...
'channels',
]
ASGI_APPLICATION = '<your_project_name>.asgi.application'
3. 웹소켓 핸들러 작성
이제 웹소켓 요청을 처리하는 핸들러를 작성해야 합니다. consumers.py
파일을 생성하고 다음과 같이 작성합니다.
from channels.generic.websocket import AsyncWebsocketConsumer
class WSConsumer(AsyncWebsocketConsumer):
async def connect(self):
await self.accept()
async def disconnect(self, close_code):
pass
async def receive(self, text_data):
# 웹소켓에서 메시지를 받았을 때의 처리
pass
async def send_message(self, text_data):
# 웹소켓으로 메시지를 보낼 때의 처리
await self.send(text_data)
핸들러 내부에 connect
, disconnect
, receive
, send_message
메소드를 작성하여 원하는 동작을 구현합니다.
4. 라우팅 설정
웹소켓 요청을 핸들러에 연결하기 위해서는 라우팅 설정이 필요합니다. routing.py
파일을 생성하고 다음과 같이 작성합니다.
from django.urls import re_path
from . import consumers
websocket_urlpatterns = [
re_path(r'ws/your_ws_url/$', consumers.WSConsumer.as_asgi()),
]
your_ws_url
부분에는 웹소켓 요청을 처리할 URL을 입력합니다.
5. 웹소켓 서버 실행
이제 웹소켓 서버를 실행할 준비가 모두 되었습니다. 다음 명령어를 통해 서버를 실행합니다.
daphne <your_project_name>.asgi:application
웹소켓 요청이 들어오면 정상적으로 핸들러에게 전달되어 처리됩니다.
위의 방법을 통해 Django REST framework에서 웹소켓 통신을 처리할 수 있습니다. 더 복잡한 로직이나 추가적인 기능을 구현하기 위해서는 Django Channels의 공식 문서를 참고하시기 바랍니다.
참고 자료
- Django Channels 공식 문서: https://channels.readthedocs.io/en/stable/