Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

275 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 ํ‚ค๋Š” ๋ธŒ๋ผ์šฐ์ € ๋ฒˆ๋“ค์— ๋„ฃ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋กœ์ปฌ ๊ฐœ๋ฐœ ํ‚ค๋Š” 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&regionName=...&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_ID
  • NEWS_CACHE_KV_ID, NEWS_CACHE_KV_PREVIEW_ID
  • FIRE_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-scripts

NFDS ํ™”์žฌํ†ต๊ณ„ ๋™๊ธฐํ™”๋Š” ๋ณ„๋„ ์„œ๋น„์Šค ํ‚ค ์—†์ด ๊ณต๊ฐœ ํ†ต๊ณ„ ํ™”๋ฉด์˜ ์กฐํšŒ ๊ฒฐ๊ณผ๋ฅผ ์ €๋นˆ๋„๋กœ ์Šค๋ƒ…์ƒทํ™”ํ•ฉ๋‹ˆ๋‹ค. 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ํ–‰์—์„œ ๊ฒ€์ฆํ•œ ์ •์  ์ง‘๊ณ„๋กœ ์ž๋™ ํด๋ฐฑํ•ฉ๋‹ˆ๋‹ค.


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

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

About

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

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages