[python] FastAPI에서 비동기 작업 큐 사용하기

FastAPI는 Python 웹 프레임워크로, 비동기 작업을 쉽게 처리할 수 있도록 지원합니다. 비동기 작업 큐는 FastAPI 프로젝트에서 비동기 작업을 처리하는 데 유용한 방법입니다. 이번 포스트에서는 FastAPI에서 비동기 작업 큐를 사용하는 방법을 알아보겠습니다.

비동기 작업 큐란?

비동기 작업 큐는 어떤 작업을 맡기고 결과를 기다리지 않고 다음 작업을 실행할 수 있도록 하는 메커니즘입니다. 비동기 작업 큐는 웹 어플리케이션에서 긴 처리 시간이 소요되는 작업(파일 업로드, 이미지 처리 등)을 백그라운드로 실행할 때 유용합니다.

Celery 사용하기

FastAPI에서 가장 많이 사용되는 비동기 작업 큐인 Celery를 사용해보겠습니다. Celery는 Python으로 작성된 분산 작업 큐로, Redis나 RabbitMQ와 같은 캐시나 메시지 브로커와 함께 사용됩니다.

Celery를 사용하기 위해서는 celery 패키지를 먼저 설치해야 합니다. 다음 명령을 사용하여 설치할 수 있습니다:

pip install celery

Celery를 초기화하고 FastAPI와 함께 사용하기 위해 다음과 같은 코드를 작성합니다:

from celery import Celery

app = Celery(
    'tasks',
    broker='amqp://guest@localhost//',
    backend='rpc://'
)

@app.task
def process_data(data):
    # 비동기로 처리할 작업 수행
    return processed_data

위의 예시에서 brokerbackend는 Celery가 메시지 브로커와 통신할 때 사용되는 설정입니다. 여기서는 기본 설정을 사용하였습니다.

Celery 작업을 FastAPI에서 호출하기 위해 다음과 같은 코드를 작성합니다:

from fastapi import FastAPI
from .tasks import process_data

app = FastAPI()

@app.post('/process')
async def process():
    # 비동기 작업 시작
    result = process_data.delay(data)

    return {"task_id": result.id}

위의 예시에서 process_data.delay(data) 를 통해 비동기 작업을 호출할 수 있습니다. 이 작업은 백그라운드에서 실행되며, 결과는 result.id를 통해 확인할 수 있습니다.

결론

이번 포스트에서는 FastAPI에서 비동기 작업 큐를 사용하는 방법에 대해 알아보았습니다. Celery를 사용하여 비동기 작업을 처리하는 방법을 설명하였습니다. 비동기 작업 큐를 활용하면 긴 처리 시간이 소요되는 작업을 효율적으로 처리할 수 있습니다. FastAPI와 Celery의 조합은 웹 어플리케이션 개발에 매우 유용한 도구입니다.

참고 자료