활용사례(갤러리)

지하철 실시간 승차 안내

등록일2026-08-31 | 등록자배**

주요기능 소개

■ 무엇을 해결하나

지하철에서 내릴 역을 놓치는 일은 대개 '정보가 없어서'가 아니라 '그 순간 볼 수 없어서' 생깁니다. 혼잡한 객차에서는 전광판이 가려지고, 이어폰을 끼고 있거나 청각이 불편하면 안내방송이 닿지 않습니다. 초행길에서는 역 이름을 들어도 몇 정거장이 남았는지 감이 오지 않습니다.

스마트래블의 '타고 내리기'는 이 순간을 위해 만들었습니다. 출발역과 도착역만 고르면, 그 승강장에 오는 열차 목록에서 내가 탈 열차를 한 번 누르는 것으로 안내가 시작됩니다.

■ 공공데이터를 어떻게 쓰는가

· 실시간 도착정보(realtimeStationArrival)로 그 역에 오는 열차와 도착 예정을 보여주고, 응답의 열차번호(btrainNo)로 사용자가 고른 열차를 특정합니다.
· 실시간 열차 위치정보(realtimePosition)로 그 열차번호를 노선 위에서 계속 따라가며 현재 역·진입/도착/출발 상태를 읽습니다.
· 두 정보를 열차번호로 연결하기 때문에, "지금 이 열차가 어디에 있고 내릴 역까지 몇 정거장 남았는지"를 추정이 아니라 실제 값으로 말할 수 있습니다.

안내는 세 갈래로 나갑니다.
  ① 화면 — 이번 정거장, 남은 정거장 수, 도착 예정 시각
  ② 음성 — 정거장마다 "다음은 ○○역입니다", 한 정거장 전 "내릴 준비 하세요"
  ③ 잠금화면 — 폰을 주머니에 넣어도 남은 정거장이 보이는 카드

환승이 있는 경로는 갈아탈 노선의 열차 도착까지 미리 보여주어, 뛸지 말지를 사용자가 직접 판단할 수 있게 했습니다.

■ 누구에게 쓸모가 있나

· 초행길·출장·여행객 — 역 이름을 몰라도 남은 정거장으로 안다
· 시각·청각이 불편한 이용자 — 전광판과 안내방송에 의존하지 않는 두 번째 통로
· 출퇴근 이용자 — 잠깐 졸거나 다른 일을 봐도 내릴 역에서 깨워준다

■ 호출을 어떻게 아끼고 있는가

실시간 열차 위치는 노선 단위로 오기 때문에, 같은 노선을 몇 명이 보든 서버는 캐시 주기당 한 번만 호출하도록 설계했습니다.

· 서버(엣지) 공용 캐시: 열차 위치 20초 · 도착정보 20초(도착역은 60초)
· 동시 요청이 겹칠 때는 한 요청만 갱신하고 나머지는 캐시를 재사용
· 이용자 1인당 호출 상한과 서비스 전체 일일 상한을 자체적으로 두어 운영
  (현재 일 1,000건 중 850건을 자체 상한으로 설정, 15%는 여유분으로 남김)

즉 호출량이 '이용자 수'가 아니라 '동시에 조회되는 노선 수'에 비례하도록 만들었습니다. 이용자가 늘어도 공공 API 부하는 완만하게 증가합니다.

■ 출처 표시

공공누리 제1유형에 따라 해당 기능 화면 하단에 아래 문구를 상시 노출하고 있습니다.

  "수도권 18개 노선의 실시간 열차 위치·도착정보를 씁니다
   (출처: 서울시 교통정보 시스템 TOPIS)"

■ 지원 범위

1~9호선, GTX-A, 경의중앙선, 공항철도, 경춘선, 수인분당선, 신분당선, 경강선, 서해선, 신림선 (수도권 18개 노선)

■ 한도 상향 요청

현재 인증키의 일일 호출 한도(1,000건)로는 실시간 안내 특성상 소수의 이용자만 동시에 사용할 수 있습니다. 위와 같이 캐시·자체 상한으로 호출을 최소화하고 있으나, 정식 서비스 운영을 위해 한도 상향을 요청드립니다.

활용사례(갤러리) 설명

스마트래블은 여행·이동을 돕는 모바일 앱입니다. 그중 '타고 내리기' 기능은 서울시 지하철 실시간 정보를 이용해, 출발역과 도착역만 정하면 지금 탄 열차를 열차번호로 따라가며 이번 정거장과 남은 정거장을 알려줍니다. 전광판을 볼 수 없거나 안내방송을 듣기 어려운 상황에서도 내릴 역을 놓치지 않도록 화면·음성·잠금화면으로 안내합니다.

사용 데이터셋

서울시 지하철 실시간 도착정보
서울시 지하철 실시간 열차 위치정보
지하철 실시간 승차 안내 글의 사용자 업로드 이미지