지하철 실시간 승차 안내
- 관련링크
- 구글플레이 바로가기 앱스토어 바로가기 웹 바로가기
주요기능 소개
■ 무엇을 해결하나
지하철에서 내릴 역을 놓치는 일은 대개 '정보가 없어서'가 아니라 '그 순간 볼 수 없어서' 생깁니다. 혼잡한 객차에서는 전광판이 가려지고, 이어폰을 끼고 있거나 청각이 불편하면 안내방송이 닿지 않습니다. 초행길에서는 역 이름을 들어도 몇 정거장이 남았는지 감이 오지 않습니다.
스마트래블의 '타고 내리기'는 이 순간을 위해 만들었습니다. 출발역과 도착역만 고르면, 그 승강장에 오는 열차 목록에서 내가 탈 열차를 한 번 누르는 것으로 안내가 시작됩니다.
■ 공공데이터를 어떻게 쓰는가
· 실시간 도착정보(realtimeStationArrival)로 그 역에 오는 열차와 도착 예정을 보여주고, 응답의 열차번호(btrainNo)로 사용자가 고른 열차를 특정합니다.
· 실시간 열차 위치정보(realtimePosition)로 그 열차번호를 노선 위에서 계속 따라가며 현재 역·진입/도착/출발 상태를 읽습니다.
· 두 정보를 열차번호로 연결하기 때문에, "지금 이 열차가 어디에 있고 내릴 역까지 몇 정거장 남았는지"를 추정이 아니라 실제 값으로 말할 수 있습니다.
안내는 세 갈래로 나갑니다.
① 화면 — 이번 정거장, 남은 정거장 수, 도착 예정 시각
② 음성 — 정거장마다 "다음은 ○○역입니다", 한 정거장 전 "내릴 준비 하세요"
③ 잠금화면 — 폰을 주머니에 넣어도 남은 정거장이 보이는 카드
환승이 있는 경로는 갈아탈 노선의 열차 도착까지 미리 보여주어, 뛸지 말지를 사용자가 직접 판단할 수 있게 했습니다.
■ 누구에게 쓸모가 있나
· 초행길·출장·여행객 — 역 이름을 몰라도 남은 정거장으로 안다
· 시각·청각이 불편한 이용자 — 전광판과 안내방송에 의존하지 않는 두 번째 통로
· 출퇴근 이용자 — 잠깐 졸거나 다른 일을 봐도 내릴 역에서 깨워준다
■ 호출을 어떻게 아끼고 있는가
실시간 열차 위치는 노선 단위로 오기 때문에, 같은 노선을 몇 명이 보든 서버는 캐시 주기당 한 번만 호출하도록 설계했습니다.
· 서버(엣지) 공용 캐시: 열차 위치 20초 · 도착정보 20초(도착역은 60초)
· 동시 요청이 겹칠 때는 한 요청만 갱신하고 나머지는 캐시를 재사용
· 이용자 1인당 호출 상한과 서비스 전체 일일 상한을 자체적으로 두어 운영
(현재 일 1,000건 중 850건을 자체 상한으로 설정, 15%는 여유분으로 남김)
즉 호출량이 '이용자 수'가 아니라 '동시에 조회되는 노선 수'에 비례하도록 만들었습니다. 이용자가 늘어도 공공 API 부하는 완만하게 증가합니다.
■ 출처 표시
공공누리 제1유형에 따라 해당 기능 화면 하단에 아래 문구를 상시 노출하고 있습니다.
"수도권 18개 노선의 실시간 열차 위치·도착정보를 씁니다
(출처: 서울시 교통정보 시스템 TOPIS)"
■ 지원 범위
1~9호선, GTX-A, 경의중앙선, 공항철도, 경춘선, 수인분당선, 신분당선, 경강선, 서해선, 신림선 (수도권 18개 노선)
■ 한도 상향 요청
현재 인증키의 일일 호출 한도(1,000건)로는 실시간 안내 특성상 소수의 이용자만 동시에 사용할 수 있습니다. 위와 같이 캐시·자체 상한으로 호출을 최소화하고 있으나, 정식 서비스 운영을 위해 한도 상향을 요청드립니다.
활용사례(갤러리) 설명
사용 데이터셋
서울시 지하철 실시간 열차 위치정보
