[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의 공식 문서를 참고하시기 바랍니다.

참고 자료