공식 제공 페이지 기준으로 API는 4종인데, 프로젝트에서는 실패 범위와 정리 책임에 따라 5개 소스로 나눴다.

사용한 공공데이터

내부 소스 공식 공공데이터 확인하는 정보
shortest_route 최단경로이동정보 이동 시간, 환승, 구간별 경로 후보
facility_info 편의시설위치정보 엘리베이터·에스컬레이터 위치와 운행 구간
elevator_status 교통약자 이용시설 승강기 가동현황 시설별 가동 상태
elevator_info 교통약자이용정보 역·호선별 엘리베이터 상세 위치
restroom 교통약자이용정보 역·호선별 장애인화장실 위치

교통약자이용정보 API가 엘리베이터와 장애인화장실을 같이 주지만 내부 소스는 나눴다. 한쪽이 실패했을 때 다른 쪽의 조회 상태까지 같이 숨어버리면 안 되니까.


정리하면서 정한 기준

역명과 호선은 별칭과 운영기관까지 목록으로 관리한다. 모호하면 비슷한 역으로 확정하지 않고 한 번에 하나씩 되묻는다.

최단경로 API의 역 코드는 일반 역 번호와 값이 달라서 따로 관리하고, 실제 응답으로 확인한 코드만 쓴다. 이걸 같은 값으로 가정했다가 실제로 사고가 났다.

시설 상태는 소스마다 표현이 달라서 네 가지로 정리했다. 엘리베이터 위치와 가동 상태는 시설 번호가 같거나 이름이 정확히 하나만 일치할 때만 같은 시설로 묶고, 애매하면 상태를 붙이지 않고 미확인으로 둔다.


빈 응답을 다섯 가지로 나눈 이유

같은 빈 응답이라도 원인은 제각각이다. 조회는 성공했는데 해당이 없을 수도, 일부 소스만 실패했을 수도, 지원 범위 밖일 수도, 최신 조회가 실패해 이전 응답을 쓴 것일 수도 있다.

bf-diagram-empty.png

사용자에게 해야 하는 말이 전부 다르니까 서버도 다른 상태로 돌려준다.

공공데이터에 없다는 것과 현실에 없다는 것은 전혀 다른 말이다.


역 코드 문제로 생긴 실제 장애는 트러블슈팅과 운영 시나리오의 사례 1에 있다. 이 상태 구분을 실제로 쓰는 쪽은 근거 기반 판단과 MCP 계약의 판단 규칙이다.