1. Batch Processing, Batch Serving
1. Batch Processing: 소프트웨어 프로그램을 자동으로 실행하는 방법, 일정 기간 동안 일괄적으로 '작업을 수행'
2. Batch Serving: 일정 기간 데이터를 수집한 후 일괄적으로 학습 및 예측 결과를 제공하는 방식, 일정 기간 동안 일괄적으로 '머신러닝 예측 작업'을 진행
Batch Processing이 조금 더 큰 개념이며, Batch으로 진행하는 작업에 Airflow을 사용할 수 있다.
Batch Serving은 대량의 데이터를 효율적으로 처리할 수 있으며, 주로 다음과 같은 상황에서 활용됩니다:
- 모델의 주기적인 학습 (e.g., 1주일 단위 Continuous Training).
- 일정 주기로 데이터 묶음을 예측 (e.g., 30분, 1시간 단위).
- 데이터 규모와 목적에 따라 실행 주기가 달라질 수 있음 (일, 주 단위 등).
Batch Serving의 사례
- 음악 추천 시스템: Spotify의 Discover Weekly와 같은 서비스.
- 수요 예측: 매장별 제품 수요를 예측하여 재고 및 입고 최적화.
- 이미지 처리: AWS S3와 같은 저장소의 이미지를 예측.
- 자연어 처리: 새롭게 추가된 텍스트 데이터를 예측.
2. Apache Airflow
Airflow와 Crontab 비교
Crontab: 리눅스에서 제공하는 시간 기반 작업 스케쥴링 도구이다. 단순한 도구로 간편하지만, 오류 처리, 로그 관리 등의 기능이 제한적이다.
Airflow: 에어비앤비에서 개발한 워크플로우 관리 및 스케쥴링 도구이다. 복잡한 데이터 파이프라인과 작업 간 의존성을 처리하는 데 적합하고 확장성이 뛰어납니다.
DAG(Directed Acyclic Graph) 구조를 통해 작업 간의 의존성을 정의.
Airflow의 핵심 개념
- DAGs: Airflow에서 작업을 정의하는 방법, 작업의 흐름과 순서를 정의한다.
- Operator: Airflow의 작업 유형을 나타내는 클래스. BashOperator, PythonOperator, SQLOperator 등 다양한 Operator가 있다.
- Scheduler: DAGs의 실행을 관리하고 스케쥴링한다. DAGs을 보며 현재 실행해야 하는지 스케줄을 확인한다.
- Excutor: 작업이 실행되는 환경.
Airflow의 특징
- 확장성
다양한 Operator(BashOperator, PythonOperator 등)를 활용하여 복잡한 워크플로우를 구현 가능. 또한 외부 서비스와의 통합(AWS, GCP, MySQL 등)을 지원한다.
- DAG 기반 워크플로우
DAG(Directed Acyclic Graph) 구조를 통해 작업 간 의존성을 명확하게 정의할 수 있다. 작업 간 분기(branch 기능 사용)와 병렬 실행, 실패 시 재시도(Slack, 이메일 등으로 알람 제공) 등의 기능을 지원한다.
- Web UI
직관적인 인터페이스를 통해 작업 스케쥴링, 실행 이력 및 상태를 모니터링 할 수 있다. 실행 중인 DAG의 상태를 그래프 또는 캘린더뷰로 확인할 수 있다.
- 실시간 관리
Task 중간 실패 시 특정 Task에서만 재실행이 가능하다. 또한 DAG의 실행 상태를 실시간으로 파악할 수 있다.
- 유연성
코드(Python) 기반으로 작업을 정의할 수 있다. 또한 Jinja 템플릿 등을 통해 매개변수화된 DAG 작성 가능하다.
Airflow 작동원리
기본 아키텍쳐: DAG Directory

여기 안에 DAG 파일들을 저장한다. 계속해서 Scheduler에 의해 .py 파일이 모두 탐색되고 DAG이 파싱된다.
Operator
Operator은 Batch Scheduling을 위한 DAG을 생성한다.