그럴듯한 화면과 옳은 계산은
다른 문제입니다

엔진이 지켜야 할 성질을 실제 데이터로 걸어 본 결과입니다. 통과한 것만 골라 싣지 않습니다. 실패가 있으면 실패로 적습니다. 같은 자료로 다시 돌리면 같은 결과가 나옵니다 — 무작위가 섞이지 않습니다.

26
통과
전체 29건 = 불변식 20 + 역검증 5(참고) + 성능 3 + 신선도 1(참고)
0
실패
없음
2026-08-30 00:40
실행 시각
소요 17.4초
36,060
검사 대상
도로 링크 · 노드 27,509

불변식

어떤 입력에도 성립해야 하는 성질. 하나라도 깨지면 그 답은 못 믿는다

✓
같은 입력에 같은 답
출발지 4곳 재계산 — 일치 4곳 · 최대 차이 0.000000초
무작위가 섞이면 보고서와 화면이 다른 값을 낼 수 있고, 재현·감사가 불가능해진다
✓
위험가중을 켜면 위험 노출이 늘지 않는다
표본 4건 모두 성립
비용함수가 위험을 제대로 벌하고 있는지를 직접 확인한다
✓
통제 구간을 지나는 경로가 하나도 없다
통제 0개소(엣지 0) · 경로 72건 검사 · 위반 0건
통제된 지하차도로 안내하면 이 서비스는 존재 이유를 잃는다
✓
견딜 수 없는 침수 구간으로 안내하지 않는다
경로 29건 검사 · 위반 0건
휠체어 이용자에게 허용치를 넘는 구간을 안내하면 그 안내는 위험 그 자체가 된다
✓
오를 수 없는 경사로 안내하지 않는다
경로 29건 중 경사 상한이 걸린 7건 검사 · 위반 0건
휠체어 이용자에게 5%를 넘는 비탈을 안내하면 그 경로는 존재하지 않는 경로다
✓
갈 수 없는 거리의 대피소를 권하지 않는다
답 60건 검사 · 상한 초과 0건
고령자에게 1.2km 를 넘는 곳을 권하면 그 안내는 실행되지 않는다
✓
취약지 격자와 상황판이 같은 답을 낸다
표본 3칸 모두 일치
예방 지도와 대응 화면이 다른 규칙으로 계산되면 둘 중 하나는 반드시 틀린 것이다
✓
대피 주체에 맞는 사람을 센다
65세 이상 28,062명 (공표 30,182명 대비 7.0%) · 심한장애 2,717명 (공표 2,851명 대비 4.7%) · 심한장애는 시군구 공표를 시 전체 비율로 균등 적용(근거 한 단계 낮음)
고령자 조건으로 계산하고 전 주민을 세면 숫자는 그럴듯해도 가리키는 대상이 다르다
✓
재난 신호가 없으면 아무 곳도 닫지 않는다
평시 상황 통제 0개소
무차별로 닫는 규칙은 규칙이 아니다. 닫지 않는 경우가 있어야 판정이라 부를 수 있다
✓
차량이 출발하지 못하는 지점이 없다
도로 200m 이내 표본 2,802개 · 차량 출발 불가 0개
보행로 노드에 붙으면 차량은 한 발도 못 나가 전 후보가 경로 없음이 된다. 차가 갈 곳이 없다는 뜻이 아니라 엔진이 못 찾는 것이다
✓
관측 연계 없는·임계 없는 구간이 위험 0으로 취급되지 않는다
관측 연계 없는 지상 도로 32,264개 · 임계 없는 관측소 연계 0개(전 관측소 임계 보유) — 가정 호우에서 각각 위험>0 15,395개(47.7%) · 0개(0.0%) · 통제 0개
기준 관측소가 없거나 임계수위가 미확보라고 안전하다는 뜻이 아니다. 지형과 강우로라도 위험을 잡아야 하고, 반대로 그 어떤 구간도 근거 없이 통제되어서는 안 된다
✓
대피소 선언 통계는 목록에서 다시 센 값과 같다
선언 109개소 · 11,976명 — 재계산 109개소 · 11,976명 · 수용률 11.1%
생산자와 소비자의 세는 규칙이 어긋나면 폐쇄된 시설을 쓰는 셈이다
✓
예방 수용력 표가 읍면동별로 갈라지는가
표 15행 · 이름 붙은 읍면동 14곳 중 14곳에 침수 가용 시설 · 합계 109개소 / 시 전체 109개소 · 경계 밖 3개소
한 줄에 몰리면 화면은 「우리 동에는 침수 대피소가 0개소」라고 말한다. 실제로 그렇게 인쇄되고 있었다
✓
지하차도 0개소는 등록 자료와도 같다
그래프 지하차도 0 · 국토교통 등록 0개소
등록 시설이 없는데 화면에 통제 대상이 있으면 근거 없는 표시다
✓
기본 출발지가 용역이 실제로 분석한 땅 위에 있다
기본 출발지 35.073192, 128.083931 — 범위 안 · 표본 6곳 중 범위 안 1곳(정동면 읍동길(용역 분석지구)) · 범위 사천시 정동면 사천강 하구 저지대 — 고읍리·예수리·화암리 일원
「용역과 대조한다」는 말은 같은 좌표를 볼 때만 참이다. 지명이 같다는 것은 근거가 아니다
✓
제3자가 잠긴다고 판정한 시설로 안내하지 않는다
용역 탈락 2개소(동계1리 마을회관·고읍경로당) · 출발지 6곳 후보 노출 0건 · 수용 통계 포함 0개소
행안부 지정 목록에 있다는 사실과 50년빈도 범람 시 잠기지 않는다는 사실은 다르다. 대피 안내에서는 뒤가 우선한다
✓
정원 압력 값이 자기 자신과 맞는가
대피소 102개소 · 배수 불일치 0건 · 판정 불일치 0건 · 격자 인구 109,002명 중 배정 100,111명 · 미배정 8,891명
화면은 「정원의 몇 배」라고 말한다. 그 배수가 수요÷정원이 아니면 근거 없는 수를 말하는 것이다
✓
「덜 몰리는 곳」이라 부른 곳이 실제로 받을 수 있는가
출발지 6곳 + 인구격자 40칸 × 2개 조건 · 대안을 낸 경우 7건 · 위반 0건
수용률 11.1%인 곳에서 없는 여유를 지어내면, 정원 축은 안내를 돕는 것이 아니라 틀린 안내를 늘린다. 배수가 낮은 것과 받을 수 있는 것은 다른 사실이다
✓
보고서 읍면동별 대피소가 시 합계와 맞는가
읍면동 합계 106개소 11,856명 / 시 전체 침수가용 109개소 11,976명
읍면동마다 0개소로 인쇄되면 담당자는 관내에 갈 곳이 없다고 읽는다. 우선 개방 대상도 함께 비어 버린다
✓
보고서 읍면동 표의 모든 열이 채워지는가
읍면동 14곳 × 열 5종 전부 채움 · 자력대피 취약 최고 곤양면 86%
값이 없으면 표는 「—」 로 비고 지도는 0% 로 칠해진다. 자료가 없는 것과 위험하지 않은 것은 다른 사실이다

역검증

과거에 실제로 있었던 재난에 규칙을 그대로 걸어 본 결과

✓
사건마다 다르게 반응한다
사례 4건 · 도달 단계 종류 3종 (안전 / 심각 / 관심)
모든 사건에서 똑같이 반응하면 그것은 판정이 아니라 상수다
✓
하천이 조용한 날의 재난을 강우 축이 잡는다
2026.8 사천 하천 안전 / 강우 호우주의보 · 2020.8 경남 하천 심각 / 강우 호우주의보 · 2022.9 힌남노 하천 관심 / 강우 호우경보 · 2023.8 경남 하천 관심 / 강우 호우주의보 — 하천이 조용한데 강우가 특보인 사례 3건
사천강은 공표 기준수위에 좀처럼 닿지 않는다. 하천 단계만 보면 실제 있었던 재난이 「안전」으로 인쇄된다
✓
용역의 대피소 배정과 얼마나 같은 답을 내는가
비교 268칸 중 162칸 일치(60.4%) · 어긋난 106칸은 전부 정원 상한 때문 — 용역은 수용인원으로 재배정했고 사천안길은 거리만 보았다 · 사천여자고등학교 배정 36칸은 그 시설이 행안부 지정 목록에 없어 비교 불가
같은 격자를 다른 조직이 다른 도로망으로 배정한 결과가 있다. 어긋나는 자리는 이유가 설명되어야 한다
·
예수지구 대피수요가 인근 지정 대피소 정원 안에 들어가는가
대피수요 2,196.5명(304칸) · 인근 지정 대피소 4개소 정원 합계 616명 · 거리만 보면 동성초등학교 강당(정원 150명)에 1,802명이 몰린다 · 정원을 반영하면 1,582.2명(72%)이 갈 자리가 없다 — 용역의 1차 집결지(열린유치원)·2차 대피소(경남자영고등학교)가 받아야 할 몫이다
갈 수 있다는 것과 거기 자리가 있다는 것은 다르다. 정원을 넘긴 안내는 현장에서 되돌려 보내진다
·
시 전역에서 몇 개소가 몰릴 곳인가
수요가 붙은 102개소 중 정원 초과 예상 88개소 · 그 수요 합계 99,303명 / 정원 합계 9,505명 · 최대 하동림경로당 정원 33명에 3,083명(93배)
예수지구에서 나온 정원 부족이 그 구역만의 일인지, 사천 전체의 성질인지를 남긴다

성능

계산 자체에 걸리는 시간. 검사를 돌린 기기 기준이며 서버 응답시간과는 다르다

✓
경로 1건 계산 시간
표본 72건 · 중앙값 0.0ms · p95 0.2ms
재난 상황에서 몇 초씩 기다리는 화면은 쓰이지 않는다
✓
대피 계획 1회(후보 전수 + 대조군)
455ms — 후보마다 최소위험경로와 최단경로를 각각 계산한 값
화면이 한 번에 내놓는 답 전체를 만드는 데 걸리는 시간
✓
도달권 1회(역방향 전수 탐색)
93ms · 대피소 12개소 기준
취약지 지도를 다시 만드는 데 드는 비용. 사전 계산이라 화면에서는 기다리지 않는다

신선도

어느 시점 자료로 계산한 결과인가

·
계산에 쓴 자료의 생성 시점
도로망 그래프 2026-08-25 · 대피시설 2026-08-28 · 기준수위 2026-08-29 · 주민등록 인구 2026-08-25 · 행정경계 2026-08-24 · 취약지 격자 2026-08-29
언제 자료로 계산한 결과인지 모르면 그 숫자는 근거가 되지 못한다

역검증 상세

같은 규칙을 세 재난의 실측값에 그대로 걸었을 때 그날 무엇이 나왔는가

재난수위 첨두통제 판정확보한 선행시간
2026.8.15~17 사천 극한호우2026081708 · 3.01m없음—
2020.8 경남 호우2020080824 · 7.95m없음—
2022.9.5~6 태풍 힌남노2022090820 · 3.26m없음—
2023.8 경남 호우2023081017 · 3.20m없음—

사천권에는 등록 지하차도가 없어 통제 대상은 하천변 도로·교량 접근로이고, 2022.9 태풍 힌남노에서는 어느 구간도 경계단계에 닿지 않았습니다. 규칙이 비만 오면 닫는 것이 아니라는 것을 보이려면 닫히지 않는 사례가 있어야 합니다. 선행시간의 기준은 실제 침수 시각이 공개된 경우 그 시각, 아니면 그 관측소의 수위 첨두입니다.

운영에 드는 비용

현재 구성 그대로의 값. 모르는 것은 모른다고 적습니다

호스팅Vercel — 현재 이용량에서는 무료 구간실측
하천 수위·강우WAMIS — 공개 조회. 호출 비용 0원실측
홍수특보 기준수위낙동강홍수통제소 공표 — 관측소 4곳 중 3곳 공표값. 비용 0원실측
기준수위(잠정)WAMIS 시수위 이력 재산출 — 하동군(대곡리) 미공표분만 백분위 파생. 비용 0원파생
대피시설·인구행정안전부 공공데이터 — 생활안전지도·주민등록 통계. 비용 0원실측
도로망·행정경계OpenStreetMap · 행정안전부 admdongkor — 출처 표기 조건. 비용 0원실측
경사(링크)국토지리정보원 수치표고모델 DEM 90m — 공표 수치지형자료 — 보행 경사 상한 판정. 비용 0원실측
표고·저지대Copernicus DEM GLO-30 — 공개 라이선스. 저지대지수 파생에 사용. 비용 0원파생
지도 표시카카오맵 — 무료 사용량 범위 내. 초과하면 유료 전환 필요확인 필요
AI 브리핑DeepSeek — 상황 1건당 약 1,000토큰. AI 가 멈춰도 규칙 기반으로 같은 브리핑이 나옴실측

수위·강우·기준수위처럼 판단을 좌우하는 신호는 모두 공개 자료로 확보합니다. 외부 계약이 끊겨 서비스가 멈추는 구조가 아닙니다.

다음 사람이 이어받을 수 있는가

한 사람만 아는 절차가 남아 있으면 그것은 제품이 아닙니다

데이터 적재8단계 자동 처리수집부터 도로망 구축까지 사람 손이 들어가는 단계가 없습니다
다른 도시 적용대피시설·관측소 자료 교체같은 절차를 그대로 돌리면 그 도시의 취약지 격자가 만들어집니다
검증배포 전 자동 검사이 페이지의 숫자를 만드는 검사입니다. 하나라도 실패하면 배포가 멈춥니다
사건 추가실측 이력 등록관측 이력이 있는 재난은 한 건 등록으로 사례가 늘어납니다
판정 규칙한 곳에서만 정합니다통제 구간과 구간 위험도의 기준이 한 곳에 있어, 화면·보고서·격자가 같은 답을 냅니다

이 검사가 실제로 잡아낸 것

「갈 수 없는 거리의 대피소를 권하지 않는다」 검사가 처음 실행에서 실패했습니다. 대피소 후보를 직선거리로 골라 놓고 실제 보행거리는 확인하지 않아, 「최대 이동거리 2,500m」 라고 적어 두고 2,795m 를 걷게 하는 안내가 나오고 있었습니다. 같은 이유로 예방 화면의 취약지 격자와 대응 화면의 판정이 한 칸에서 어긋났습니다. 경로 탐색에 이동거리 상한을 넣어 두 화면이 같은 규칙을 쓰도록 고쳤고, 지금은 두 검사 모두 통과합니다.

두 번째는 인쇄물에서 나왔습니다. A4 상황보고서가 읽던 취약지 산출물의 파일 이름이 어긋나 있었고, 읽기에 실패한 자리를 조용히 넘기도록 되어 있었습니다. 그 결과 읍면동별 「자력대피 취약」 값이 전부 비었고, 취약지 지도는 14개 읍면동을 모두 0%(가장 옅은 색)로 인쇄하고 있었습니다. 자료가 없는 것과 취약하지 않은 것은 다른 사실입니다. 파일 이름을 짓는 자리를 한 곳으로 모으고, 값이 없는 지역은 회색(자료 없음)으로 그리도록 고쳤습니다. 파일이 있는지 묻는 대신 보고서를 실제로 만들어 열이 채워지는지로 판정하는 검사를 더했습니다.

화면만 보고는 알 수 없는 종류의 결함입니다. 검사를 만들지 않았다면 그대로 남았을 것입니다.

통과한 검사만 골라 싣지 않는다. 실패가 있으면 실패로 적고 그대로 공개한다. 성능은 이 스크립트를 돌린 기기 기준이며 서버 응답시간과는 다르다. 검사 표본 출발지 — 동서동 대방동(삼천포) · 사천시청(용현) · 정동면 읍동길(용역 분석지구) · 곤양면 검정리(가화천변) · 곤명면(북부 내륙) · 사천읍(공항 방면).