728x90
반응형
SMALL
1. 실습 환경 아키텍처 구성
https://github.com/hosose/DE/tree/airflow
GitHub - hosose/DE at airflow
Contribute to hosose/DE development by creating an account on GitHub.
github.com
실습 전 파일을 받아보고 싶으시다면 위의 github에 접속하여 실습을 진행해보아요.
데이터 엔지니어링 실습을 위해 독립적이고 재현 가능한 로컬 시스템을 구축합니다.
Docker Compose를 사용하여 Apache Airflow 클러스터, MySQL RDBMS DB, FastAPI microservice를 한 번에 띄웁니다.

┌──────────────────────────────────────────────────────────────────┐
│ DOCKER COMPOSE INFRASTRUCTURE │
└──────────────────────────────────────────────────────────────────┘
[ Docker Compose ]
│
┌───────────────────────┼───────────────────────┐
▼ ▼ ▼
[ Airflow Cluster ] [ Target DW DB ] [ External Service ]
- Webserver (8080) - MySQL 8.0 - FastAPI Service
- Scheduler (Port 3306) (Port 8000)
- Celery Worker - DB: my_datawarehouse - AI Credit Score
- Triggerer Endpoint
- Postgres & Redis
2. Docker Compose 핵심 설정 분석 (docker-compose.yaml)
프로젝트 루트의 docker-compose.yaml 파일의 주요 구성 요소입니다.
위의 링크로 docker-compose.yaml을 다운로드하고 아래 내용을 추가해야합니다.
1) 한국 타임존(Asia/Seoul) 및 MySQL 연동 패키지 설정
x-airflow-common:
&airflow-common
image: ${AIRFLOW_IMAGE_NAME:-apache/airflow:2.10.0}
environment:
&airflow-common-env
TZ: 'Asia/Seoul'
AIRFLOW_WEBSERVER_DEFAULT_UI_TIMEZONE: 'Asia/Seoul'
AIRFLOW__CORE__EXECUTOR: CeleryExecutor
AIRFLOW__DATABASE__SQL_ALCHEMY_CONN: postgresql+psycopg2://airflow:airflow@postgres/airflow
AIRFLOW__CELERY__BROKER_URL: redis://:@redis:6379/0
# MySQL 접속용 Provider 패키지 자동 설치
_PIP_ADDITIONAL_REQUIREMENTS: ${_PIP_ADDITIONAL_REQUIREMENTS:-} apache-airflow-providers-mysql
volumes:
- ${AIRFLOW_PROJ_DIR:-.}/dags:/opt/airflow/dags
- ${AIRFLOW_PROJ_DIR:-.}/logs:/opt/airflow/logs
- ${AIRFLOW_PROJ_DIR:-.}/plugins:/opt/airflow/plugins
2) 데이터 적재용 MySQL 컨테이너 구성
mysql:
image: mysql:8.0
container_name: airflow-mysql
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: my_datawarehouse
MYSQL_USER: guest
MYSQL_PASSWORD: guest
ports:
- "3306:3306"
volumes:
- mysql-db-volume:/var/lib/mysql
3) AI 신용평가 외부 API 서빙 컨테이너 (FastAPI)
ai-api-server:
build: ./api_server
container_name: airflow-ai-api-server
ports:
- "8000:8000"
3. FastAPI 신용평가 서버 구현
api_server/main.py 파일은 사용자 소득 및 대출액 정보를 전달받아 신용점수와 등급을 반환하는 REST API 서버입니다.
from fastapi import FastAPI
from pydantic import BaseModel
from typing import List
import random
app = FastAPI()
class ReqData(BaseModel):
user_id: str
income: int
loan_amt: int
class ResData(BaseModel):
user_id: str
credit_score: int
grade: str
@app.post("/predict", response_model=List[ResData])
def predict(users: List[ReqData]):
results = []
for user in users:
formula = (user.income // 1000) * 10
score = min(random.randint(300, 600) + formula, 990)
grade = "A" if score >= 800 else "B" if score >= 600 else "C"
results.append({
"user_id": user.user_id,
"credit_score": score,
"grade": grade
})
return results
4. 환경 셋업 및 실행 명령어
Step 1. 필요한 디렉토리 생성 및 .env 설정
mkdir dags logs plugins config
echo "AIRFLOW_UID=50000" > .env
Step 2. Airflow 메타 DB 초기화 (1회성)
docker compose up airflow-init
Step 3. 전체 서비스 데몬 실행
docker compose up -d
Step 4. 실행 확인 및 웹 대시보드 접속
- Airflow Web UI: http://localhost:8080 (ID:
airflow/ PW:airflow) - FastAPI API Swagger Docs: http://localhost:8000/docs
- MySQL DB:
localhost:3306(DB:my_datawarehouse, USER:guest, PW:guest)
5. 1편 요약 및 다음 편 예고
이제 데이터 엔지니어링 실습에 필요한 Airflow, MySQL, FastAPI 인프라 구축이 완료되었습니다.
다음 2편에서는 Apache Airflow의 핵심 개념(DAG, Task, TaskInstance)과 BashOperator, PythonOperator, XCom을 사용한 첫 번째 파이프라인 작성을 진행하겠습니다.
반응형
LIST