[python] Django와 소켓통신(Socket communication) 방법은 어떻게 되는가?

소켓 통신은 Django와 같은 웹 프레임워크에서 사용자와 실시간으로 데이터를 주고받는데 매우 유용합니다. Django에서 소켓 통신을 구현하기 위해서는 몇 가지 단계를 따라야 합니다.

1. Django Channels 설치하기

Django Channels는 Django에서 비동기적인 웹 애플리케이션을 만들 수 있게 해주는 라이브러리입니다. 다음 명령어를 사용하여 Django Channels를 설치합니다.

pip install channels

2. 채널 라우팅 설정하기

Django Channels를 사용하기 위해 설정 파일에 채널 라우팅을 추가해야 합니다. 프로젝트의 settings.py 파일을 열고 다음과 같이 CHANNEL_LAYERS 변수를 설정합니다.

CHANNEL_LAYERS = {
    "default": {
        "BACKEND": "channels.layers.InMemoryChannelLayer",
    },
}

이렇게 설정하면 Django Channels에서 사용하는 채널 레이어가 메모리에 생성되어 데이터를 주고받을 수 있게 됩니다.

3. Consumers 작성하기

Consumers는 Django Channels에서 소켓 통신을 처리하는 클래스입니다. 프로젝트 디렉토리에 consumers.py 파일을 생성하고 다음과 같이 작성합니다.

from channels.generic.websocket import WebsocketConsumer

class MyConsumer(WebsocketConsumer):
    def connect(self):
        self.accept()

    def disconnect(self, close_code):
        pass

    def receive(self, text_data):
        self.send(text_data='You said: ' + text_data)

위의 예제는 클라이언트로부터 메시지를 받아서 다시 그대로 돌려주는 간단한 Consumer입니다. 필요에 따라 기능을 추가하거나 수정하실 수 있습니다.

4. 라우팅 설정하기

Consumer를 사용하기 위해 라우팅 설정이 필요합니다. 라우팅 설정은 Django 프로젝트 디렉토리에 routing.py 파일을 생성하여 작성합니다.

from django.urls import re_path

from . import consumers

websocket_urlpatterns = [
    re_path(r'ws/my-consumer/$', consumers.MyConsumer.as_asgi()),
]

해당 예제는 웹소켓 URL 패턴을 MyConsumer 클래스와 연결하고 있습니다. 필요에 따라 URL 패턴을 수정하고 다른 Consumer와 연결할 수 있습니다.

5. Django 서버 실행하기

마지막으로 Django 서버를 실행하여 소켓 통신을 테스트할 수 있습니다. 다음 명령어를 사용하여 Django 개발 서버를 실행합니다.

python manage.py runserver

Django 서버가 정상적으로 실행되면 ws://localhost:8000/ws/my-consumer/와 같은 URL에 접속하여 소켓 통신을 테스트할 수 있습니다.

이렇게 Django와 소켓 통신을 구현할 수 있습니다. Django Channels를 사용하면 Django 어플리케이션에서 실시간으로 데이터를 처리할 수 있는 강력한 기능을 제공받을 수 있습니다.

참고 자료: