FastAPI를 사용해서 Cron 작업을 스케줄링하는 방법

FastAPI는 빠르고 간단하게 웹 애플리케이션을 개발할 수 있는 Python 프레임워크입니다. 하지만 FastAPI는 웹 프레임워크이기 때문에 Cron 작업을 스케줄링하기 위해선 추가적인 작업이 필요합니다. 이번 포스트에서는 FastAPI에서 Cron 작업을 스케줄링하는 방법에 대해 알아보겠습니다.

APScheduler 설치하기

Cron 작업을 스케줄링하기 위해 우선 APScheduler를 설치해야 합니다. APScheduler는 파이썬에서 다양한 스케줄링 작업을 처리하는 라이브러리입니다. 설치하기 위해 다음 명령어를 실행하세요.

pip install apscheduler

Cron 작업 클래스 생성하기

Cron 작업을 스케줄링하기 위해 작업을 수행할 클래스를 생성해야 합니다. 해당 클래스는 BackgroundScheduler를 상속받아야 합니다. 예를 들어, 다음과 같은 MyTask 클래스를 생성할 수 있습니다.

from apscheduler.schedulers.background import BackgroundScheduler

class MyTask:
    def __init__(self):
        # 배경 스케줄러 생성
        self.scheduler = BackgroundScheduler()
        # 작업 스케줄링
        self.scheduler.add_job(self.do_task, 'cron', hour=6, minute=0)
    
    def do_task(self):
        # Cron 작업을 수행할 코드 작성
        # 예시로 현재 시간을 출력해보겠습니다.
        print("현재 시간은:", datetime.now())
    
    def start(self):
        # 스케줄러 시작
        self.scheduler.start()
    
    def stop(self):
        # 스케줄러 종료
        self.scheduler.shutdown()

위의 예시 코드에서는 MyTask 클래스를 정의하고, BackgroundScheduler를 사용하여 배경에서 작업을 수행할 수 있도록 합니다. do_task 메소드에서는 실제로 수행할 Cron 작업을 작성합니다. 예시로 현재 시간을 출력하는 코드가 포함되어 있습니다.

FastAPI 애플리케이션과 Cron 작업 연동하기

FastAPI 애플리케이션과 Cron 작업을 연동하기 위해서는 애플리케이션의 시작과 종료 시점에 Cron 작업을 시작하고 중지하는 로직을 추가해야 합니다. 이를 위해 MyTask 클래스를 사용할 수 있습니다. 아래 예시 코드를 참고하세요.

from datetime import datetime
from fastapi import FastAPI
from my_task import MyTask

app = FastAPI()

@app.on_event("startup")
async def startup_event():
    # Cron 작업 시작
    my_task = MyTask()
    my_task.start()

@app.on_event("shutdown")
async def shutdown_event():
    # Cron 작업 중지
    my_task.stop()

@app.get("/")
async def root():
    return {"message": "Hello, World!"}

위의 예시 코드에서는 FastAPI 애플리케이션의 startup_event 이벤트 핸들러에서 MyTask 클래스를 인스턴스화하고 스케줄링 작업을 시작합니다. 마찬가지로 shutdown_event 이벤트 핸들러에서는 작업을 중지합니다.

마치며

이번 포스트에서는 FastAPI에서 Cron 작업을 스케줄링하는 방법에 대해 알아보았습니다. APScheduler 라이브러리를 사용하여 Cron 작업을 스케줄링하고, FastAPI 애플리케이션과 연동하는 예시 코드를 제공했습니다. 이를 활용하여 FastAPI 애플리케이션에서 원하는 Cron 작업을 스케줄링할 수 있습니다.

#FastAPI #Cron작업