| Youtube Video |
|---|
![]() |
낭만 어플리케이션은 네이버 및 카카오 지도를 개선한 대중교통 길찾기 시스템이다. 현재 네이버 및 카카오 지도에서 제공하는 길찾기 시스템은 버스 및 지하철의 탑승 시간만을 고려해 경로를 보여준다. 하지만 배차 간격이 긴 대중교통의 경우, 네이버 및 카카오에서 제시한 예상 시간과 실제 걸리는 시간이 차이가 많이 난다. 이 부분에 대해서 네이버 및 카카오에서는 현재 시간을 기준으로 다음 버스, 다다음 버스가 몇분 뒤에 도착할지에 대해 알려주지만, 노선에 환승이 있을 경우 환승 후 얼마나 기다려야 될지에 대한 정보는 제공해주지 않는다. 즉, 사용자가 직접 판단하거나 운에 맡기며 대중교통을 탑승하는 경우가 많다.
낭만 어플리케이션은 이 문제점을 해결하기 위해 개발되었다. 서버 컴퓨터에서 네이버 지도를 실행하여 대중교통 노선을 찾기 위한 빅데이터를 수집하고, 이를 이용하여 대중교통의 “대기시간”을 포함한 실제 시간을 계산하여 준다. 또한, 뛰어가기 모드도 있어, 사용자가 대중교통 정류장까지 뛰어갔을 경우 대중교통에 탑승할 수 있는지도 계산하여준다.
| APP 아이콘 | 실행시 스플래쉬 이미지 |
|---|---|
![]() |
| APP 메인 화면 | 출발지 or 도착지 입력 시 화면 | 지도에서 검색 시 화면 |
|---|---|---|
![]() |
![]() |
![]() |
- 출발지/도착지 입력시 관련 검색어를 클릭.(해당 위치의 위도 경도, 반환)
- 지도에서 검색 시 해당 위치의 위도, 경도를 반환함.
- 위도, 경도 좌표 값을 얻기 위해 Google Map API 사용.
- 메인 화면에서 검색한 경로는 Fileinputstream, Fileoutputstream을 사용하여 json파일로 저장
| 대중교통 경로 검색 시 나오는 스플래쉬 비디오 | ||
|---|---|---|
![]() |
![]() |
![]() |
- 빅데이터를 수집할 시 데이터 수집하는 서버 컴퓨터의 화면을 videoview로 보여줌.
| 대중교통 길찾기 결과 | 달리기 모드(2.5배속)으로 전환 시 화면 |
|---|---|
![]() |
![]() |
- 검색 결과를 대중교통 이용시간, 대기시간, 도보 등을 바 그래프로 보여줌
- 각각의 바 그래프는 시간에 비례하여 길이를 설정함.
- 바 및 설명은 dynamic programming을 통해 구현
- 회색: 도보, 주황색: 대기 시간, 연두색: 버스 탑승 시간, 하늘색: 지하철 탑승시간
- 기본 걷기 모드 시 121번 버스를 탑승하기 위해서는 19분 대기하여야함.
- 뛰기 모드(걷기의 2.5배속) 모드로 전환 시 121번 버스에 알맞게 탑승하여 대중교통 시간이 46분에서 13분으로 줄어들음.
몰입캠프 특성 상 앱 개발에 주어진 시간은 일주일이었다. 일주일 내에 대중교통 길찾기를 직접 구현하는 것은 불가능에 가까웠다. 특정 위치에서 다른 위치로 이동 시 갈 수 있는 모든 버스, 지하철, 도보의 조합과 걸리는 시간을 직접 계산하는 것이 어려웠기 때문이다. 따라서 대중교통 길찾기를 개선하기 위해서는 기존 길찾기 시스템의 일부 api가 필요하였다. 하지만, 대중교통 길찾기 서비스를 제공해주는 api는 없었다. 네이버, 카카오, tmap, 구글에서 대중교통 길찾기를 제공하지 않았고, 검색 끝에 ODASY라는 대중교통 길찾기 서비스를 찾았으나, 해당 api는 최적화 된 경로를 제대로 보여주지 못하였고, 안드로이드 스튜디오 버젼 문제 또한 있어 사용하지 않았다.
앱 개발 3일째, 대중교통 경로 API가 없어 주제를 바꾸려고 하였으나, 문득 Web scraping이라는 기술이 떠올랐다. 하지만, scaping 또한 만만치 않았다. 네이버의 대중교통 길찾기 웹의 html 을 불러오니 네이버 측에서 html 안에 정보를 표현하지 않았고, 사용자의 클릭 및 입력 이벤트로 움직이는 javascript를 실행해야 화면상에 띄워주는 것을 보고 어려움을 겪었다.
일주일 동안 완성을 하지 못하여도 선정한 주제를 끝까지 낭만있게 해보자라는 마음가짐으로 프로젝트 개발에 임하였고, 끝내 성공하여 앱 이름을 낭만으로 하였다.
- OS: Android 11(minSdk: 21, targetSdk: 30)
- 언어: Java
- IDE: Android Studio
- Target Device: Galaxy S10e
- NodeJS, Python
- Python API : selenium
- 카이스트 17학번 한재준
- 카이스트 19학번 김기현









