Skip to content

ufxpri/inha-lake-forecast

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

인경호 날씨 예보 시스템

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 프론트엔드                      │
└─────────────────────────────────────────────────────────────┘

🚀 기술적 구현

1. Airflow DAG 아키텍처

현재 데이터 DAG (current_data_dag.py)

  • 스케줄: 매시간
  • 목적: 실시간 날씨 모니터링 및 AI 이미지 생성
  • 작업:
    • fetch_weather_data: 오류 처리가 포함된 기상청 API 통합
    • calculate_scores: 맞춤형 아름다움 점수 알고리즘 (0-100 점수)
    • generate_status_component: 이모지가 포함된 동적 날씨 상태
    • generate_hero_component: 히어로 이미지 컴포넌트 생성
    • generate_openai_image: AI 기반 풍경 이미지 생성

일별 데이터 DAG (daily_data_dag.py)

  • 스케줄: 매일 오전 1시
  • 목적: 24시간 분석 및 최적 시간 예측
  • 작업:
    • fetch_hourly_data: 어제의 완전한 시간별 데이터셋
    • calculate_hourly_scores: 24개 데이터 포인트의 배치 처리
    • find_best_time: 최적 방문 시간 알고리즘
    • generate_chart_component: 인터랙티브 시간별 차트 (오전 7시-오후 8시)

월별 데이터 DAG (monthly_data_dag.py)

  • 스케줄: 매월 1일 오전 2시
  • 목적: 과거 분석 및 달력 생성
  • 작업:
    • fetch_monthly_data: 작년 같은 달 분석
    • calculate_monthly_scores: 30-31일의 통계 처리
    • find_special_dates: 상위 3개 최적 날짜 식별
    • generate_calendar_component: 인터랙티브 월별 달력

2. AI 통합 및 이미지 처리

  • OpenAI DALL-E 3: 날씨 조건에 따른 동적 풍경 이미지 생성
  • 이미지 처리: PIL을 사용한 자동 16:9 비율 크롭
  • 시나리오 생성: 현실적인 호수 풍경을 위한 날씨 적응형 프롬프트 엔지니어링
  • 폴백 시스템: AI 서비스 불가 시 우아한 성능 저하

3. 마이크로서비스 및 컨테이너화

# 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 관리

# 특정 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

📈 학습 성과 및 입증된 기술

Apache Airflow 숙련도

  • DAG 설계 패턴: 다양한 스케줄링 전략 구현
  • 작업 의존성: 병렬 실행을 포함한 복잡한 워크플로우 오케스트레이션
  • XCom 사용: 효율적인 작업 간 데이터 전달
  • 오류 처리: 견고한 재시도 메커니즘 및 장애 복구
  • 모니터링: 포괄적인 로깅 및 작업 상태 추적

데이터 엔지니어링

  • ETL 파이프라인: 날씨 데이터를 위한 추출-변환-로드 워크플로우
  • API 통합: 속도 제한을 포함한 RESTful 서비스 소비
  • 데이터 검증: 스키마 강제 및 데이터 품질 검사
  • 배치 처리: 대용량 데이터셋의 효율적 처리

DevOps 및 인프라

  • 컨테이너화: 다중 서비스 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

About

인하대학교의 인경호가 언제 가장 예쁜지 예측하는 서비스 입니다.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published