개요
서버 개발을 하다보면 Batch 작업을 언젠가 무조건 하게 된다. 이때 수많은 아래와 같은 수 많은 선택지를 마주하게 된다.
1️⃣ Spring Batch
사용 사례
엔터프라이즈 수준의 배치 처리
특징
트랜잭션 관리, 재시도 및 오류 처리, 청크 기반 처리, 다양한 데이터 소스와의 통합, 스케줄링 기능
2️⃣ Apache Spark
사용 사례
대규모 데이터 처리 (배치 및 스트리밍)
특징
인메모리 데이터 처리, 내결함성, 하둡 생태계 통합, 머신러닝 라이브러리(MLlib), 스트리밍, 그래프 처리.
3️⃣ AWS Step Functions + AWS Batch
사용 사례
클라우드 기반 배치 처리 및 오케스트레이션
특징
서버리스 실행, 확장성, 모니터링, 기타 AWS 서비스와의 통합
올바른 일처리를 위해 올바른 도구를 선택하는건 매우 중요한 일이다. 하지만 실무에서 금전적 비용, 시간적 비용 등 여러 문제들을 고려해야 한다. 그래서 나는 Airflow를 통해 배치를 작업하기로 결정했다. 현재 회사에서 Airflow가 구축되어 있는 형태며 추가적으로 서버를 개설하는건 비용적인 측면에서 낭비이기 때문이다.
Airflow 설치하는 방법
Python 설치
1
| brew install python@3.8
|
1
| echo 'export PATH="/opt/homebrew/opt/python@3.8/bin:$PATH"' >> ~/.zshrc
|
MySQL 설치
1
| brew install mysql-client
|
Anaconda 설치
아나콘다 사이트를 통해 설치 후 아래 command를 실행한다.
Airflow 설치
airflow_env
이름으로 conda 환경을 생성 후 활성화한다.
1
| conda create -n airflow_env python=3.8
|
1
| conda activate airflow_env
|
Airflow Quick Start에 가이드를 따라 아래 command들을 실행한다.
1
| export AIRFLOW_HOME=~/airflow
|
Airflow 버전과 Python 버전에 따른 URL을 설정해 준다.
1
| PYTHON_VERSION="$(python -c 'import sys; print(f"{sys.version_info.major}.{sys.version_info.minor}")')"
|
1
| CONSTRAINT_URL="https://raw.githubusercontent.com/apache/airflow/constraints-${AIRFLOW_VERSION}/constraints-${PYTHON_VERSION}.txt"
|
Airflow 설치를 진행한다.
1
| pip install "apache-airflow==${AIRFLOW_VERSION}" --constraint "${CONSTRAINT_URL}"
|
Airflow 데이터베이스를 초기화 하고 유저를 생성한다.
1
2
3
4
5
6
| airflow users create \
--username admin \
--firstname Geomseong \
--lastname Ahn \
--role Admin \
--email gs97ahn@naver.com
|
Airflow에 필요한 패키지 설치
Airflow와 Airflow 웹 서버에 필요한 Flask-Admin 및 Wekzeung 패키지를 설치한다.
1
| pip install apache-airflow flask-admin werkzeug
|
(옵션) Airflow에서 MySQL에 작업을 저장하고 쿼리를 실행할 수 있도록 관련 패키지를 설치한다.
1
| pip install apache-airflow-providers-mysql
|
에러가 난다면 아래 command를 실행한다.
1
| brew install pkg-config
|
1
| export MYSQLCLIENT_LDFLAGS=$(pkg-config --libs mysqlclient)
|
1
| export MYSQLCLIENT_CFLAGS=$(pkg-config --cflags mysqlclient)
|
(옵션) Airflow에서 AWS의 다양한 서비스와 상호 작용할 수 있는 provider를 설치한다.
1
| pip install apache-airflow-providers-amazon
|
airflow.cfg
파일을 load_example = True
를 load_example = False
로 바꿔준다.
Airflow 실행
Airflow 웹서버 및 스케줄러를 실행한다.
1
| airflow webserver --port 8080
|