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 #웹소켓