Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

244 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐Ÿš’ 119 Helper Dashboard

์†Œ๋ฐฉ ๋ฐ ๊ตฌ๊ธ‰ ๋Œ€์›์˜ ์‹ ์†ํ•œ ์ถœ๋™๊ณผ ํ˜„์žฅ ์ƒํ™ฉ ํŒŒ์•…์„ ์ง€์›ํ•˜๋Š” ์ข…ํ•ฉ ์ •๋ณด ๋Œ€์‹œ๋ณด๋“œ์ž…๋‹ˆ๋‹ค.
๋ชจ๋ฐ”์ผ ๊ธฐ๊ธฐ์™€ ๋ฐ์Šคํฌํƒ‘ ํ™˜๊ฒฝ ๋ชจ๋‘์—์„œ ์™„๋ฒฝํ•˜๊ฒŒ ๋™์ž‘ํ•˜๋Š” ๋ฐ˜์‘ํ˜• ์›น ์•ฑ์ž…๋‹ˆ๋‹ค.

๐Ÿ”— ๋ผ์ด๋ธŒ: https://119.teemozipsa.com/


โœจ ์ฃผ์š” ๊ธฐ๋Šฅ

๐Ÿ“Š ์‹ค์‹œ๊ฐ„ ๋Œ€์‹œ๋ณด๋“œ

  • ํ˜„์žฌ ์œ„์น˜ ๊ธฐ๋ฐ˜ ๊ธฐ์˜จยท์Šต๋„ยทํ’์†ยท๊ฐ•์ˆ˜ ๋“ฑ ๊ธฐ์ƒ ํ˜„ํ™ฉ ์š”์•ฝ
  • ์‘๊ธ‰์‹ค ๊ฐ€์šฉ ๋ณ‘์ƒ ํ˜„ํ™ฉ ์‹ค์‹œ๊ฐ„ ์š”์•ฝ
  • ์†Œ๋ฐฉ์šฉ์ˆ˜์‹œ์„ค(์†Œํ™”์ „ยท๊ธ‰์ˆ˜ํƒ‘ยท์ €์ˆ˜์กฐ) ํ˜„ํ™ฉ

๐ŸŒค๏ธ ๊ธฐ์ƒ ์ •๋ณด

  • ๊ธฐ์ƒ์ฒญ API Hub ์—ฐ๋™ โ€” ์ดˆ๋‹จ๊ธฐ์‹คํ™ฉ, ๋‹จ๊ธฐ์˜ˆ๋ณด, ์ค‘๊ธฐ์˜ˆ๋ณด
  • ํ™”์žฌ ์œ„ํ—˜๋„ ์ž๋™ ํŒ์ • (์Šต๋„ยทํ’์† ๊ธฐ๋ฐ˜)
  • ์ฒด๊ฐ์˜จ๋„(์œˆ๋“œ์น ) ์ž๋™ ๊ณ„์‚ฐ

๐Ÿฅ ์‘๊ธ‰์‹ค ์‹ค์‹œ๊ฐ„ ํ˜„ํ™ฉ

  • ๊ตญ๋ฆฝ์ค‘์•™์˜๋ฃŒ์› ์‹ค์‹œ๊ฐ„ ๊ฐ€์šฉ๋ณ‘์ƒ API ์—ฐ๋™
  • ๋ณ‘์›๋ณ„ ์‘๊ธ‰๋ณ‘์ƒยท์ž…์›์‹คยท์ˆ˜์ˆ ์‹คยทCTยทMRI ํ˜„ํ™ฉ
  • ์›ํด๋ฆญ ์ „ํ™” ์—ฐ๊ฒฐ

๐Ÿ—บ๏ธ ์†Œ๋ฐฉ์šฉ์ˆ˜์‹œ์„ค ์ง€๋„

  • ์นด์นด์˜ค๋งต SDK ๊ธฐ๋ฐ˜ ์‹œ์„ค ์œ„์น˜ ์‹œ๊ฐํ™”
  • ์†Œํ™”์ „ยท๊ธ‰์ˆ˜ํƒ‘ยท์ €์ˆ˜์กฐยท๋น„์ƒ์†Œํ™”์žฅ์น˜ ๋งˆ์ปค
  • ํด๋Ÿฌ์Šคํ„ฐ๋ง + ์ปค์Šคํ…€ ์˜ค๋ฒ„๋ ˆ์ด

๐Ÿข ๊ฑด์ถ•๋ฌผ๋Œ€์žฅ ํ˜„์žฅ ๊ฒ€์ƒ‰

  • ์ฃผ์†Œ ์ž…๋ ฅ โ†’ ๊ฑด๋ฌผ ๊ตฌ์กฐยท์ธต์ˆ˜ยท์šฉ๋„ยท๋ฉด์ ยท์ค€๊ณต์ผ ์ฆ‰์‹œ ์กฐํšŒ
  • ์นด์นด์˜ค Geocoder + ๊ตญํ† ๊ตํ†ต๋ถ€ ๊ฑด์ถ•๋ฌผ๋Œ€์žฅ API

โ˜ข๏ธ ์œ ํ•ดํ™”ํ•™๋ฌผ์งˆ(Hazmat) ๋Œ€ํ”ผ ๋ฐ˜๊ฒฝ ๊ณ„์‚ฐ๊ธฐ

  • ERG ๊ธฐ๋ฐ˜ ์ดˆ๊ธฐ์ด๊ฒฉ๊ฑฐ๋ฆฌ + ํ’ํ•˜ํ–ฅ ๋ฐฉํ˜ธ๊ตฌ์—ญ ์‹œ๋ฎฌ๋ ˆ์ด์…˜
  • ์นด์นด์˜ค๋งต ์œ„ ์›ํ˜•(์ด๊ฒฉ๊ตฌ์—ญ) + ๋ถ€์ฑ„๊ผด(๋ฐฉํ˜ธ๊ตฌ์—ญ) ์‹œ๊ฐํ™”

๐Ÿงฎ ์†Œ๋ฐฉ ๊ณ„์‚ฐ๊ธฐ

  • ์ˆ˜์••(nozzle pressure) ๊ณ„์‚ฐ
  • ํ˜ธ์Šค ์ „๊ฐœ ๋งˆ์ฐฐ์†์‹ค ๊ณ„์‚ฐ
  • ๊ณต๊ธฐํ˜ธํก๊ธฐ ์ž”์—ฌ ์‹œ๊ฐ„ ๊ณ„์‚ฐ

๐Ÿ“… ๋‹ฌ๋ ฅ / ์ผ์ •

  • ๊ต๋Œ€๊ทผ๋ฌด ์ผ์ • ๊ด€๋ฆฌ
  • ๊ณตํœด์ผ API ์—ฐ๋™ (๋นจ๊ฐ„ ๋‚  ์ž๋™ ํ‘œ์‹œ)

๐Ÿ“ ๋ฉ”๋ชจ์žฅ

  • ์ธ์ˆ˜์ธ๊ณ„ ๋ฐ ํ˜„์žฅ ๋ฉ”๋ชจ (localStorage ์ €์žฅ)

๐Ÿ› ๏ธ ๊ธฐ์ˆ  ์Šคํƒ

๋ถ„๋ฅ˜ ๊ธฐ์ˆ 
Frontend React 19 + TypeScript + Vite
Styling TailwindCSS (Dark Theme)
Map Kakao Maps JavaScript SDK
API Cloudflare Worker ํ”„๋ก์‹œ + ๊ธฐ์ƒ์ฒญ API Hub, ๊ตญ๋ฆฝ์ค‘์•™์˜๋ฃŒ์›, ์—์–ด์ฝ”๋ฆฌ์•„, ๊ตญํ† ๊ตํ†ต๋ถ€
CI/CD GitHub Actions โ†’ GitHub Pages
State React Hooks (useState/useEffect)

๐Ÿš€ ๋กœ์ปฌ ๊ฐœ๋ฐœ

git clone https://github.com/119helper/119helper.github.io.git
cd 119helper.github.io
npm install
mkdir -p ../key/119-helper
cp .env.example ../key/119-helper/.env
# ../key/119-helper/.env ์— VITE_KAKAO_MAP_KEY ์„ค์ •
# ๊ธฐ๋ณธ ์˜ˆ์‹œ๋Š” ๋กœ์ปฌ Worker(http://localhost:8787)์— ์—ฐ๊ฒฐ๋จ
# ์šด์˜ ๋ฐฐํฌ์—์„œ๋Š” VITE_APP_TOKEN์„ Worker์˜ APP_ACCESS_TOKEN๊ณผ ๋™์ผํ•˜๊ฒŒ ์„ค์ •
npm run dev:worker
# ๋‹ค๋ฅธ ํ„ฐ๋ฏธ๋„์—์„œ:
npm run dev -- --host
# โ†’ http://localhost:5173

๊ณต๊ณต๋ฐ์ดํ„ฐ API ํ‚ค๋Š” ๋ธŒ๋ผ์šฐ์ € ๋ฒˆ๋“ค์— ๋„ฃ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Worker secret์œผ๋กœ ๋“ฑ๋กํ•˜์„ธ์š”.

cd worker
npm install
wrangler secret put KMA_API_KEY
wrangler secret put ER_API_KEY
# AED์™€ ๋Œ ๋ฐฉ๋ฅ˜๋Š” ๊ฐ™์€ data.go.kr ๊ณ„์ • ํ‚ค๋ฅผ ์žฌ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
# ๋ณ„๋„ ํ‚ค๋ฅผ ๋ถ„๋ฆฌํ•˜๋ ค๋ฉด: wrangler secret put PUBLIC_DATA_API_KEY
npm run dev
# worker/wrangler.dev.toml์ด ENVIRONMENT=development์™€ ํฌํŠธ 8787์„ ๊ณ ์ •ํ•˜๋ฏ€๋กœ
# ๋กœ์ปฌ์—์„œ๋Š” APP_ACCESS_TOKEN ์—†์ด ์‹คํ–‰ ๊ฐ€๋Šฅ

์šด์˜ ์ฐธ๊ณ : VITE_APP_TOKEN์€ ๋ธŒ๋ผ์šฐ์ € ๋ฒˆ๋“ค์— ํฌํ•จ๋˜๋Š” ๊ณต๊ฐœ๊ฐ’์ด๋ฏ€๋กœ ์™„์ „ํ•œ ๋น„๋ฐ€ ์ธ์ฆ ์ˆ˜๋‹จ์ด ์•„๋‹™๋‹ˆ๋‹ค. ํ˜„์žฌ ๋ฌด๋ฃŒ/๋ฌด๋„๋ฉ”์ธ ์šด์˜์—์„œ๋Š” Worker์˜ Origin/ํ† ํฐ ๊ฒ€์ฆ๊ณผ rate limit binding์„ ๊ธฐ๋ณธ ๋ฐฉ์–ด์„ ์œผ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋Œ€๋Ÿ‰ ์Šคํฌ๋ž˜ํ•‘์ด ์‹ค์ œ ๋ฌธ์ œ๊ฐ€ ๋˜๋ฉด ๋„๋ฉ”์ธ/Cloudflare zone ๊ธฐ๋ฐ˜ WAF, Turnstile, ๋ด‡ ์ฐจ๋‹จ ์ •์ฑ…์„ ์žฌ๊ฒ€ํ† ํ•˜์„ธ์š”.

GitHub Actions ์šด์˜ ๋ฐฐํฌ์—๋Š” ๋‹ค์Œ secret๋„ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

  • CLOUDFLARE_API_TOKEN, CLOUDFLARE_ACCOUNT_ID
  • NEWS_CACHE_KV_ID, NEWS_CACHE_KV_PREVIEW_ID
  • FIRE_WATER_API_KEY (๋ถ„๊ธฐ๋ณ„ ์†Œ๋ฐฉ์šฉ์ˆ˜์‹œ์„ค ์ •์  ๋ฐ์ดํ„ฐ ๋™๊ธฐํ™”์šฉ)
  • RESTROOM_API_KEY ๋˜๋Š” ๊ธฐ์กด ๊ณต๊ณต๋ฐ์ดํ„ฐ ํฌํ„ธ ํ‚ค(FIRE_WATER_API_KEY/PUBLIC_DATA_API_KEY) (๋ถ„๊ธฐ๋ณ„ ๊ณต์ค‘ํ™”์žฅ์‹ค ์ •์  ๋ฐ์ดํ„ฐ ๋™๊ธฐํ™”์šฉ)

์†Œ๋ฐฉ์šฉ์ˆ˜์‹œ์„ค๊ณผ ๊ณต์ค‘ํ™”์žฅ์‹ค ์ •์  ๋ฐ์ดํ„ฐ๋Š” ๊ณต๊ณต๋ฐ์ดํ„ฐ API์—์„œ ์ง์ ‘ ๊ฐฑ์‹ ํ•ฉ๋‹ˆ๋‹ค.

FIRE_WATER_API_KEY=... node scripts/sync-firewater.js
RESTROOM_API_KEY=... node scripts/sync-restrooms.js
# v2 ์ตœ์ดˆ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋•Œ๋งŒ: ๋งˆ์ง€๋ง‰ v1 ์ขŒํ‘œ๋ฅผ Git ๊ธฐ์ค€์ ์—์„œ ์˜๊ตฌ ์ธ๋ฑ์Šค๋กœ ๋ณด์กด
RESTROOM_API_KEY=... RESTROOM_LEGACY_COORDINATE_GIT_REF=HEAD node scripts/sync-restrooms.js
CIVIL_SHELTER_SYNC_API_KEY=... node scripts/sync-civil-shelters.js
TSUNAMI_SHELTER_API_KEY=... node scripts/sync-tsunami-shelters.js

๋ฏผ๋ฐฉ์œ„/์ง€์ง„ํ•ด์ผ ์ •์  ๋ฐ์ดํ„ฐ manifest๋Š” ์ฒดํฌ์ธ๋œ JSON์—์„œ ๊ธฐ์ค€์ผ๊ณผ ๊ฑด์ˆ˜๋ฅผ ๋ณด๊ฐ•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ง€์ง„ํ•ด์ผ ์›๋ณธ ํŒŒ์ผ์—๋Š” ํ–‰๋ณ„ ๊ธฐ์ค€์ผ ํ•„๋“œ๊ฐ€ ์—†์–ด ๊ณต๊ณต๋ฐ์ดํ„ฐํฌํ„ธ API ์ƒ์„ธ์˜ ์ˆ˜์ •์ผ์„ API ์ˆ˜์ •์ผ๋กœ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค.

2026-07-29 API ์Šน์ธ ํ™•์ธ, ์ตœ์‹  ๊ณต๊ฐœ์ž๋ฃŒ ๋Œ€์กฐ, ๋ฒ•๋ น ๊ต์ • ๋ฐ ์ถ”๊ฐ€ API ์šฐ์„ ์ˆœ์œ„๋Š” docs/data-source-audit-2026-07-29.md์— ์ •๋ฆฌ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

node scripts/update-static-data-manifest.mjs
TSUNAMI_SOURCE_DATE=2025-07-16 node scripts/update-static-data-manifest.mjs

์šด์˜ ๋ฆฌ์Šคํฌ์™€ ํ›„์† ๋ณด์™„ ๊ณผ์ œ๋Š” docs/operational_risks.md์— ์ •๋ฆฌ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. 2026-07 ํ–‰์ •๊ตฌ์—ญ ๊ฐœํŽธ ๋Œ€์‘ ๋ฒ”์œ„์™€ ๊ฒ€์ฆ ๊ฒฐ๊ณผ๋Š” docs/administrative-region-audit-2026-07.md์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐฑ์‹ ํ•œ ๋’ค์—๋Š” npm run audit:regions๋กœ ๊ด‘์ฃผยท์ธ์ฒœ ํ–‰์ •๊ตฌ์—ญ๊ณผ ์ขŒํ‘œ ์ •ํ•ฉ์„ฑ์„ ๊ฒ€์‚ฌํ•ฉ๋‹ˆ๋‹ค.

ํ•œ๊ตญ์ˆ˜์ž์›๊ณต์‚ฌ ๋Œ ๋ฐฉ๋ฅ˜์ •๋ณด๋Š” 2026-07-29 ๊ฐœ๋ฐœ๊ณ„์ • ์Šน์ธ์„ ํ™•์ธํ•ด ์šด์˜ ์—ฐ๋™์„ ํ™œ์„ฑํ™”ํ–ˆ์Šต๋‹ˆ๋‹ค. API๋Š” 15๋ถ„ ์ฃผ๊ธฐ๋กœ ๊ฐฑ์‹ ๋˜๋ฉฐ, ํ˜„์žฌ ๋ฐฉ๋ฅ˜ ๊ธฐ๋ก์ด ์—†๋Š” ๊ฒฝ์šฐ์—๋„ ์ •์ƒ ์‘๋‹ต๊ณผ ์กฐํšŒ ์‹œ๊ฐ์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ์ž์ฒด ๋ฐฐํฌ ํ™˜๊ฒฝ์—์„œ๋Š” ํ™œ์šฉ์‹ ์ฒญ ์Šน์ธ ์ „๊นŒ์ง€ DAM_DISCHARGE_ENABLED = "false"๋ฅผ ์œ ์ง€ํ•˜์„ธ์š”.

์†Œ๋ฐฉ์ฒญ ๋‹ค์ค‘์ด์šฉ์—…์†Œ ์˜์—…์žฅ๋ณ„ API๋„ 2026-07-29 ์ถ”๊ฐ€ ์‹ ์ฒญ๊ณผ ์ž๋™ ์Šน์ธ์„ ์™„๋ฃŒํ–ˆ์Šต๋‹ˆ๋‹ค. ์•ฑ์€ 2025 ๊ฐœ๋ณ„ ์—…์†Œ API๋ฅผ ์ง€์—ญยท์—…์ข…๋ณ„๋กœ ์ง‘๊ณ„ํ•˜๊ณ , ํ‚ค ๋ˆ„๋ฝ์ด๋‚˜ ์™ธ๋ถ€ ์žฅ์•  ์‹œ์—๋Š” ๊ฐ™์€ ๊ณต์‹ CSV 154,873ํ–‰์—์„œ ๊ฒ€์ฆํ•œ ์ •์  ์ง‘๊ณ„๋กœ ์ž๋™ ํด๋ฐฑํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ“„ ๋ผ์ด์„ ์Šค

์ด ํ”„๋กœ์ ํŠธ๋Š” ์†Œ๋ฐฉ ํ˜„์žฅ ํ™œ๋™ ์ง€์› ๋ชฉ์ ์œผ๋กœ ์ œ์ž‘๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

About

๐Ÿš’ ์†Œ๋ฐฉ๊ด€ ์‹ค์‹œ๊ฐ„ ๊ด€์ œ ๋Œ€์‹œ๋ณด๋“œ - ๊ธฐ์ƒ/์‘๊ธ‰์‹ค/๊ณตํœด์ผ API ์—ฐ๋™

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages