[파이썬] Flask를 이용한 배치 작업 스케줄링

배치 작업 스케줄링(Batch Job Scheduling)은 주기적으로 실행되어야 하는 작업을 일정한 시간에 자동으로 실행하는 것을 의미합니다. 이를 통해 시스템이 정기적으로 반복되는 작업을 처리하고, 자동화된 프로세스를 구현할 수 있습니다.

Flask는 파이썬 기반의 경량 웹 프레임워크로, 주로 웹 애플리케이션을 개발하는 데 사용됩니다. 그러나 Flask를 사용하여 배치 작업 스케줄링을 구현하는 것도 가능합니다. Flask는 자체적인 스케줄러를 가지지 않지만, 외부 라이브러리를 사용하여 간단하게 구현할 수 있습니다.

Flask-Crontab 라이브러리

Flask-Crontab은 Flask 애플리케이션에서 Cron 작업 스케줄을 관리하기 위한 라이브러리입니다. Cron은 리눅스 환경에서 사용되는 스케줄링 시스템으로, 특정 작업을 예약된 시간에 실행할 수 있도록 지원합니다.

Flask-Crontab 설치

Flask-Crontab은 pip를 통해 간단하게 설치할 수 있습니다.

pip install Flask-Crontab

Flask-Crontab 설정

Flask-Crontab을 사용하려면 Flask 애플리케이션에 설정을 추가해야 합니다. app.py와 같은 파일에 다음과 같은 코드를 추가해주세요.

from flask import Flask
from flask_crontab import Crontab

app = Flask(__name__)
crontab = Crontab(app)

app.config['JOBS'] = [
    {
        'id': 'job1',
        'func': 'path.to.execute_job',
        'args': (),
        'trigger': 'interval',
        'hours': 1  # 매 시간마다 실행
    },
    {
        'id': 'job2',
        'func': 'path.to.execute_another_job',
        'args': (),
        'trigger': 'cron',
        'minute': 30  # 매 시간 30분마다 실행
    },
]

crontab.init_app(app)

위의 코드에서 app.config['JOBS']는 스케줄링될 작업 목록을 정의합니다. id는 고유한 작업 식별자이며, func는 실행될 함수를 나타냅니다. trigger는 작업이 실행될 주기를 지정하는데, interval은 특정 시간마다, cron은 특정 시간에 작업을 실행하도록 설정할 수 있습니다.

작업 실행 함수 정의

위의 코드에서 func로 지정한 함수는 작업을 실행할 함수입니다. 해당 함수를 정의하고 원하는 작업을 구현해야 합니다. 함수는 Flask 애플리케이션 내의 어떤 모듈에도 위치할 수 있으며, path.to.execute_job 형식으로 함수를 지정하면 됩니다.

# path.to.execute_job 함수 정의 예시
def execute_job():
    # 작업 실행 로직을 구현합니다.
    pass

# path.to.execute_another_job 함수 정의 예시
def execute_another_job():
    # 다른 작업 실행 로직을 구현합니다.
    pass

애플리케이션 실행

위에서 작성한 Flask 애플리케이션을 실행하면, 스케줄링된 작업이 주기적으로 실행됩니다. Flask 애플리케이션을 실행하는 방법은 Flask에 익숙하신 분들은 이미 아실 것이라 생각합니다.

if __name__ == '__main__':
    app.run()

위의 코드를 app.py와 같은 파일에 추가하고, 터미널에서 python app.py를 실행하여 Flask 애플리케이션을 실행할 수 있습니다.

결론

Flask를 이용한 배치 작업 스케줄링은 Flask-Crontab 라이브러리를 활용하여 간단하게 구현할 수 있습니다. Flask-Crontab을 설치하고 설정하여 스케줄링할 작업을 정의하고, 작업을 실행할 함수를 구현하면 됩니다. 이를 통해 일정한 주기로 반복되는 작업을 자동화하고 효율적으로 처리할 수 있습니다.

참고 문서:

Happy coding!