Celery를 이용한 웹 소켓 통신

Celery는 파이썬 기반의 분산 작업 큐라이브러리로, 비동기 작업을 쉽게 구현할 수 있습니다. 이번 포스트에서는 Celery를 사용하여 웹 소켓 통신을 어떻게 구현할 수 있는지 알아보겠습니다.

1. Celery 설치

Celery를 사용하기 위해 우선 Celery를 설치해야 합니다. 다음 명령어를 사용하여 Celery를 설치할 수 있습니다:

pip install celery

2. 프로젝트 설정

Celery를 사용하기 위해 프로젝트 설정을 해야 합니다. 프로젝트의 루트 디렉토리에 celery.py 파일을 생성하고 다음 코드를 추가합니다:

from celery import Celery

app = Celery('myapp', broker='pyamqp://guest@localhost//')

@app.task
def send_message(message):
    # 메시지를 처리하는 작업 구현
    print(f"Received message: {message}")

위 코드에서 broker 인자를 브로커 URL로 설정해야 합니다. RabbitMQ를 사용할 경우 pyamqp://guest@localhost//와 같이 설정할 수 있습니다.

3. 웹 소켓 서버 설정

웹 소켓 서버를 설정하기 위해 필요한 라이브러리를 설치합니다. 다음 명령어를 사용하여 설치할 수 있습니다:

pip install websockets

웹 소켓 서버 코드를 작성하기 위해 websocket_server.py 파일을 생성하고 다음 코드를 추가합니다:

import asyncio
import websockets

async def handle_message(websocket, path):
    message = await websocket.recv()
    # 메시지를 Celery 작업으로 보냄
    send_message.delay(message)

start_server = websockets.serve(handle_message, 'localhost', 8765)

asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()

위 코드에서 handle_message 함수는 수신된 메시지를 Celery 작업으로 보내는 역할을 합니다. 이때, send_message.delay(message)를 사용하여 Celery 작업을 실행합니다.

4. Celery 실행

Celery를 실행하기 위해 터미널에서 다음 명령어를 입력합니다:

celery -A celery_app worker --loglevel=info

위 명령어에서 -A 옵션은 Celery 애플리케이션을 지정하고, --loglevel 옵션은 로깅 레벨을 설정합니다.

5. 웹 소켓 클라이언트

마지막으로, 웹 소켓 클라이언트를 작성하여 테스트해봅니다. 아래는 웹 소켓 클라이언트의 예시 코드입니다:

import asyncio
import websockets

async def send_message():
    async with websockets.connect('ws://localhost:8765') as websocket:
        message = input('보낼 메시지를 입력하세요: ')
        await websocket.send(message)

asyncio.get_event_loop().run_until_complete(send_message())

위 코드에서는 웹 소켓 서버와 연결하고 메시지를 입력하여 서버로 전송하는 작업을 수행합니다.

마치며

이번 포스트에서는 Celery를 이용하여 웹 소켓 통신을 구현하는 방법에 대해 알아보았습니다. Celery를 사용하면 비동기 작업을 간편하게 구현할 수 있으며, 웹 소켓 통신을 효율적으로 처리할 수 있습니다.

#Celery #웹소켓