동시에 비교하는 통합 검색 UI
PROJECT OVERVIEW
기차는 기차대로,
버스는 버스대로 찾던 과정을
한 번의 검색으로 줄였습니다.
장거리 이동을 계획할 때는
철도, 고속버스, 시외버스, 자동차, 지하철과
시내버스를
각각 다른 서비스에서 확인하는
경우가 많습니다.
가장 빠른 경로를 찾았더라도 표가 없거나,
가격은 저렴하지만 환승이 많으면
다시 처음부터 비교해야 합니다.
이 프로젝트는 출발지와 도착지를
한 번 입력하면
여러 이동수단의 후보를
같은 기준으로 모아 비교하고,
사용자가 실제로 선택하기 쉬운 형태로
추천하는 것을 목표로 개발했습니다.
교통수단을 직접 설정
SEARCH CONDITIONS
출발지와 목적지만
보는 것이 아니라
언제, 몇 명이, 무엇을
우선하는지도 함께 봅니다.
같은 구간이라도 출발 날짜와 시간, 인원,
사용자가 원하는 기준에 따라
좋은 경로가 달라집니다.
검색 단계에서 날짜·시간·인원과 함께
가장 빠르게 / 가장 저렴하게 / 환승 적게 중
우선 기준을 선택하도록 구성했습니다.
자동차, 기차, 고속·시외버스, 지하철,
시내버스, 도보 중 검색에 포함할
이동수단도
사용자가 직접 선택할 수 있어
불필요한 후보를 줄일 수 있습니다.
필요하면 특정 거점을 고정
HUB RESOLVER
서울, 전주 처럼
도시만 입력해도
실제 이동에 필요한 거점을
다시 찾습니다.
사용자가 도시 단위로 목적지를
입력했다고 해서 모든 이동수단의
도착점이 같은 것은 아닙니다.
철도는 역을, 고속·시외버스는 터미널을
이용해야 하므로 실제 경로를 만들기 전에
사용할 수 있는
거점 후보가 필요합니다.
도시와 역·터미널 데이터를 연결해
도시 전체를 기준으로 유리한 거점을
자동 탐색하고,
사용자가 특정 역이나
터미널을 꼭 이용해야 할 경우에는
해당 도착 거점을
직접 고정할 수 있도록
설계했습니다.
한 화면에서 비교
MULTI-MODAL ROUTES
이동수단마다 다른 결과
형식을
하나의 경로
데이터로 통합합니다.
대중교통 길찾기 데이터는 버스, 지하철,
도보, 철도 등 각 구간의 정보 형식이
다릅니다.
프로그램에서는 각 구간을 이동수단,
출발지, 도착지, 소요시간, 서비스명 등의
공통 구조로 변환해 하나의 전체 경로로
조합하도록 설계했습니다.
ODsay 대중교통 경로 API를
연결할 수 있는 Provider를
별도로 구성해 실제 좌표를 기준으로
경로 후보를 받아오고, API가 없는
환경에서도 개발·검증이 가능하도록
Demo Provider를 분리했습니다.
목적에 맞는 후보를 추천
ROUTE RANKING
가장 빠른 경로가 항상
가장 좋은 경로는 아닙니다.
경로 추천 로직은 단순히 소요시간만
정렬하지 않습니다.
선택한 우선 기준에 따라 소요시간, 가격,
환승 횟수의 가중치를 다르게 적용하고
각 후보를 점수화합니다.
예를 들어 빠른 이동을 선택하면
시간 비중을 높이고, 저렴한 이동에서는
가격 비중을 높이며,
환승을 줄이고 싶은
경우에는 환승 횟수의 영향도를
크게 반영합니다.
이렇게 계산된 결과 중
가장 낮은 점수의 경로를 현재 조건에
가장 적합한 추천 경로로 표시합니다.
추천 기준으로 확장
AVAILABILITY READY
시간표상 가능한 경로보다
실제로 갈 수 있는 경로를
추천하기 위해
철도나 고속·시외버스는 시간표에
경로가 존재하더라도 매진이면
실제 선택할 수 없습니다.
이를 위해 시스템 내부에 표 있음 /
잔여 적음 / 매진 / 예매 불필요 / 조회 전
상태 모델을 두고 추천 점수에도 이용 가능
상태를 반영할 수 있도록 만들었습니다.
현재 구조는 실시간 판매 좌석 Provider를
별도로 연결할 수 있도록 분리되어 있으며,
좌석 데이터가 연동되면
매진 경로의 우선순위를 낮추고
주변 역이나 다른 터미널을 이용한
우회 후보를 함께 제안할 수 있도록
확장하는 방식입니다.
연동을 고려한 확장 구조
API ARCHITECTURE
한 서비스에 종속되지 않도록
경로 Provider를 분리했습니다.
외부 API는 정책이나 제공 범위가
바뀔 수 있기 때문에 검색 화면과
외부 API 호출 로직을 직접 묶지
않았습니다.
경로 Provider 인터페이스를 두고
Demo와 실제 ODsay Provider를
분리해
데이터 공급원을 교체하거나
추가하기 쉽도록 구성했습니다.
출발지·도착지 좌표는 Kakao Places와
연결할 수 있도록 별도 필드로 전달하고,
결과 경로는 지도 위에 표시할 수 있는
구조로 확장성을 남겨두었습니다.
이후 자동차 경로, 실시간 승차권,
예약 딥링크 등도 별도 Provider로
확장할 수 있습니다.
하나의 흐름으로 연결한 상용형 MVP
RESULT
길찾기 화면 하나가 아니라
이동을 결정하는 과정을
통합했습니다.
이 프로젝트의 핵심은 지도 위에
경로선을 하나 보여주는 것이 아닙니다.
사용자가 여러 교통 서비스를 오가며
직접 하던 비교 과정을 프로그램이
대신 처리하고,
같은 조건 안에서 선택지를
판단할 수 있게 만드는 데 있습니다.
출발·도착 입력 →
이동 거점 탐색 →
이동수단별 경로 수집 →
공통 데이터 변환 →
시간·비용·환승·이용 가능 상태 점수화 →
추천 흐름을 하나로 연결했습니다.
PC와 모바일 모두에서 사용할 수 있는
반응형 UI로 구성해 이후 실제 API와
예약 서비스를
단계적으로 연결할 수 있는
상용형 MVP 기반을 구축했습니다.