Skip to content

feat: 일기예보 출처 추가#149

Merged
recoma96 merged 2 commits into
mainfrom
feat/add-source-in-forecast
Apr 11, 2026
Merged

feat: 일기예보 출처 추가#149
recoma96 merged 2 commits into
mainfrom
feat/add-source-in-forecast

Conversation

@recoma96
Copy link
Copy Markdown
Owner

📝 주요 변경 내용 (Description)

API Server

externals/datago.py

  • IKmaShortForecastAPI, IKmaMidLandForecastAPI, IKmaMidLandTemperatureAPI 세 인터페이스에 get_published_at() -> datetime
    추상 메서드 추가
  • KmaMidForecastBase.get_published_at() 구현 → 두 중기예보 구현체(KmaMidLandForecastAPI, KmaMidLandTemperatureAPI)가
    상속으로 자동 만족
  • KmaShortForecastAPI.get_published_at() 구현
  • 기존 _convert_time_to_forecast_time() 시간 계산 로직을 그대로 재사용해 중복 없음

services/weather_services.py

  • get_forecasts() 반환 타입 변경
    • 변경 전: List[WeatherForecastItemSchema]
    • 변경 후: Tuple[datetime, List[WeatherForecastItemSchema]]
  • 발표 시각 결정 로직을 _resolve_published_at()로 분리
    • days < 5: 중기예보를 사용하지 않으므로 단기예보 발표 시각을 그대로 사용 (max 미적용)
    • days >= 5: 단기/중기 발표 시각 중 가장 최근(max) 시각 사용
  • 캐시 키 변경
    • 변경 전: weather:course:{course_id}:{days}
    • 변경 후: weather:course:{course_id}:{days}:{YYYYMMDDHHMM}
    • 발표 시각이 갱신되면 키가 자연스럽게 바뀌어 stale 데이터 방지
    • get_published_at()은 네트워크 호출 없는 시간 계산이라 캐시 lookup 전 호출에도 추가 비용 없음

routers/v1/course.py

  • 서비스 반환값을 published_at, forecasts로 언팩하고 응답 스키마에 publishedAt 전달

설계 메모

  • 외부 API 클래스가 이미 가지고 있던 _convert_time_to_forecast_time() 로직을 그대로 활용해 시간 계산 로직 중복 없음
  • 인터페이스/서비스/라우터/스키마 어디도 구조적 변경 없이 메서드 1개와 반환 타입만 추가/조정하는 최소 침습 방식으로 구현

Frontend

Summary

  • 주간 일기예보 API 응답에 추가된 source, provider, publishedAt 필드를 웹 UI에 반영
  • 일기예보 카드 리스트 하단에 "출처 · 제공 · 발표시각" 정보를 한 줄로 표시하여 데이터 신뢰성 확보

Changes

  • src/types/responses/weather-forecast.ts: WeatherForecastResponse 타입에 source, provider, publishedAt 필드 추가
  • src/components/client/WeatherForecast.tsx:
    • state를 forecasts: Forecast[]에서 전체 응답 객체(WeatherForecastResponse | null)로 변경하여 메타데이터까지 함께 보존
    • formatPublishedAt 헬퍼 추가 — ISO 문자열을 YYYY.MM.DD HH:MM 형식으로 변환
    • 카드 리스트 하단에 출처/제공자/발표시각을 우측 정렬로 추가 (text-xs text-base-content/40로 가독성을 해치지 않는 보조 정보 처리)

UI

[월 4/12] [화 4/13] [수 4/14] [목 4/15] [금 4/16] [토 4/17] [일 4/18]
                          출처: 기상청 · 제공: 공공데이터포털 · 발표: 2026.04.11 11:54

🔗 관련 이슈 (Related Issues)

External API에 예보시각 출력 public Function 구현
API 응답 포맷에 출처, API 제공자, 예보시각 추가
Service에서 일기예보 함수 사용 시, 예보 리스트와 함께 예보시각 추가
@recoma96 recoma96 linked an issue Apr 11, 2026 that may be closed by this pull request
@recoma96 recoma96 merged commit dc9c86a into main Apr 11, 2026
1 check passed
@recoma96 recoma96 deleted the feat/add-source-in-forecast branch April 11, 2026 12:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

날씨 컴포넌트에 출처 추가

1 participant