Apache Airflow 실습 프로젝트 - 고급 워크플로우 오케스트레이션, 실시간 데이터 처리, 자동화된 웹 컴포넌트 생성을 보여주는 종합적인 날씨 데이터 파이프라인 시스템
이 프로젝트는 Apache Airflow를 핵심 오케스트레이션 엔진으로 사용하여 인경호의 정교한 날씨 예보 시스템을 구현합니다. 시스템은 기상청(KMA) API에서 실시간 날씨 데이터를 가져와 맞춤형 아름다움 점수 알고리즘을 통해 처리하고, 반응형 대시보드를 위한 동적 웹 컴포넌트를 생성합니다.
- 3개의 프로덕션 DAG (시간별, 일별, 월별 스케줄링 패턴)
- 실시간 API 통합 (기상청 ASOS 날씨 서비스)
- 맞춤형 아름다움 점수 알고리즘 (날씨 상태 평가)
- AI 생성 이미지 (OpenAI DALL-E 3 API 사용)
- 마이크로서비스 아키텍처 (Docker 컨테이너화)
- 동적 HTML 컴포넌트 생성 (웹 대시보드용)
┌─────────────────────────────────────────────────────────────┐
│ Airflow 오케스트레이션 레이어 │
├─────────────────┬─────────────────┬─────────────────────────┤
│ 현재 데이터 │ 일별 데이터 │ 월별 데이터 │
│ DAG (시간별) │ DAG (일별) │ DAG (월별) │
└─────────────────┴─────────────────┴─────────────────────────┘
│ │ │
▼ ▼ ▼
┌─────────────────────────────────────────────────────────────┐
│ 외부 API 및 데이터 소스 │
├─────────────────┬─────────────────┬─────────────────────────┤
│ 기상청 ASOS API │ OpenAI DALL-E │ 날씨 현상 │
│ (날씨 데이터) │ (AI 이미지) │ (점수 시스템) │
└─────────────────┴─────────────────┴─────────────────────────┘
│ │ │
▼ ▼ ▼
┌─────────────────────────────────────────────────────────────┐
│ 저장소 및 캐시 레이어 │
├─────────────────┬─────────────────┬─────────────────────────┤
│ PostgreSQL │ Redis 캐시 │ Nginx 정적 파일 │
│ (영구 저장) │ (빠른 접근) │ (웹 컴포넌트) │
└─────────────────┴─────────────────┴─────────────────────────┘
│ │ │
└─────────────────┼─────────────────┘
▼
┌─────────────────────────────────────────────────────────────┐
│ 웹 인터페이스 │
│ FastAPI + Nginx 프론트엔드 │
└─────────────────────────────────────────────────────────────┘
- 스케줄: 매시간
- 목적: 실시간 날씨 모니터링 및 AI 이미지 생성
- 작업:
fetch_weather_data: 오류 처리가 포함된 기상청 API 통합calculate_scores: 맞춤형 아름다움 점수 알고리즘 (0-100 점수)generate_status_component: 이모지가 포함된 동적 날씨 상태generate_hero_component: 히어로 이미지 컴포넌트 생성generate_openai_image: AI 기반 풍경 이미지 생성
- 스케줄: 매일 오전 1시
- 목적: 24시간 분석 및 최적 시간 예측
- 작업:
fetch_hourly_data: 어제의 완전한 시간별 데이터셋calculate_hourly_scores: 24개 데이터 포인트의 배치 처리find_best_time: 최적 방문 시간 알고리즘generate_chart_component: 인터랙티브 시간별 차트 (오전 7시-오후 8시)
- 스케줄: 매월 1일 오전 2시
- 목적: 과거 분석 및 달력 생성
- 작업:
fetch_monthly_data: 작년 같은 달 분석calculate_monthly_scores: 30-31일의 통계 처리find_special_dates: 상위 3개 최적 날짜 식별generate_calendar_component: 인터랙티브 월별 달력
- OpenAI DALL-E 3: 날씨 조건에 따른 동적 풍경 이미지 생성
- 이미지 처리: PIL을 사용한 자동 16:9 비율 크롭
- 시나리오 생성: 현실적인 호수 풍경을 위한 날씨 적응형 프롬프트 엔지니어링
- 폴백 시스템: AI 서비스 불가 시 우아한 성능 저하
# Docker Compose 아키텍처
services:
- airflow-scheduler: 핵심 워크플로우 오케스트레이션
- airflow-worker: Celery를 통한 작업 실행
- postgres: 영구 데이터 저장소
- redis: 고속 캐싱 레이어
- nginx: 정적 파일 서빙 및 리버스 프록시
- app: FastAPI 웹 애플리케이션- API 속도 제한: 기상청 서비스를 위한 지능적 요청 조절
- 오류 처리: 지수 백오프를 포함한 포괄적 재시도 메커니즘
- 데이터 검증: 들어오는 날씨 데이터의 스키마 검증
- 캐싱 전략: 다층 캐싱 (Redis + 정적 파일)
- Celery 워커: 분산 작업 처리
- XCom 통신: 효율적인 작업 간 데이터 공유
- 컴포넌트 기반 아키텍처: 모듈식 HTML 생성
- 정적 자산 최적화: 빠른 로딩을 위한 사전 생성 컴포넌트
| 카테고리 | 기술 | 목적 |
|---|---|---|
| 오케스트레이션 | Apache Airflow 3.1.3 | 워크플로우 관리 및 스케줄링 |
| 백엔드 | FastAPI + Python 3.9+ | 웹 API 및 비즈니스 로직 |
| 데이터베이스 | PostgreSQL 16 | 영구 데이터 저장소 |
| 캐시 | Redis 7.2 | 고속 데이터 접근 |
| 웹 서버 | Nginx Alpine | 정적 파일 서빙 및 프록시 |
| 컨테이너화 | Docker + Docker Compose | 서비스 오케스트레이션 |
| AI 서비스 | OpenAI DALL-E 3 | 동적 이미지 생성 |
| 외부 API | 기상청 ASOS 날씨 API | 실시간 날씨 데이터 |
- Docker & Docker Compose
- OpenAI API 키 (AI 이미지 생성용)
- 4GB+ RAM, 2+ CPU 코어
# 저장소 복제
git clone <repository-url>
cd inha-lake-forecast
# 환경 설정
cp .env.example .env
# API 키로 .env 편집
# 모든 서비스 시작
docker-compose up -d
# 인터페이스 접근
# Airflow UI: http://localhost:8080 (airflow/airflow)
# 웹 대시보드: http://localhost:8082
# API 문서: http://localhost:8001/docs# 특정 DAG 트리거
docker-compose exec airflow-scheduler airflow dags trigger current_data_dag
# 작업 상태 모니터링
docker-compose exec airflow-scheduler airflow tasks list current_data_dag
# 로그 보기
docker-compose logs airflow-worker- DAG 설계 패턴: 다양한 스케줄링 전략 구현
- 작업 의존성: 병렬 실행을 포함한 복잡한 워크플로우 오케스트레이션
- XCom 사용: 효율적인 작업 간 데이터 전달
- 오류 처리: 견고한 재시도 메커니즘 및 장애 복구
- 모니터링: 포괄적인 로깅 및 작업 상태 추적
- ETL 파이프라인: 날씨 데이터를 위한 추출-변환-로드 워크플로우
- API 통합: 속도 제한을 포함한 RESTful 서비스 소비
- 데이터 검증: 스키마 강제 및 데이터 품질 검사
- 배치 처리: 대용량 데이터셋의 효율적 처리
- 컨테이너화: 다중 서비스 Docker 아키텍처
- 서비스 오케스트레이션: 개발 환경을 위한 Docker Compose
- 리버스 프록시: 프로덕션 준비 배포를 위한 Nginx 구성
- 데이터베이스 관리: PostgreSQL 최적화 및 유지보수
- 마이크로서비스: 느슨하게 결합된 서비스 설계
- 컴포넌트 기반 UI: 모듈식 프론트엔드 아키텍처
- 캐싱 전략: 다층 성능 최적화
- API 설계: FastAPI를 사용한 RESTful 서비스 아키텍처
inha-lake-forecast/
├── airflow/ # Airflow 구성 및 DAG
│ ├── dags/ # 워크플로우 정의
│ │ ├── current_data_dag.py # 시간별 날씨 처리
│ │ ├── daily_data_dag.py # 일별 분석 및 차트
│ │ ├── monthly_data_dag.py # 월별 달력 생성
│ │ └── utils/ # 공유 유틸리티
│ │ └── html_generators.py # 컴포넌트 생성 로직
│ ├── config/ # Airflow 구성
│ └── logs/ # 실행 로그
├── app/ # FastAPI 웹 애플리케이션
├── nginx/ # 웹 서버 및 정적 파일
├── docs/ # 프로젝트 문서
├── docker-compose.yaml # 서비스 오케스트레이션
└── requirements.txt # Python 의존성
- 분산 시스템 아키텍처
- 실시간 데이터 처리
- 컨테이너 기반 배포
- RESTful API 설계
- 데이터베이스 최적화
- 사용자 이미지 업로드: 사용자가 직접 촬영한 인경호 이미지 업로드 기능
작성자: 조승준
과목: 데이터 엔지니어링 / 소프트웨어 엔지니어링
기관: 인하대학교
연도: 2025