Week 10 · Travel discovery

기차타고 어디가지?

목적지를 정하기 전, 출발역에서 갈 수 있는 곳부터 보여주는 철도 탐색

코레일톡과 SRT가 이미 정한 목적지를 예매하는 도구라면, 이 서비스는 그보다 앞선 ‘어디로 갈까’를 해결합니다. 출발역 하나를 고르면 직통과 1회 환승으로 닿는 여행지를 소요시간·운임·열차종과 함께 계산하고, 같은 코어를 웹 AI와 MCP 도구가 공유합니다.

269
철도역 노드
프로덕션 그래프
258
서울 기준 도달역
직통 99 + 1회 환승 159
92%
운임 구간 커버
TAGO 스냅샷 기준
01

Problem

해결하려는 문제

예매 앱은 목적지가 있어야 시작할 수 있습니다.

코레일톡·SRT는 출발지와 도착지를 모두 입력해야 좋은 답을 줍니다. 하지만 여행을 정하는 첫 질문은 ‘서울에서 부산까지 어떻게 가지?’가 아니라 ‘오늘 서울에서 어디까지 갈 수 있지?’인 경우가 많습니다. 기존 지도와 예매 앱 사이에는 목적지 발견 단계가 비어 있었습니다.

검색 실패는 대안 없이 끝났습니다.

직통 열차가 없으면 사용자는 다른 역이나 환승 경로를 스스로 다시 검색해야 합니다. 이 서비스는 불가능을 빈 화면으로 끝내지 않고 직통, 1회 환승, 인근역이라는 대안을 같은 결과 안에서 비교하도록 설계했습니다.

02

Sources

데이터와 출처

서비스 화면의 수치와 결과가 어디에서 왔는지 사용자가 다시 확인할 수 있도록, 원천 데이터와 가공 결과를 분리해서 관리합니다.

코레일 여객열차 운행정보

열차번호별 정차역 순서를 수집해 역을 노드로, 같은 열차로 이어지는 역을 연결로 구성한 정적 운행 그래프의 기반입니다. 프로덕션 스냅샷에는 269개 역이 포함됩니다.

공공데이터포털 ↗

TAGO 열차정보 API

국토교통부 TAGO의 역 목록과 출발·도착 열차정보 API를 이용해 구간별 최저 운임과 열차종을 보강했습니다. 현재 표시는 정적 스냅샷이며 실시간 좌석과 운휴를 보장하지 않습니다.

TAGO API 정보 ↗

OpenStreetMap · Leaflet

지도 탭은 별도의 상용 지도 키 없이 Leaflet과 공개 지도 타일을 이용해 전국 철도망과 선택한 경로를 표현합니다.

OpenStreetMap 저작권 ↗
03

Build

직접 구현한 기술적 차별점

출발역 하나로 계산하는 도달 가능성

열차 운행 그래프에서 depth를 제한한 BFS를 실행해 직통과 1회 환승 목적지를 구분합니다. 목적지마다 소요시간, 환승역, 운임과 이용 가능한 열차종을 함께 결합합니다.

시간을 반경으로 바꾼 방사형 지도

일반 지도는 거리를 보여주지만 여행자가 느끼는 가까움은 소요시간에 가깝습니다. 방사형 화면은 역의 실제 방위를 각도로 유지하고 소요시간을 중심에서의 반경으로 바꿔, 2시간 안쪽 당일치기 후보를 한눈에 비교하게 합니다.

웹 AI와 MCP가 공유하는 trainCore

목적지 검색, 도달 가능성 확인, 테마별 여행 추천 로직을 trainCore에 한 번 구현했습니다. 웹의 OpenAI function-calling과 MCP 서버가 같은 함수 계약을 사용하기 때문에 인터페이스에 따라 답이 달라지는 문제를 줄였습니다.

예매를 흉내 내지 않는 안전한 경계

실시간 좌석, 운휴와 정확한 환승 대기시간은 표시하지 않습니다. 탐색이 끝나면 코레일 또는 SRT의 공식 예매 화면으로 연결해 최종 운행정보를 다시 확인하도록 합니다.

04

How to use

사용 방법

  1. 01

    출발역을 선택합니다.

    서울·용산·수서 같은 주요역 또는 검색을 이용해 출발역 하나만 정합니다.

  2. 02

    직통과 환승 범위를 고릅니다.

    직통만 보거나 1회 환승까지 포함하고, KTX·SRT·KTX-이음·무궁화 등 원하는 열차종을 조합합니다.

  3. 03

    목록·방사형·지도에서 비교합니다.

    목록에서는 운임과 시간을, 방사형에서는 시간권을, 지도에서는 실제 철도망의 방향과 연결을 살펴봅니다.

  4. 04

    AI에게 여행 조건을 말합니다.

    ‘서울에서 2시간 안에 바다 보러 갈 곳’처럼 물으면 AI가 철도 도구를 호출해 데이터 안에서 후보를 좁힙니다.

  5. 05

    공식 예매 서비스에서 최종 확인합니다.

    원하는 여행지를 찾은 뒤 코레일·SRT에서 실제 운행 여부와 좌석을 확인하고 예매합니다.

05

Product

실제 화면

서울역 기준 철도 여행지를 소요시간 반경으로 표시한 방사형 지도
각도는 실제 방위, 반경은 소요시간입니다. 민트는 직통, 노랑은 1회 환승이며 점선 안쪽은 2시간 이내 후보입니다.
출발역에서 갈 수 있는 철도 여행지 목록 화면
탐색 탭에서는 도착역별 직통·환승 여부, 소요시간, 최저 운임과 열차종을 동일한 단위로 비교합니다.
06

Process

제작 과정과 결과

  1. 01

    데이터 접근성 검증

    TAGO API의 역 목록과 구간별 열차정보를 실제 호출해 응답 필드, 호출량과 커버리지를 확인했습니다. 전체 그래프를 pairwise API 호출로 만드는 방식은 일일 quota를 넘기므로 제외했습니다.

  2. 02

    운행 그래프와 BFS 실증

    정차역 순서를 한 번 순회해 직통 그래프를 만들고, 제한 깊이 BFS로 직통과 1회 환승 경로를 계산했습니다. 이후 프로덕션 그래프를 269개 역으로 확장했습니다.

  3. 03

    세 가지 탐색 표현 제작

    같은 결과를 목록, 방사형 시간 지도, 실제 지도라는 서로 다른 판단 도구로 표현했습니다. 사용자가 익숙한 표뿐 아니라 여행 가능권을 공간적으로 이해하도록 만들었습니다.

  4. 04

    웹·MCP·미니앱으로 확장

    공유 코어 위에 웹 AI BFF와 MCP 서버를 연결하고, Apps in Toss 환경에서도 같은 탐색 경험을 사용할 수 있도록 별도 래퍼와 배포 자산을 구성했습니다.

서울역 기준 258개 도달 후보를 한 화면에

프로덕션 화면은 서울역 기준 직통 99곳과 1회 환승 159곳을 구분해 보여줍니다. 목적지를 하나씩 검색하던 작업을 출발역 중심의 탐색으로 바꿨습니다.

하나의 철도 코어를 사람과 AI가 함께 사용

웹 UI, 자연어 탐색과 MCP 도구가 동일한 도달성·운임·테마 로직을 공유합니다. 새로운 인터페이스를 추가해도 데이터 판단의 단일 출처를 유지할 수 있는 구조가 되었습니다.

설명보다 직접 사용해 보세요.

이 페이지는 제작 배경과 데이터 출처를 설명합니다. 실제 기능과 최신 데이터는 라이브 서비스에서 확인할 수 있습니다.

train.n2f.site서비스 열기 ↗