์๋ฐฉ๊ด์ ํ์ ์ ๋ฌด์ ์ถ๋ ๋์, ํ๋ ๊ธฐ๋ก์ ํ๋์ ํ๋ฆ์ผ๋ก ์๋ ์ ๋ฌด ๋ณด์กฐ ๋์๋ณด๋์ ๋๋ค. ๋ชจ๋ฐ์ผ ๊ธฐ๊ธฐ์ ๋ฐ์คํฌํ ํ๊ฒฝ ๋ชจ๋์์ ์๋ฒฝํ๊ฒ ๋์ํ๋ ๋ฐ์ํ ์น ์ฑ์ ๋๋ค.
๐ ๋ผ์ด๋ธ: https://119.teemozipsa.com/
- ํ์ ์ ๋ฌด: ๊ทผ๋ฌด ์ค๋น, ์ง์ญ ๋ชจ๋ํฐ๋ง, ์์คยท๋์๋ฌผ ์กฐํ, ์ผ์ ๊ณผ ์ ๋ฌด ์ฐธ๊ณ
- ์ถ๋ ๋์: ์ถ๋ ์ํฉํ, ํ์ฅ ํ์ด๋จธ, ๋์ ์์ , ํ์ ๋ถ๋ฅ์ ํ๋ ๊ธฐ๋ก
- ์งํ ์ค์ธ ์ถ๋์ ํ์ ํ๋ฉด์ ์ด์ด๋ ์ ์ง๋๋ฉฐ, ์ถ๋ ์ข ๋ฃ ํ ํ์ ์ ๋ฌด๋ก ๋ณต๊ท
- ์ถ๋ ์ ํ๊ณผ ์ฃผ์๋ฅผ ์ฐ๊ฒฐํด ํ์ฅ ๊ธฐ์ค ํต์ฌ ์ ๋ณด ์๋ ๋ธ๋ฆฌํ
- ์ง์ ๋ก ์ฌ๋ยทํต์ , ๊ฐ๊น์ด ๋ฑ๋ก ์๋ฐฉ์ฉ์, ์ด์ก ํ๋ณด๋ฅผ ํ ํ๋ฆ์์ ํ์ธ
- ์ ํํ ํ์ฅ ์กฐ์น์ ์ ๋ณด ๋ณํ๋ฅผ ํ๋ ํ์๋ผ์ธ์ ๊ธฐ๋ก
- ํ์ฌ ์์น ๊ธฐ๋ฐ ๊ธฐ์จยท์ต๋ยทํ์ยท๊ฐ์ ๋ฑ ๊ธฐ์ ํํฉ ์์ฝ
- ์๊ธ์ค ๊ฐ์ฉ ๋ณ์ ํํฉ ์ค์๊ฐ ์์ฝ
- ์๋ฐฉ์ฉ์์์ค(์ํ์ ยท๊ธ์ํยท์ ์์กฐ) ํํฉ
- ๊ธฐ์์ฒญ API Hub ์ฐ๋ โ ์ด๋จ๊ธฐ์คํฉ, ๋จ๊ธฐ์๋ณด, ์ค๊ธฐ์๋ณด
- ํ์ฌ ์ํ๋ ์๋ ํ์ (์ต๋ยทํ์ ๊ธฐ๋ฐ)
- ์ฒด๊ฐ์จ๋(์๋์น ) ์๋ ๊ณ์ฐ
- ๊ตญ๋ฆฝ์ค์์๋ฃ์ ์ค์๊ฐ ๊ฐ์ฉ๋ณ์ API ์ฐ๋
- ๋ณ์๋ณ ์๊ธ๋ณ์ยท์ ์์คยท์์ ์คยทCTยทMRI ํํฉ
- ์ํด๋ฆญ ์ ํ ์ฐ๊ฒฐ
- ์นด์นด์ค๋งต SDK ๊ธฐ๋ฐ ์์ค ์์น ์๊ฐํ
- ์ํ์ ยท๊ธ์ํยท์ ์์กฐยท๋น์์ํ์ฅ์น ๋ง์ปค
- ํด๋ฌ์คํฐ๋ง + ์ปค์คํ ์ค๋ฒ๋ ์ด
- ์ฃผ์ ์ ๋ ฅ โ ๊ฑด๋ฌผ ๊ตฌ์กฐยท์ธต์ยท์ฉ๋ยท๋ฉด์ ยท์ค๊ณต์ผ ์ฆ์ ์กฐํ
- ์นด์นด์ค Geocoder + ๊ตญํ ๊ตํต๋ถ ๊ฑด์ถ๋ฌผ๋์ฅ API
- 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 ํค๋ ๋ธ๋ผ์ฐ์ ๋ฒ๋ค์ ๋ฃ์ง ์์ต๋๋ค. ๋ก์ปฌ ๊ฐ๋ฐ ํค๋ Git์์
์ ์ธ๋๋ worker/.dev.vars์ ๋ก๋๋ค.
cd worker
npm install
# worker/.dev.vars ํ์ผ์ ๋ง๋ ๋ค ์๋ ์์์ฒ๋ผ ๋ฐ๊ธ๋ฐ์ ๊ฐ์ ์
๋ ฅ
npm run dev
# worker/wrangler.dev.toml์ด ENVIRONMENT=development์ ํฌํธ 8787์ ๊ณ ์ ํ๋ฏ๋ก
# ๋ก์ปฌ์์๋ APP_ACCESS_TOKEN ์์ด ์คํ ๊ฐ๋ฅ# worker/.dev.vars
KMA_API_KEY="๋ฐ๊ธ๋ฐ์ ๊ธฐ์์ฒญ ํค"
ER_API_KEY="๋ฐ๊ธ๋ฐ์ data.go.kr ํค"
ITS_API_KEY="๋ฐ๊ธ๋ฐ์ ๊ตญ๊ฐ๊ตํต์ ๋ณด์ผํฐ ํค"
# ์ ํ: AED์ ๋ ๋ฐฉ๋ฅ์ฉ data.go.kr ํค๋ฅผ ๋ถ๋ฆฌํ ๋๋ง ์ค์
# PUBLIC_DATA_API_KEY="๋ฐ๊ธ๋ฐ์ ๋ณ๋ ํค".dev.vars๋ ๋ก์ปฌ ์ ์ฉ์
๋๋ค. ์ด์ Worker์๋ worker/wrangler.toml.example์
ํ์ ๋ชฉ๋ก์ wrangler secret put <์ด๋ฆ>์ผ๋ก ๊ฐ๊ฐ ๋ฑ๋กํ๋ฉฐ, ์ค์ ๊ฐ์ TOML์ด๋
GitHub ์ ์ฅ์์ ๊ธฐ๋กํ์ง ์์ต๋๋ค. wrangler secret put์ ๊ฐ๋ง ๋ณด๊ดํ๋ ๋ช
๋ น์ด
์๋๋ผ ํด๋น secret์ ํฌํจํ ์ Worker ๋ฒ์ ์ ๋ง๋ค๊ณ ์ฆ์ ํธ๋ํฝ 100%์ ๋ฐฐํฌํฉ๋๋ค.
์ด์๊ฐ์ ๋ฐ๊ฟ ๋๋ ์ผ๋ฐ ๋ฐฐํฌ์ ๊ฐ์ ์ํฅ ๋ฒ์๋ก ๋ณด๊ณ ์งํ ์ํ์ ์ค๋ชจํฌ๋ฅผ ํ์ธํ์ธ์.
ITS_API_KEY๋ ๊ตญ๊ฐ๊ตํต์ ๋ณด์ผํฐ์์ ๋ฐ๊ธ๋ฐ์ ์ธ์ฆํค์
๋๋ค. Worker์
GET /api/road-disasters?lat=...&lng=...&radiusKm=5®ionName=...&districtName=...๊ฐ
์ถ๋์ง ์ฃผ๋ณ์ ์นจ์, ํ์ฒ ๋ฒ๋, ๋
๊บผ์ง, ํ์ฌ์ ๋๋ก ํต์ ๋ฅผ ์ ๊ทํํด ๋ฐํํ๋ฉฐ ๊ธฐ๋ณธ
์บ์๋ 60์ด์
๋๋ค. ITS๊ฐ ์คํจํด๋ DISASTER_API_KEY๋ก ๊ฐ์ ๊ดํ ์ ์ต์ ์ฌ๋๋ฌธ์ ์ค
๋๋กยท๊ต๋ยทํฐ๋ ๋ฑ์ ํต์ ยท์นจ์ยท์ฐจ๋จยท์ฐํ ํํ์ด ํจ๊ป ์๋ ๋ฌธ์๋ฅผ ํ๋ณด๋ก ๋ฐํํฉ๋๋ค.
๋ฌธ์ ํ๋ณด์๋ ์ขํ์ ํด์ ์ฌ๋ถ๊ฐ ์์ผ๋ฏ๋ก 5km ๋ด ํ์ ํต์ ๋ ๋ณํ ์๋ฆผ์ ํฉ์น์ง ์๊ณ ,
ํ๋ฉด์์ ํ์ฅ ์ง๋ น๊ณผ ๊ณต์ ๊ตํต์ผํฐ๋ก ์ฌํ์ธํ๋๋ก ๋ณ๋ ํ์ํฉ๋๋ค.
๊ณต์ ๋ฌธ์์ ๊ณต๊ฐํค test๋ ์กฐํ ์กฐ๊ฑด๊ณผ ๋ฌด๊ดํ ๊ณ ์ ์ํ์ ๋ฐํํ๋ฏ๋ก ์ด์์์๋
๋ช
์์ ์ผ๋ก ๊ฑฐ๋ถํฉ๋๋ค. ์ค์ ๋ฐ๊ธ ํค์ Worker์์ ์ API :9443์ผ๋ก ์ฐ๊ฒฐ ๊ฐ๋ฅํ
๊ฒฝ๋ก๊ฐ ๋ชจ๋ ํ์ธ๋๊ธฐ ์ ์๋ ์ฑ์ด 0๊ฑด์ผ๋ก ์ค์ธํ์ง ์๊ณ ITS ์กฐํ ๋ถ๊ฐ์ ๋ฌธ์ ํ๋ณด ๋ฒ์๋ฅผ
๊ฐ๊ฐ ํ์ํฉ๋๋ค.
์ด์ ์ฐธ๊ณ : VITE_APP_TOKEN์ ๋ธ๋ผ์ฐ์ ๋ฒ๋ค์ ํฌํจ๋๋ ๊ณต๊ฐ๊ฐ์ด๋ฏ๋ก ์์ ํ ๋น๋ฐ ์ธ์ฆ ์๋จ์ด ์๋๋๋ค.
ํ์ฌ ๋ฌด๋ฃ/๋ฌด๋๋ฉ์ธ ์ด์์์๋ Worker์ Origin/ํ ํฐ ๊ฒ์ฆ๊ณผ rate limit binding์ ๊ธฐ๋ณธ ๋ฐฉ์ด์ ์ผ๋ก ์ฌ์ฉํฉ๋๋ค. ๋๋ ์คํฌ๋ํ์ด ์ค์ ๋ฌธ์ ๊ฐ ๋๋ฉด ๋๋ฉ์ธ/Cloudflare zone ๊ธฐ๋ฐ WAF, Turnstile, ๋ด ์ฐจ๋จ ์ ์ฑ
์ ์ฌ๊ฒํ ํ์ธ์.
GitHub Actions ์ด์ ๋ฐฐํฌ์๋ ๋ค์ secret๋ ํ์ํฉ๋๋ค.
CLOUDFLARE_API_TOKEN,CLOUDFLARE_ACCOUNT_IDNEWS_CACHE_KV_ID,NEWS_CACHE_KV_PREVIEW_IDFIRE_WATER_API_KEY(๋ถ๊ธฐ๋ณ ์ ๊ตญ ์๋ฐฉ์ฉ์์์ค ๊ธฐ์ค ์๋ณธ ๋๊ธฐํ์ฉ)
์๋ฐฉ์ฉ์์์ค์ ๊ณต๊ณต๋ฐ์ดํฐ API์์, ๊ณต์คํ์ฅ์ค์ ํค๊ฐ ํ์ ์๋ LOCALDATA ๊ณต์ ์ ๊ตญ CSV์ ์ง์์ฒด ๊ณต์ CSV์์ ์ง์ ๊ฐฑ์ ํฉ๋๋ค.
FIRE_WATER_API_KEY=... node scripts/sync-firewater.js
npm run sync:firewater-overlays
node scripts/sync-restrooms.js
# v2 ์ต์ด ๋ง์ด๊ทธ๋ ์ด์
๋๋ง: ๋ง์ง๋ง v1 ์ขํ๋ฅผ Git ๊ธฐ์ค์ ์์ ์๊ตฌ ์ธ๋ฑ์ค๋ก ๋ณด์กด
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
npm run sync:fire-stats -- --complete-years 2024,2025
npm run test:data-scriptsNFDS ํ์ฌํต๊ณ ๋๊ธฐํ๋ ๋ณ๋ ์๋น์ค ํค ์์ด ๊ณต๊ฐ ํต๊ณ ํ๋ฉด์ ์กฐํ ๊ฒฐ๊ณผ๋ฅผ ์ ๋น๋๋ก ์ค๋ ์ทํํฉ๋๋ค. 2024ยท2025 ์๊ฒฐ๊ณผ 2026 ๋๊ณ๋ฅผ ์๋ร์ ๋จ์๋ก ๋ณด์กดํ๊ณ , ์ ๊ตญยท์ยท์๋ ํฉ๊ณ๊ฐ ์ผ์นํ์ง ์์ผ๋ฉด ํ์ผ์ ๊ฐฑ์ ํ์ง ์์ต๋๋ค.
์ ๊ตญ ์๋ฐฉ์ฉ์ ํ์ค ์๋ณธ ๋ค์๋ ๊ฒ์ฆ๋ ์ง์ญ ์ต์ ์๋ฃ๋ฅผ ๊ดํ ๋จ์๋ก ์ค๋ฒ๋ ์ดํฉ๋๋ค. ํ์ฌ ๊ด์ฐ๊ตฌ 2026 ์๋ณธ์ ์ ์ฉํ๋ฉฐ, ์๋ชป๋ ์ต์ ์ขํ๋ ๊ทธ๋๋ก ์ง๋์ ๋ฃ์ง ์๊ณ ์ ํํ ๊ณต์ ์ฃผ์๊ฐ ํ๋์ ์ด์ ์ขํ๋ก ์๋ ดํ ๋๋ง ์ถ์ฒ๋ฅผ ๋จ๊ฒจ ๋ณด์ถฉํฉ๋๋ค.
๊ณต์คํ์ฅ์ค์ ์ขํ๊ฐ ์ ๊ฑฐ๋ ์ ๊ตญ ํ์คํ์ ๊ธฐ์ค ๋ชฉ๋ก์ผ๋ก ์ ์งํ๊ณ ์์ธ์ยท์์ธ๊ตํต๊ณต์ฌยท
์ ์ฃผ์ยท๋ถ์ฐ ๋๋๊ตฌ ๊ณต์ CSV, ๋ถ์ฐ ๊ฐ๋งท๊ธธ ๊ณต์ SHP, ๋์ ์๊ตฌ์ ํค ์๋ ๊ณต์ JSON
API๋ฅผ ๊ฒฐํฉํฉ๋๋ค. ๊ธฐ๋ณธ ๊ท์น์ ์ ๊ทํํ ์์ค๋ช
๊ณผ ๋๋ก๋ช
/์ง๋ฒ์ฃผ์์ ๊ณ ์ 1:1
์ผ์น์
๋๋ค. ์์ธ์ ์์ฒ์ ํ๊ธฐ ์ฐจ์ด๋ฅผ ๋ณต๊ตฌํ๊ธฐ ์ํด์๋ง ์ ํ ์ฃผ์๊ฐ ์ค์์ ํ ์์ค๋ก
์ ์ผํ๊ฒ ์๋ ดํ๊ณ , ์์ชฝ ์์ค๋ช
์ด 4์ ์ด์์ด๋ฉด์ ์๋ก ํฌํจ๋๋ฉฐ, ์ค๋ณต ์์ฒ ํ์ ์ขํ๊น์ง
์ผ์นํ ๋ ๋ณด์์ ์์ธ๋ฅผ ํ์ฉํฉ๋๋ค. ์์ธ๊ตํต๊ณต์ฌ ์์ฒ์ ์ญ๋ช
์ ์ญ์ ๋ณด์ ํ ๋ค 3์
์ด์ ์ด๋ฆ ํฌํจ๊ณผ ์ ์ผํ ์ ํ ์ฃผ์๋ฅผ ํจ๊ป ์๊ตฌํฉ๋๋ค. ์ด๋ฆ๋ง ๋๋ ์ฃผ์๋ง ๋ง๋ ํ๋ณด๋
๋ฐ์ํ์ง ์์ต๋๋ค.
2026-07-30 ๊ธฐ์ค ๊ณต์ ์ง์ญ ์ขํ ์ ๊ท ๋ณด์ถฉ์ ์์ธ์ 664๊ณณ(์๊ฒฉ 601๊ณณ, ๋ณด์์ ์์ธ 63๊ณณ)ยท์์ธ ์งํ์ฒ 1~8ํธ์ 15๊ณณยท๋์ ์๊ตฌ 26๊ณณยท์ ์ฃผ์ 326๊ณณยท๋๋๊ตฌ 39๊ณณยท๋ถ์ฐ ๊ฐ๋งท๊ธธ 24๊ณณ์ผ๋ก ์ด 1,094๊ณณ์ ๋๋ค. ๊ธฐ์กด ์ฃผ์ ๋ํ์ ์ค ์์ธ ๊ณต์ ์๋ฃ์ ์๊ฒฉํ ๋ค์ ์ผ์นํ 3๊ณณ์ ํ์ ๊ฑด์๋ฅผ ๋๋ฆฌ์ง ์๊ณ ์์ค ์ขํ๋ก ์ ๋ฐ๋๋ง ๊ฐ์ ํฉ๋๋ค. ์ง์ ๋์ ์๋ณธ 17,341๊ณณ ์ค ์ง๋ ํ์๋ 11,845๊ณณ (68.3%), ์์ค ์ขํ๋ 10,783๊ณณ, ์ฃผ์ ๋ํ์ ์ 1,062๊ณณ, ์ขํ ๋ฏธํ์ธ์ 5,496๊ณณ์ด๋ฉฐ ์ถ์ฒ๋ณ ํ์ ์๋ ๋ณ๋ ์ธ๋ฑ์ค์ manifest์ ๋จ๊น๋๋ค.
๋ถ์ฐ์ ์ขํ ๋ฏธํ์ธ ์์ค์ ๋ถ์ฐ๊ด์ญ์ ๋๋ก๋ช
์ฃผ์ ์ ๋ณด์
๊ฑด๋ฌผ ๋ํ์ ์ ๋ณ๋ ์ค๋ฒ๋ ์ด๋ก ์ฌ์ฉํฉ๋๋ค. ์ค์ ๋๋ก๋ช
์ฃผ์๊ฐ ์์ฒ์ ๋จ์ผ ํ๊ณผ ์ ํํ
์ผ์นํ๊ณ ๊ฑด๋ฌผ๋ช
์ด ๋์กฐ๋ ์ ๊ท 222๊ณณ๋ง ๋ฐ์ํ๋ฉฐ, ๊ธฐ์กด v1 ์ขํ๊ฐ ๋ถ์ฐ ๋ฐ์ ๊ฐ๋ฆฌํจ 13๊ณณ๋
์ ์ขํ๋ฅผ ์์ฅ์ ๋ณด์กดํ ๋ค ์ฃผ์ ๋ํ์ ์ผ๋ก ๊ต์ ํฉ๋๋ค. ์ด 235๊ฐ ์ฃผ์์ ์ ์ฃผํฉ์
์ฃผ์ ๋ํ์ (๊ทผ์ฌ)์ผ๋ก ํ์ํ๋ฉฐ ์ค์ ํ์ฅ์ค ์์น๋ ์ถ์
๊ตฌ ์ขํ๋ก ๊ฐ์ฃผํ์ง ์์ต๋๋ค.
๋๊ตฌยท์ธ์ข
ยท์ธ์ฐ์ ์ขํ ๋ฏธํ์ธ ์์ค ์ค 82๊ณณ์ ๊ณต๊ณต๋ฐ์ดํฐํฌํธ์ 2025๋
์ดํ
๋์๊ณต์ยท
์ฃผ์ฐจ์ฅยท
์ ํต์์ฅยท
๋์๊ดยท
๋ฐ๋ฌผ๊ดยท๋ฏธ์ ๊ดยท
๊ณต๊ณต์์ค ๊ฐ๋ฐฉ ํ์ค์๋ฃ์ ํธ์คํธ ์์ค
๋ํ์ ์ผ๋ก ๋ณด์ถฉํฉ๋๋ค. ์์ธ ์ฉ์ฐ๊ตฌ๋
๋์ฃผ๋ฏผ์ผํฐ ํํฉ 5๊ณณ์ ๊ฐ์ ๊ทผ์ฌ
๊ณ์ธต์ ๋ณ๋ ๊ทธ๋ฃน์ผ๋ก ๋ก๋๋ค. ๋๋ก๋ช
ยท์ง๋ฒ ํค๋ฅผ ์์ง ์๊ณ , 4์ ์ด์ ์ด๋ฆ์ ๋จ๋ฐฉํฅ ํฌํจ
๋๋ ๋ช
์ ๊ฒํ ํ 19๊ฐ ๋ณํ๋ง ํ์ฉํ๋ฉฐ, ์ ํต์์ฅ์ PBLIC_TOILET_YN=Y์ธ ํ๋ง ์ฌ์ฉํฉ๋๋ค.
์ ๊ตญ ํ์ค 82๊ณณ๊ณผ ์ฉ์ฐ 5๊ณณ์ ๊ฐ๊ฐ IDยท์์ฒยท์ฃผ์ํคยท์ขํ ์ง๋ฌธ์ด ๋ฌ๋ผ์ง๋ฉด ์๋ ๊ฐฑ์ ์
์ค๋จํฉ๋๋ค.
๋ฏผ๋ฐฉ์/์ง์งํด์ผ ์ ์ ๋ฐ์ดํฐ manifest๋ ์ฒดํฌ์ธ๋ JSON์์ ๊ธฐ์ค์ผยท์ง์ญ๋ณ ์๋ยท๋์กฐ ์ํ๋ฅผ
๋ค์ ๊ณ์ฐํ ์ ์์ต๋๋ค. ์ง์งํด์ผ์ ์์ ๋ฐ์ดํฐ ์์ธ ๋ฉํ๋ฐ์ดํฐ์ updtymd๋ฅผ ์๋ณธ
๊ฐฑ์ ์ผ๋ก ๊ธฐ๋กํ๋ฉฐ, ํ์ ์์ ๋ถ ๋ฐํ ๊ด๋ฆฌ๋์ฅ ์์ ๊ณต๊ฐ API ์๊ฐ ๋ค๋ฅด๋ฉด ๊ทธ ์ฐจ์ด๋ฅผ ํจ๊ป ํ์ํฉ๋๋ค.
2026-07-29 API ์น์ธ ํ์ธ, ์ต์ ๊ณต๊ฐ์๋ฃ ๋์กฐ, ๋ฒ๋ น ๊ต์ ๋ฐ ์ถ๊ฐ API ์ฐ์ ์์๋
docs/data-source-audit-2026-07-29.md์ ์ ๋ฆฌ๋์ด ์์ต๋๋ค.
node scripts/update-static-data-manifest.mjs
# ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์๋์ผ๋ก ์ฝ์ ์ ์๋ ๋น์ ์ํฉ์์๋ง ๊ธฐ์ค์ผ์ ๊ฐ์ ์ง์
TSUNAMI_SHELTER_API_KEY=... TSUNAMI_SOURCE_DATE=YYYY-MM-DD node scripts/sync-tsunami-shelters.js์ด์ ๋ฆฌ์คํฌ์ ํ์ ๋ณด์ ๊ณผ์ ๋ docs/operational_risks.md์ ์ ๋ฆฌ๋์ด ์์ต๋๋ค.
์ต์ ์ฑยท์ง์ญ๋ฒ์ยท์ขํยท์ค๋ณตยท๊ณต์ ๋ฐํ ๋์กฐ๋ฅผ ๋ถ๋ฆฌํ๊ณ ๊ณต๊ฐ ์ธํฐ๋ท ์์ฒ์ ์ฐ์ ํ๋ ๊ธฐ์ค์
docs/data-completeness-policy.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ํ์์ ๊ฒ์ฆํ ์ ์ ์ง๊ณ๋ก ์๋ ํด๋ฐฑํฉ๋๋ค.
์ด ํ๋ก์ ํธ๋ ์๋ฐฉ ํ์ฅ ํ๋ ์ง์ ๋ชฉ์ ์ผ๋ก ์ ์๋์์ต๋๋ค.