Skip to content

Repository files navigation

GreedyRunner

대기질과 기상 데이터를 종합하여 달리기 최적 타이밍을 안내하는 서비스입니다.

러닝 지수(0~100)를 실시간으로 계산하고, 24시간 타임라인에서 최적의 러닝 시간대를 추천합니다.

주요 기능

  • 러닝 지수 - PM2.5, PM10, 오존 + 기온, 습도, 강수를 반영한 0~100점 종합 점수
  • 24시간 타임라인 - 시간대별 러닝 적합도를 바 차트로 시각화, 시간대 클릭 시 상세 조회
  • 대기질 상세 - 4개 오염물질(PM2.5, PM10, O3, NO2)을 6단계로 분류하여 표시
  • 지역 검색 & GPS - 주소 검색 또는 현재 위치 기반 자동 조회
  • 최적 시간 추천 - 점수 60점 이상 시간대 중 상위 3개를 자동 추천

기술 스택

영역기술
FrontendReact 18, TypeScript, Vite, Tailwind CSS
BackendNode.js, Express, TypeScript, Zod
대기질 데이터에어코리아 실시간 측정정보 API
기상 데이터기상청 초단기실황 / 단기예보 API

시작하기

환경변수 설정

# backend/.env
PORT=8000
AIR_KOREA_API_KEY=your_key_here # 필수 - 없으면 mock 데이터로 동작
KMA_API_KEY=your_key_here # 선택 - 없으면 대기질만으로 점수 계산

설치 및 실행

# Frontendcd frontend
pnpm install
pnpm run dev # http://localhost:5173# Backendcd backend
pnpm install
pnpm run dev # http://localhost:8000

API 키 없이도 mock 데이터로 전체 기능을 확인할 수 있습니다.

프로젝트 구조

GreedyRunner/
├── frontend/ # React SPA
│ └── src/
│ ├── presentation/ # 페이지 & 컴포넌트
│ ├── application/ # 커스텀 훅
│ ├── domain/ # 타입 정의 & 비즈니스 로직
│ └── infrastructure/ # API 클라이언트
├── backend/ # Express API 서버
│ └── src/
│ ├── api/ # 라우트 핸들러
│ ├── domain/ # 엔티티 & 유즈케이스
│ ├── infrastructure/ # 외부 API 클라이언트
│ └── schemas/ # Zod 유효성 검사
├── running-index-algorithm.md # 러닝 지수 알고리즘 상세 문서
└── CLAUDE.md # 개발 가이드라인

API 엔드포인트

MethodPath설명
GET/api/v1/air-quality/search?q=강남지역 검색
GET/api/v1/air-quality/by-coords?lat=&lng=좌표 기반 조회
GET/api/v1/air-quality/:regionId지역별 대기질 + 러닝 지수
GET/health헬스체크
GET/docsSwagger API 문서

러닝 지수 알고리즘

점수 = 100 - (대기질 페널티 + 기상 페널티)
가중치 배분항목비율
대기질 (70%)PM2.535%
PM1020%
오존15%
기상 (30%)기온15%
습도10%
강수5%
점수상태의미
80~100달리기 최적지금 바로 달리세요!
60~79달리기 좋음좋은 환경입니다
40~59주의 필요짧은 러닝 권장
20~39달리기 자제실내 운동 권장
0~19달리기 금지야외 활동 자제

상세 알고리즘은 running-index-algorithm.md를 참고하세요.

About

오늘 달려도 되나요?

Topics

Resources

Code of conduct

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages