Skip to content

Latest commit

Β 

History

History
109 lines (87 loc) Β· 4.01 KB

README.md

File metadata and controls

109 lines (87 loc) Β· 4.01 KB

HOSU β€” 경뢁 폭염 μœ„ν—˜λ„ 데이터 인프라 & λŒ€μ‹œλ³΄λ“œ

JunctionX Korea 2026 Β· λ§ˆμ΄ν¬λ‘œμ†Œν”„νŠΈ 코리아 νŠΈλž™ (경상뢁도 ν˜„μ•ˆ ν•΄κ²°)

경상뢁도 폭염 λŒ€μ‘ 곡곡데이터λ₯Ό μ •κ·œν™”Β·κ²°ν•©ν•΄, AIκ°€ μ¦‰μ‹œ ν˜ΈμΆœν•  수 μžˆλŠ” ν‘œμ€€ MCP μ„œλ²„(Layer 1) 및 μ‹€μ‹œκ°„ ν–‰μ • λŒ€μ‹œλ³΄λ“œ(Layer 2)둜 μ œκ³΅ν•˜λŠ” μ˜€ν”ˆ μ†”λ£¨μ…˜μž…λ‹ˆλ‹€.


πŸ”— μ„œλΉ„μŠ€ 링크


πŸ›οΈ ν”„λ‘œμ νŠΈ μ•„ν‚€ν…μ²˜

HOSU/
β”œβ”€β”€ 1_data_infrastructure/        # [Layer 1] 곡곡데이터 μ •κ·œν™” & MCP μ„œλ²„ 인프라
β”‚   β”œβ”€β”€ data/                     # μ •κ·œν™” SQLite DB (hosu.db) 및 μ›μ²œ CSV (6μ’…)
β”‚   β”œβ”€β”€ pipeline/                 # 데이터 μ •κ·œν™” 및 μŠ€μ½”μ–΄λ§ 배치 (build.py, schema.sql)
β”‚   └── mcp_server/               # AI 연동 ν‘œμ€€ FastMCP μ„œλ²„ (server.py, weather.py)
β”‚
β”œβ”€β”€ 2_regional_service/           # [Layer 2] 경뢁 폭염TF ν˜„μ•ˆ ν•΄κ²° μ„œλΉ„μŠ€
β”‚   β”œβ”€β”€ app.py                    # Flask REST API λ°±μ—”λ“œ
β”‚   β”œβ”€β”€ briefing.py               # AI 상황 λΈŒλ¦¬ν•‘ 생성
β”‚   β”œβ”€β”€ frontend/                 # Vite + React 18 SPA λŒ€μ‹œλ³΄λ“œ
β”‚   └── static/                   # React λΉŒλ“œ κ²°κ³Όλ¬Ό
β”‚
β”œβ”€β”€ asgi.py                       # 톡합 ASGI μ„œλ²„ (Flask API + Remote MCP SSE)
β”œβ”€β”€ Dockerfile                    # Railway ν΄λΌμš°λ“œ 배포용 Docker μ„€μ •
β”œβ”€β”€ requirements.txt              # 전체 Python μ˜μ‘΄μ„± λͺ©λ‘
└── README.md

πŸš€ λΉ λ₯Έ μ‹œμž‘

1. μ˜μ‘΄μ„± μ„€μΉ˜

pip install -r requirements.txt

2. 데이터 νŒŒμ΄ν”„λΌμΈ λΉŒλ“œ & ν…ŒμŠ€νŠΈ

python 1_data_infrastructure/pipeline/build.py         # 곡곡데이터 μ •κ·œν™” -> data/hosu.db
pytest 1_data_infrastructure/pipeline/test_build.py    # μŠ€μ½”μ–΄λ§ νšŒκ·€ ν…ŒμŠ€νŠΈ

3. 둜컬 μ„œλ²„ μ‹€ν–‰

# 톡합 μ„œλ²„ (Flask REST + Remote MCP SSE)
uvicorn asgi:app --port 5050 --reload

# λ˜λŠ” React ν”„λ‘ νŠΈμ—”λ“œ 개발 μ„œλ²„
cd 2_regional_service/frontend && npm run dev

πŸ€– AI μ—μ΄μ „νŠΈ 연동 (Claude Desktop / Cursor)

방법 1: 원격 URL 연동 (μ„€μΉ˜ λΆˆν•„μš” ⭐)

Claude Desktop μ„€μ •(claude_desktop_config.json)에 μ•„λž˜ ν•œ μ€„λ§Œ μΆ”κ°€ν•˜λ©΄ μ¦‰μ‹œ μ‚¬μš© κ°€λŠ₯ν•©λ‹ˆλ‹€:

{
  "mcpServers": {
    "hosu-heat-risk": {
      "url": "https://hosu-backend-production.up.railway.app/sse"
    }
  }
}

방법 2: 둜컬 파이썬 연동

{
  "mcpServers": {
    "hosu-heat-risk": {
      "command": "python",
      "args": [
        "/μ ˆλŒ€κ²½λ‘œ/HOSU/1_data_infrastructure/mcp_server/server.py"
      ],
      "env": {
        "PYTHONPATH": "/μ ˆλŒ€κ²½λ‘œ/HOSU/1_data_infrastructure:/μ ˆλŒ€κ²½λ‘œ/HOSU/1_data_infrastructure/mcp_server"
      }
    }
  }
}

πŸ› οΈ 제곡 MCP Tool λͺ©λ‘ (7μ’…)

Tool μ„€λͺ…
get_heat_risk_score(region) νŠΉμ • μλ©΄λ™μ˜ μ’…ν•© 폭염 μœ„ν—˜λ„ 점수 및 μ‚°μΆœ κ·Όκ±° λ°˜ν™˜
get_current_weather(region) νŠΉμ • μ§€μ—­μ˜ μ‹€μ‹œκ°„ 기상 μ‹€μΈ‘μΉ˜(κΈ°μ˜¨Β·μŠ΅λ„Β·μ²΄κ°μ˜¨λ„Β·μœ„ν—˜λ‹¨κ³„) 쑰회
list_high_priority_regions(top_n, level) 였늘 μš°μ„  λŒ€μ‘μ΄ ν•„μš”ν•œ μœ„ν—˜ μ§€μ—­ TOP N μΆ”μΆœ
check_shelter_accessibility(region) 도보 5λΆ„κΆŒ(400m) λ‚΄ λ¬΄λ”μœ„μ‰Όν„° μ ‘κ·Όμ„± 및 μ‚¬κ°μ§€λŒ€ νŒλ³„
find_shelter_blind_spots(level) κ΄€λ‚΄ μ‰Όν„°κ°€ λΆ€μ‘±ν•œ μ·¨μ•½μ§€μ—­ λͺ©λ‘ μΆ”μΆœ
get_region_shelters(region, limit) κ΄€λ‚΄ λ“±λ‘λœ λ¬΄λ”μœ„μ‰Όν„° μœ„μΉ˜, μˆ˜μš©μΈμ›, 냉방기기 μŠ€νŽ™ λͺ©λ‘
explain_risk_calculation(region) μœ„ν—˜λ„ μ‚°μΆœ 곡식(κ³ λ ΉμΈκ΅¬Β·μ‰Όν„°μ ‘κ·Όμ„±Β·μ˜¨μ—΄μ§ˆν™˜μ΄λ ₯Β·μ‹€μ‹œκ°„κΈ°μ˜¨) 및 κ°€μ€‘μΉ˜ μ„€λͺ