본문 바로가기
조그만 기술로 세상을 이롭게/버스정류소어때

버스 위치·도착정보 API란?

by eplus 2026. 5. 24.

버스 위치 API는 현재 운행 중인 버스가 어느 정류소 근처에 있는지, 어떤 노선의 차량이 어디까지 왔는지를 조회할 수 있는 공공 교통 데이터 서비스입니다.

버스 앱에서 흔히 보는 다음 기능들이 대부분 버스 관련 API를 통해 구현됩니다.

주변 버스정류소 조회
정류소 경유 노선 조회
버스 도착 예정 시간 조회
노선별 현재 운행 차량 위치 조회
정류소 기준 접근 중인 버스 조회
지도 위 버스 위치 표시
 

즉 버스 위치 API는 단순히 버스 목록을 보여주는 것이 아니라, 정류소·노선·차량·도착예정시간·현재위치를 연결해 실시간 교통 서비스를 만드는 핵심 데이터입니다.


대표적인 버스 관련 API

1. 국토교통부 TAGO 버스 API

전국 단위 버스 정보를 활용하려면 가장 먼저 검토할 수 있는 것이 국토교통부 TAGO API입니다.

TAGO는 Transport Advice on Going Anywhere의 약자로, 대중교통 정보를 통합 제공하는 국가 교통정보 서비스입니다. 공공데이터포털에서는 TAGO 기반으로 버스정류소정보, 버스노선정보, 버스위치정보 등을 제공합니다.

국토교통부 TAGO 버스위치정보 API는 노선을 기준으로 현재 운행 중인 시내버스 위치정보를 조회하는 서비스이며, 제공 도시는 도시코드 목록 조회 기능을 통해 확인할 수 있습니다.

TAGO 버스노선정보 API는 노선번호와 노선ID를 기준으로 시내버스 노선정보와 노선별 경유 정류소 목록을 조회하는 서비스입니다.

2. 서울시 버스 API

서울 지역 서비스라면 서울시 버스 API도 중요합니다.

서울시 버스도착 정보 조회 API는 버스 기본정보, 현재위치, 도착예정시간 등을 검색할 수 있으며, 정류소 노선별 도착예정정보, 경유노선 전체 정류소별 도착예정정보, 교통약자용 도착정보 등을 제공합니다.

서울시 버스위치 정보 조회 API는 차량번호, 정류소 도착 여부, 종점 도착 소요시간 등을 조회할 수 있고, 노선버스 위치정보, 특정 정류소 접근 버스 위치정보, 특정 차량 위치정보 등을 제공합니다.

서울시는 별도 버스정보 Open API 사이트를 통해 노선정보, 정류소정보, 버스위치정보, 버스도착정보를 제공합니다.

3. 지자체별 버스 API

경기도, 부산, 대구, 광주, 대전, 울산, 창원 등 일부 지자체는 자체 버스정보시스템, 즉 BIS/BMS 데이터를 제공합니다.

지역에 따라 API 구조가 다를 수 있습니다.

경기도 버스 API
부산 버스정보 API
서울 버스 API
대구 버스 API
광주 BIS API
창원 버스정보 API
TAGO 연계 API
 

따라서 전국 버스 앱을 만들 때는 TAGO API만으로 모든 지역이 동일하게 처리된다고 보기 어렵습니다. 지역별로 제공 여부, 도시코드, 노선ID 체계, 정류소ID 체계, 응답 항목이 다를 수 있습니다.


버스 앱 개발에 필요한 주요 API 구조

버스 앱을 만들려면 보통 하나의 API만으로는 부족합니다. 여러 API를 순서대로 연결해야 합니다.

1. 도시코드 조회 API

TAGO API에서는 도시코드가 중요합니다.

예를 들어 창원, 부산, 서울, 김해, 진주처럼 지역마다 도시코드가 있고, 이 도시코드를 기준으로 정류소나 노선을 조회합니다.

도시명 검색
  ↓
도시코드 확인
  ↓
해당 도시의 정류소·노선 조회
 

주의할 점은 지역에 따라 2자리 코드, 5자리 코드, 행정구역 코드 등이 혼재되어 보일 수 있다는 점입니다. 개발할 때는 API별로 요구하는 도시코드 형식을 정확히 확인해야 합니다.

2. 정류소 조회 API

정류소 조회 API는 정류소명이나 정류소 번호를 기준으로 버스정류소 목록을 가져오는 기능입니다.

예를 들어 사용자가 “창원시청” 또는 “마산역”을 검색하면 주변 정류소 또는 이름이 일치하는 정류소 목록을 보여줄 수 있습니다.

주요 응답 항목은 다음과 같습니다.

정류소ID
정류소명
정류소번호
위도
경도
도시코드
 

이 API가 있어야 지도 위에 정류소 마커를 표시할 수 있습니다.

3. 노선 조회 API

노선 조회 API는 버스 번호를 입력했을 때 해당 노선의 정보를 가져오는 기능입니다.

예를 들어 사용자가 “100번”을 검색하면 해당 지역의 100번 버스 노선 목록을 조회합니다.

주요 응답 항목은 다음과 같습니다.

노선ID
노선번호
노선유형
기점
종점
운행방향
배차간격
첫차시간
막차시간
 

주의할 점은 같은 버스 번호가 여러 지역이나 여러 방향으로 존재할 수 있다는 점입니다. 따라서 노선번호만 저장하면 안 되고, 반드시 노선ID를 함께 저장해야 합니다.

4. 노선별 경유 정류소 조회 API

노선ID를 기준으로 해당 버스가 지나가는 정류소 목록을 가져오는 API입니다.

버스 앱에서 노선을 선택하면 전체 정류소가 순서대로 표시되는 기능이 여기에 해당합니다.

주요 응답 항목은 다음과 같습니다.

노선ID
정류소ID
정류소명
정류소순번
위도
경도
상행/하행 방향
 

이 데이터를 지도에 선 또는 마커로 표시하면 노선도를 만들 수 있습니다.

5. 버스 도착정보 API

버스 도착정보 API는 특정 정류소에 어떤 버스가 몇 분 후 도착하는지 알려줍니다.

버스 앱에서 가장 많이 사용하는 기능입니다.

주요 응답 항목은 다음과 같습니다.

정류소ID
노선ID
노선번호
첫 번째 도착 예정 시간
첫 번째 차량 현재 위치
두 번째 도착 예정 시간
두 번째 차량 현재 위치
남은 정류소 수
저상버스 여부
막차 여부
혼잡도
 

지역에 따라 혼잡도, 저상버스 여부, 차량번호 제공 여부는 다를 수 있습니다.

6. 버스 위치정보 API

버스 위치정보 API는 특정 노선을 기준으로 현재 운행 중인 차량들이 어느 정류소 부근에 있는지 조회합니다.

TAGO 버스위치정보 API도 노선을 기준으로 현재 운행 중인 시내버스 위치정보를 조회하는 구조입니다.

주요 응답 항목은 다음과 같습니다.

노선ID
차량ID 또는 차량번호
현재 정류소 순번
현재 정류소ID
현재 정류소명
위도
경도
진행 방향
도착 여부
막차 여부
 

지도에 버스 아이콘을 표시하려면 이 API가 필요합니다.


버스 위치 API와 도착 API의 차이

버스 앱을 만들 때 헷갈리기 쉬운 부분이 있습니다. 바로 버스 위치정보버스 도착정보의 차이입니다.

버스 위치정보

버스 위치정보는 노선 기준입니다.

100번 버스가 현재 어디에 있나?
현재 운행 중인 100번 차량은 몇 대인가?
각 차량은 어느 정류소 근처에 있나?
 

즉 노선 전체를 기준으로 현재 버스들의 위치를 보여줍니다.

버스 도착정보

버스 도착정보는 정류소 기준입니다.

이 정류소에 100번 버스가 몇 분 후 오나?
이 정류소에 도착할 다음 버스는 몇 정류장 전인가?
두 번째 버스는 몇 분 후 오나?
 

즉 사용자가 서 있는 정류소를 기준으로 도착 예정 정보를 보여줍니다.

정리하면 다음과 같습니다.

버스 위치정보 = 노선 중심
버스 도착정보 = 정류소 중심
 

버스 앱의 일반적인 조회 흐름

1. 현재 위치 기준 주변 정류소 조회

가장 기본적인 기능은 현재 위치 주변의 버스정류소를 보여주는 것입니다.

앱 실행
  ↓
GPS 현재 위치 확인
  ↓
주변 정류소 조회
  ↓
거리순 정렬
  ↓
정류소 목록 표시
  ↓
지도에 정류소 마커 표시
 

이때 API에서 주변 정류소 조회 기능을 제공하지 않으면, 정류소 전체 데이터를 받아 좌표 거리 계산을 직접 해야 할 수도 있습니다.

2. 정류소 선택 후 도착정보 조회

사용자가 정류소를 선택하면 해당 정류소에 도착하는 버스 정보를 표시합니다.

정류소 선택
  ↓
정류소ID 확보
  ↓
도착정보 API 호출
  ↓
노선번호·도착예정시간 표시
 

이 화면에서는 보통 다음 정보를 보여줍니다.

버스번호
방향
도착예정시간
남은 정류소 수
첫 번째 버스
두 번째 버스
저상버스 여부
 

3. 노선 선택 후 버스 위치 표시

사용자가 특정 노선을 선택하면 해당 노선의 현재 운행 차량 위치를 조회합니다.

노선 선택
  ↓
노선ID 확보
  ↓
노선별 경유 정류소 조회
  ↓
버스 위치정보 조회
  ↓
지도에 정류소와 버스 위치 표시
 

이 기능을 구현하면 버스가 현재 어디쯤 오고 있는지 지도에서 확인할 수 있습니다.


지도와 함께 활용하는 방법

버스 위치 API는 지도와 결합할 때 활용도가 커집니다.

지도 화면에는 다음 정보를 표시할 수 있습니다.

내 현재 위치
주변 정류소 마커
선택한 정류소
선택한 노선의 경유 정류소
현재 운행 중인 버스 위치
버스 진행 방향
 

앱 구조는 보통 다음과 같습니다.

모바일 앱
  ↓
GPS 위치 확인
  ↓
버스 API 호출
  ↓
응답 데이터 파싱
  ↓
지도 API에 마커 표시
  ↓
하단 목록과 지도 연동
 

예를 들어 C# MAUI 앱에서는 WebView에 카카오 지도, 네이버 지도, 브이월드 지도를 표시하고, C# 코드에서 API를 호출한 뒤 JavaScript로 마커 데이터를 전달하는 방식이 현실적입니다.


개발 시 필요한 데이터 구조

버스 앱에서는 다음과 같은 모델이 필요합니다.

정류소 모델

 
public class BusStop
{
    public string StopId { get; set; }
    public string StopName { get; set; }
    public string StopNo { get; set; }
    public string CityCode { get; set; }
    public double Latitude { get; set; }
    public double Longitude { get; set; }
    public double DistanceMeters { get; set; }
}
 

노선 모델

 
public class BusRoute
{
    public string RouteId { get; set; }
    public string RouteNo { get; set; }
    public string RouteType { get; set; }
    public string StartStop { get; set; }
    public string EndStop { get; set; }
    public string Direction { get; set; }
}
 

도착정보 모델

 
public class BusArrival
{
    public string StopId { get; set; }
    public string RouteId { get; set; }
    public string RouteNo { get; set; }
    public int ArriveInMinutes { get; set; }
    public int RemainingStops { get; set; }
    public string VehicleNo { get; set; }
    public bool IsLowFloor { get; set; }
}
 

버스 위치 모델

 
public class BusPosition
{
    public string RouteId { get; set; }
    public string VehicleNo { get; set; }
    public string StopId { get; set; }
    public string StopName { get; set; }
    public int StopSequence { get; set; }
    public double Latitude { get; set; }
    public double Longitude { get; set; }
    public string Direction { get; set; }
}
 

API 호출 예시 구조

공공데이터포털 API는 보통 다음과 같은 형태로 호출합니다.

https://apis.data.go.kr/서비스명/오퍼레이션명
?serviceKey=발급받은인증키
&cityCode=도시코드
&routeId=노선ID
&_type=json
 

또는 XML 응답이 기본인 경우도 있습니다.

serviceKey=인증키
numOfRows=10
pageNo=1
cityCode=도시코드
routeId=노선ID
 

개발할 때는 반드시 해당 API의 상세페이지에서 요청 변수와 응답 항목을 확인해야 합니다. 같은 버스 API라도 cityCode, routeId, nodeId, stationId, busRouteId처럼 파라미터명이 다를 수 있습니다.


C# MAUI에서 활용 예시 흐름

C# MAUI 앱에서 버스 위치 API를 활용한다면 다음과 같은 구조가 적합합니다.

1. 현재 GPS 위치 가져오기
2. 도시코드 또는 지역 설정
3. 주변 정류소 조회
4. 정류소 목록 표시
5. 정류소 선택 시 도착정보 조회
6. 노선 선택 시 버스 위치 조회
7. 지도 WebView에 정류소·버스 마커 표시
 

간단한 HttpClient 호출 구조는 다음과 같습니다.

 
using System.Net.Http;
using System.Text.Json;

public class BusApiService
{
    private readonly HttpClient _httpClient = new HttpClient();
    private readonly string _serviceKey = "발급받은_인증키";

    public async Task<string> GetBusPositionRawAsync(string cityCode, string routeId)
    {
        var url =
            "https://apis.data.go.kr/서비스명/오퍼레이션명" +
            $"?serviceKey={_serviceKey}" +
            $"&cityCode={cityCode}" +
            $"&routeId={routeId}" +
            "&_type=json";

        return await _httpClient.GetStringAsync(url);
    }
}
 

실제 서비스명과 오퍼레이션명은 사용하는 API에 따라 달라집니다.


개발 시 주의해야 할 점

1. 지역별 API 차이

버스 API는 지역별 차이가 큽니다. 서울은 서울시 API 체계가 있고, 경기도는 경기도 API 체계가 있으며, 전국 단위는 TAGO API를 활용할 수 있습니다.

따라서 전국 버스 앱을 만들려면 다음 전략이 필요합니다.

기본은 TAGO API 사용
서울·경기 등 주요 지역은 전용 API 검토
지역별 응답 형식 차이 보정
도시코드 매핑 테이블 관리
 

2. 도시코드 문제

도시코드가 맞지 않으면 정류소나 노선 정보가 조회되지 않습니다. 특히 일부 지역은 행정구역 코드와 API 도시코드가 다를 수 있으므로 주의해야 합니다.

3. 노선ID와 정류소ID 관리

버스 번호만으로는 정확한 조회가 어렵습니다.

예를 들어 같은 “100번”이라도 지역, 방향, 지선·간선 여부에 따라 다른 노선일 수 있습니다. 따라서 내부적으로는 반드시 routeId를 기준으로 처리해야 합니다.

정류소도 이름만으로는 중복이 많으므로 stopId 또는 nodeId를 기준으로 관리해야 합니다.

4. 실시간 데이터 지연

버스 위치와 도착정보는 실시간처럼 보이지만 실제로는 수십 초에서 몇 분 정도 지연될 수 있습니다. GPS 수집 주기, 통신 상태, 지자체 BIS 시스템 상태에 따라 차이가 발생합니다.

따라서 화면에 다음과 같은 안내가 있으면 좋습니다.

실시간 정보는 교통상황 및 통신상태에 따라 차이가 있을 수 있습니다.
 

5. 데이터 없음 처리

특정 지역이나 노선은 데이터가 없을 수 있습니다.

예를 들어 다음 상황이 발생할 수 있습니다.

운행 종료 시간
막차 이후
해당 노선 미운행
도시코드 미지원
정류소ID 오류
API 서버 점검
GPS 정보 미수신
 

이 경우 앱에서는 단순히 오류라고 표시하기보다 “현재 운행 중인 차량 정보가 없습니다”처럼 안내하는 것이 좋습니다.

6. 호출량 제한

공공데이터 API는 호출량 제한이 있습니다. 사용자가 많아지면 호출량을 초과할 수 있습니다.

이를 줄이려면 다음 방식이 필요합니다.

같은 정류소 도착정보는 일정 시간 캐시
버스 위치 자동 새로고침 간격 제한
검색 결과 저장
즐겨찾기 정류소 우선 캐시
서버 중계 방식 적용
 

7. 인증키 보호

모바일 앱에 공공데이터 인증키를 그대로 넣으면 외부에 노출될 수 있습니다. 상용 서비스라면 자체 서버에서 API를 중계하는 방식이 더 안전합니다.

앱
  ↓
내 서버 API
  ↓
공공데이터 API
  ↓
내 서버에서 가공 후 앱으로 반환
 

버스 위치 앱에 넣으면 좋은 기능

버스 위치 API를 활용하면 다음과 같은 앱 기능을 만들 수 있습니다.

현재 위치 기준 주변 정류소 조회
정류소 즐겨찾기
자주 타는 노선 즐겨찾기
정류소별 도착 예정 버스 조회
노선별 전체 정류소 보기
현재 운행 차량 지도 표시
가까운 버스 2대 자동 표시
버스 위치 새로고침
하차 알림
막차 정보 표시
저상버스 표시
혼잡도 표시
검색 이력 저장
 

특히 사용자 입장에서는 “내가 탈 버스가 지금 어디쯤 왔는지”가 가장 중요합니다. 따라서 정류소 도착정보와 노선별 버스 위치정보를 함께 보여주는 것이 좋습니다.


버스 API를 활용한 앱 화면 구성 예시

첫 화면

현재 위치
주변 정류소 목록
지역 검색
정류소 검색
즐겨찾기 정류소
 

정류소 화면

정류소명
정류소 번호
경유 노선 목록
도착 예정 버스 목록
첫 번째·두 번째 도착 정보
 

노선 화면

노선번호
기점·종점
전체 경유 정류소
현재 운행 차량 위치
지도 표시
 

지도 화면

내 위치
선택 정류소
경유 정류소
현재 버스 위치
버스 진행 방향
 

마무리

버스 위치 API와 도착정보 API는 대중교통 앱 개발의 핵심입니다. 정류소 정보, 노선 정보, 도착 정보, 위치 정보를 연결하면 사용자가 실제로 이용할 수 있는 버스 정보 서비스를 만들 수 있습니다.

전국 단위로는 국토교통부 TAGO API를 먼저 검토할 수 있고, 서울처럼 별도 API가 잘 구축된 지역은 해당 지자체 API를 활용하는 것이 좋습니다. 다만 지역별로 도시코드, 정류소ID, 노선ID, 응답 형식이 다르기 때문에 개발 단계에서 데이터 구조를 잘 정리해야 합니다.

버스 위치 API를 지도와 결합하면 현재 위치 주변 정류소, 접근 중인 버스, 노선별 차량 위치를 직관적으로 보여줄 수 있습니다. 여기에 즐겨찾기, 최근 검색, 알림, 지도 마커 기능을 추가하면 생활에 유용한 버스 정보 앱으로 발전시킬 수 있습니다.

728x90
반응형