2 단계. 코드 준비¶
이 단계에서는 DAG 파일과 데이터 파일을 준비하고, 인증 정보를 설정한 뒤 Gitea에 push합니다.
이 단계를 마치면 아래 준비가 완료됩니다.
- DAG 파일과 학습 데이터가
airflow-dag레포지토리에 추가됨 - 인증 정보 및 서비스 엔드포인트 설정 완료
- Gitea에 push → Airflow가 DAG를 인식할 준비 완료
2-1. DAG 파일 구조 이해¶
이 튜토리얼에서 사용하는 DAG는 아래 5개 Task로 구성됩니다.
load_data → load_model → train_model → evaluate_model → log_to_mlflow
| Task | 역할 |
|---|---|
load_data |
CSV 데이터를 로드하고 /tmp에 저장 |
load_model |
XGBoost 모델을 하이퍼파라미터로 초기화 |
train_model |
데이터 전처리(불필요 컬럼 제거, train/test 분리) 후 모델 학습 |
evaluate_model |
RMSE, MAE, R² 메트릭 계산 |
log_to_mlflow |
파라미터, 메트릭, 모델 아티팩트를 MLflow에 등록 |
Task 내부에서 import하는 이유
각 Task 함수 안에서 import pandas as pd처럼 패키지를 import합니다. Airflow는 DAG를 읽는 시점(파싱)과 실제로 Task를 실행하는 시점이 다르기 때문입니다. 함수 안에서 import하면 DAG 파싱 시 패키지가 없어도 오류가 발생하지 않습니다.
2-2. 샘플 파일 준비¶
DAG 파일(wind_power_prediction.py), 학습 데이터(turbine_data.csv), 모델 다운로드 스크립트(download_model.py)를 airflow-dag 디렉토리에 추가합니다.
Code-server 터미널에서 아래 명령을 실행합니다.
cd ~/airflow-dag
샘플 파일을 다운로드합니다.
wget -O wind_power_prediction.py {샘플-파일-URL}/wind_power_prediction.py
wget -O turbine_data.csv {샘플-파일-URL}/turbine_data.csv
wget -O download_model.py {샘플-파일-URL}/download_model.py
파일이 정상적으로 추가되었는지 확인합니다.
ls
아래와 같이 3개 파일이 보이면 됩니다.
download_model.py turbine_data.csv wind_power_prediction.py
2-3. 설정값 입력¶
두 파일(wind_power_prediction.py, download_model.py)의 상단 설정 섹션을 실제 값으로 교체합니다.
wind_power_prediction.py¶
Code-server에서 파일을 열고 아래 항목을 수정합니다.
인증 정보
| 변수 | 확인 위치 |
|---|---|
RUNWAY_API_KEY |
계정 설정 > 액세스 키 > API 키 |
AWS_ACCESS_KEY_ID |
계정 설정 > 액세스 키 > S3 키 |
AWS_SECRET_ACCESS_KEY |
계정 설정 > 액세스 키 > S3 키 |
서비스 엔드포인트
| 변수 | 확인 위치 |
|---|---|
MLFLOW_TRACKING_URI |
워크스페이스 > 플랫폼 앱 > MLflow 접속 URL |
MLFLOW_S3_ENDPOINT_URL |
워크스페이스 > 플랫폼 앱 > S3 접속 URL |
실험 및 모델 이름
Runway에서 MLflow 실험과 모델 이름은 {프로젝트ID}.{이름} 형식을 따릅니다.
| 변수 | 형식 | 예시 |
|---|---|---|
EXPERIMENT_NAME |
{프로젝트ID}.{실험명} |
exam2011-ef-02.wind-power-prediction |
MODEL_NAME |
{프로젝트ID}.{모델명} |
exam2011-ef-02.wind-power-xgboost |
프로젝트 ID 확인
프로젝트 ID는 시작 전 준비사항에서 확인한 값을 사용합니다.
인증 정보 보안
이 튜토리얼에서는 학습 목적으로 코드에 직접 입력합니다. 실제 운영 환경에서는 Airflow Variables 또는 Connections를 사용하여 코드에 직접 노출되지 않도록 관리하세요.
download_model.py¶
이 스크립트는 파이프라인 실행 후 S3에 저장된 모델 파일을 PVC로 다운로드합니다. 아래 항목을 수정합니다.
| 변수 | 값 | 확인 위치 |
|---|---|---|
MLFLOW_S3_ENDPOINT_URL |
S3 접속 URL | 워크스페이스 > 플랫폼 앱 > S3 접속 URL |
AWS_ACCESS_KEY_ID |
S3 액세스 키 ID | 계정 설정 > 액세스 키 > S3 키 |
AWS_SECRET_ACCESS_KEY |
S3 시크릿 키 | 계정 설정 > 액세스 키 > S3 키 |
S3_BUCKET |
프로젝트 ID | 예: exam2011-ef-02 |
S3_ARTIFACT_PREFIX |
mlflow/experiments/{실험명}/models/ |
EXPERIMENT_NAME의 . 뒤 부분 사용 |
S3_ARTIFACT_PREFIX 입력 방법
EXPERIMENT_NAME이 exam2011-ef-02.wind-power-prediction이라면,
S3_ARTIFACT_PREFIX는 mlflow/experiments/wind-power-prediction/models/로 입력합니다.
2-4. Gitea에 push¶
설정이 완료되면 변경 사항을 Gitea에 push합니다.
Code-server 터미널에서 아래 명령을 실행합니다.
cd ~/airflow-dag
git add wind_power_prediction.py turbine_data.csv download_model.py
git commit -m "add wind power prediction DAG"
git push
push가 완료되면 Airflow가 자동으로 DAG를 인식합니다.
반영까지 시간이 걸립니다
Gitea에서 Airflow로 동기화되는 데 약 30초~1분이 소요될 수 있습니다.
다음 단계에서는 Airflow에서 DAG를 확인하고 실행합니다.