[python] FastAPI에서 배치 작업 처리하기

FastAPI는 Python의 빠른 웹 프레임워크로 알려져 있지만, 이는 단지 웹 요청-응답을 다루는 것에만 국한된 것이 아닙니다. FastAPI를 사용하여 배치 작업을 처리하는 방법에 대해 알아보겠습니다.

배치 작업이란?

배치 작업은 대량의 데이터를 처리하고 작업을 일괄적으로 수행하는 작업을 말합니다. 웹 요청 대신 주기적으로 실행되거나 큰 데이터 세트에 대해 수행되는 작업입니다. 예를 들어, 데이터베이스에 대량의 레코드를 삽입하는 작업, 파일을 처리하는 작업 등이 포함될 수 있습니다.

FastAPI에서 배치 작업 실행하기

FastAPI에서 배치 작업을 실행하는 가장 일반적인 방법은 비동기 함수를 사용하는 것입니다. FastAPI는 Starlette 및 asyncio와 통합되어 있어, 비동기 코드를 작성하고 실행할 수 있습니다.

from fastapi import FastAPI

app = FastAPI()


@app.post("/batch_job")
async def run_batch_job():
    # 배치 작업 실행 코드 작성
    pass

위의 코드에서 run_batch_job 함수는 POST 요청을 처리하는 엔드포인트로 정의되어 있습니다. 이 함수는 비동기 함수로 작성되어 있으며, 배치 작업을 실행하는 코드는 개발자가 필요에 따라 작성하면 됩니다.

비동기 작업을 위한 Background Task

FastAPI에서는 비동기 작업을 처리하기 위해 BackgroundTasks 클래스를 제공합니다. 이를 사용하면 비동기 백그라운드 작업을 일괄적으로 처리할 수 있습니다.

from fastapi import FastAPI, BackgroundTasks

app = FastAPI()


def run_batch_job():
    # 배치 작업 실행 코드 작성
    pass


@app.post("/batch_job")
async def run_batch_job(background_tasks: BackgroundTasks):
    background_tasks.add_task(run_batch_job)
    return {"message": "Batch job has been scheduled."}

위의 코드에서 background_tasks 매개변수를 엔드포인트 함수에 추가하여 백그라운드 작업을 처리할 수 있습니다. background_tasks.add_task 메서드를 통해 비동기 함수를 백그라운드 작업으로 추가할 수 있습니다.

Celery와 함께 사용하기

FastAPI와 함께 Celery 같은 작업 큐를 사용하여 복잡한 배치 작업을 처리할 수도 있습니다. Celery는 분산 작업 처리를 위한 강력한 도구로 알려져 있습니다. 그렇게 하기 위해서는 Celery를 설정하고 작업을 정의한 다음 FastAPI와 통합하는 작업이 필요합니다.

from fastapi import FastAPI
from celery import Celery

app = FastAPI()
celery = Celery("worker", broker="redis://localhost:6379/0")


@celery.task
def run_batch_job():
    # 배치 작업 실행 코드 작성
    pass


@app.post("/batch_job")
async def run_batch_job():
    run_batch_job.delay()
    return {"message": "Batch job has been scheduled."}

위의 코드에서 celery.task 데코레이터를 사용하여 Celery 작업으로 정의한 run_batch_job 함수를 작성할 수 있습니다. delay() 메서드를 사용하여 비동기적으로 작업을 예약하고 처리할 수 있습니다.

결론

FastAPI를 사용하면 배치 작업을 쉽게 처리할 수 있습니다. 비동기 작업을 수행하는 것뿐만 아니라 Celery와 같은 작업 큐를 통합하여 복잡한 배치 작업을 처리할 수도 있습니다. FastAPI는 빠른 속도와 강력한 기능을 제공하여 개발자들이 웹 개발뿐만 아니라 다양한 작업을 처리할 수 있도록 지원합니다.

참고: FastAPI 공식 문서