[python] Django REST framework에서의 실시간 통신 처리 방법

Django REST framework은 웹 애플리케이션을 개발하는 데 도움이 되는 강력한 도구입니다. 그러나 실시간 통신을 처리하는 기능은 기본적으로 내장되어 있지 않습니다. 이번 블로그 포스트에서는 Django REST framework에서 실시간 통신을 처리하는 방법에 대해 알아보겠습니다.

1. Django Channels 설치하기

Django Channels는 Django의 기본 HTTP 기반 통신을 향상시켜 실시간 기능을 추가하는 라이브러리입니다. 다음 명령을 사용하여 Django Channels를 설치합니다:

pip install channels

2. Channels 적용하기

Channels를 프로젝트에 적용하기 위해 다음과 같이 몇 가지 단계를 따라야 합니다:

3. WebSocket을 통한 실시간 통신 처리

WebSocket은 실시간 양방향 통신을 지원하는 프로토콜입니다. Django Channels를 사용하여 WebSocket을 처리하려면 다음과 같이 몇 가지 단계를 따라야 합니다:

# routing.py

from django.urls import path
from .consumers import MyConsumer

websocket_urlpatterns = [
    path('ws/my-consumer/', MyConsumer.as_asgi()),
]

# consumers.py

from channels.generic.websocket import AsyncWebsocketConsumer

class MyConsumer(AsyncWebsocketConsumer):
    async def connect(self):
        await self.accept()

    async def disconnect(self, close_code):
        pass

    async def receive(self, text_data):
        await self.send(text_data=json.dumps({
            'message': text_data
        }))

4. Frontend에서 WebSocket을 사용하여 실시간 데이터 수신

웹 애플리케이션에서 클라이언트 측에서 WebSocket을 사용하여 실시간 데이터를 수신하려면 다음과 같이 몇 가지 단계를 따라야 합니다:

// example.js

const socket = new WebSocket('ws://127.0.0.1:8000/ws/my-consumer/');

socket.onopen = function() {
    console.log('WebSocket connection established.');
};

socket.onmessage = function(e) {
    const data = JSON.parse(e.data);
    console.log('Received message:', data);
};

socket.onclose = function() {
    console.log('WebSocket connection closed.');
};

이제 Django REST framework에서 실시간 통신을 처리하는 방법을 알게 되었습니다. Django Channels를 이용하여 WebSocket을 통해 실시간 데이터를 전송하고 수신할 수 있습니다. 이를 활용하여 웹 애플리케이션에 실시간 기능을 추가할 수 있습니다.

추가 자료:

참고: 이 포스트는 Django 3.0과 Django REST framework 3.11을 기준으로 작성되었습니다.