FastAPI는 빠르고 간편한 웹 프레임워크로써, 비동기 작업을 지원합니다. 이를 활용하여 백그라운드 작업을 예약하고 실행하는 방법을 알아보겠습니다.
1. BackgroundTasks를 이용한 작업 예약
FastAPI에서 백그라운드 작업을 예약하려면, BackgroundTasks
객체를 사용해야 합니다. 이 객체를 사용하면 HTTP 응답 전에 작업을 예약할 수 있습니다.
아래는 BackgroundTasks
를 이용하여 백그라운드 작업을 예약하는 간단한 예제입니다.
from fastapi import BackgroundTasks, FastAPI
app = FastAPI()
def my_background_task():
# 백그라운드 작업 로직 구현
print("백그라운드 작업 실행")
@app.post("/task/")
async def create_task(background_tasks: BackgroundTasks):
# 백그라운드 작업 예약
background_tasks.add_task(my_background_task)
return {"message": "백그라운드 작업 예약 완료"}
위 코드에서 my_background_task()
함수는 백그라운드에서 실행되는 작업 로직입니다. create_task()
함수는 HTTP POST 메서드로 요청이 들어올 때 백그라운드 작업을 예약하는 엔드포인트입니다. BackgroundTasks
객체를 이용하여 my_background_task()
함수를 예약하고, “백그라운드 작업 예약 완료” 메시지를 반환합니다.
2. 비동기 작업 실행
위 예제에서는 백그라운드 작업 함수를 동기적으로 실행했습니다. 하지만 FastAPI는 비동기 프레임워크이기 때문에, 작업 함수를 비동기로 실행할 수도 있습니다. 이를 위해 async
키워드를 사용하여 비동기 작업 함수를 정의합니다.
@app.post("/task/")
async def create_task(background_tasks: BackgroundTasks):
# 백그라운드 작업 예약
background_tasks.add_task(my_async_background_task)
return {"message": "백그라운드 작업 예약 완료"}
# 비동기 백그라운드 작업 함수
async def my_async_background_task():
# 비동기 작업 로직 구현
print("비동기 백그라운드 작업 실행")
위 예제에서는 my_async_background_task()
함수를 async
키워드로 정의한 후, create_task()
함수에서 해당 함수를 예약하였습니다. “비동기 백그라운드 작업 실행” 메시지가 출력될 때까지 대기하지 않고 다음 작업을 실행할 수 있습니다.
3. Celery 등의 작업 큐 사용하기
FastAPI에서 백그라운드 작업 예약을 보다 고급화하려면, Celery와 같은 작업 큐를 사용할 수 있습니다. Celery는 분산 작업 처리를 위한 오픈소스 솔루션으로써, 비동기 작업을 효율적으로 처리할 수 있습니다.
FastAPI 백그라운드 작업을 Celery와 연동하기 위해서는 추가 설정이 필요합니다. 이에 대해서는 별도의 포스트에서 다루겠습니다.