FastAPI와 Celery를 사용하여 백그라운드 작업 스케줄링하기

fastapi-celery

소개

FastAPI와 Celery는 둘 다 파이썬으로 작성된 매우 인기있는 오픈소스 라이브러리입니다. FastAPI는 빠르고 현대적인 웹 애플리케이션 프레임워크로, 풍부한 기능과 빠른 실행 속도를 특징으로 합니다. Celery는 분산 작업 큐 및 작업 스케줄링을 제공하는 비동기 작업 큐 시스템으로, 비동기적으로 실행되는 백그라운드 작업을 쉽게 제어할 수 있습니다.

이 블로그 포스트에서는 FastAPI와 Celery를 함께 사용하여 백그라운드 작업을 스케줄링하는 방법을 알아보겠습니다.

준비물

pip install fastapi
pip install celery

스텝 1: FastAPI 애플리케이션 작성하기

내부적으로 FastAPI는 ASGI 애플리케이션으로 작동하므로 main.py 파일을 만들고 다음과 같이 작성합니다.

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def read_root():
    return {"Hello": "World"}

스텝 2: Celery 작업 정의하기

Celery 작업은 별도의 파일 tasks.py에 정의됩니다. 여기에는 백그라운드에서 실행되는 작업을 포함합니다.

from celery import Celery

# Celery 인스턴스 생성
app = Celery('tasks', broker='pyamqp://guest@localhost//')

# 작업 정의
@app.task
def add(x, y):
    return x + y

스텝 3: FastAPI에서 Celery 작업 실행하기

FastAPI 애플리케이션에서 Celery 작업을 실행하려면 main.py 파일에 코드를 추가해야 합니다.

from fastapi import FastAPI
from tasks import add

app = FastAPI()

@app.get("/")
def read_root():
    # Celery 작업 실행
    result = add.delay(4, 6)
    return {"task_id": result.task_id}

스텝 4: Celery 작업 스케줄링하기

Celery는 작업을 특정 시간 또는 주기적으로 실행할 수 있습니다. 이를 위해 tasks.py 파일의 작업 정의를 수정해야 합니다.

from celery import Celery
from datetime import timedelta

# Celery 인스턴스 생성
app = Celery('tasks', broker='pyamqp://guest@localhost//')

# 작업 정의
@app.task
def add(x, y):
    return x + y

# 작업 스케줄링
app.conf.beat_schedule = {
    'add-every-30-seconds': {
        'task': 'tasks.add',
        'schedule': timedelta(seconds=30),
        'args': (1, 2)
    },
}

마무리

이제 FastAPI와 Celery를 사용하여 백그라운드 작업을 스케줄링하는 방법을 알게 되었습니다. 이 기술은 빠른 웹 애플리케이션과 비동기 작업 처리의 조합으로 매우 강력하며, 대규모 애플리케이션에서 유용합니다. FastAPI와 Celery의 강력한 기능을 통해 애플리케이션의 성능과 확장성을 크게 향상시킬 수 있습니다.

#FastAPI #Celery