DOI QR코드

DOI QR Code

Development of Halfway Station Recommendation Application Using Dijkstra's Algorithm

다익스트라 알고리즘을 활용한 중간지점 추천 애플리케이션 개발

  • Park, Naeun (Dept of Media Software, Sungkyul University) ;
  • Mun, Jiyeon (Dept of Media Software, Sungkyul University) ;
  • Jeoung, Yuna (Dept of Media Software, Sungkyul University) ;
  • Cho, Seoyeon (Dept of Media Software, Sungkyul University) ;
  • Huh, Won Whoi (Dept of Media Software, Sungkyul University)
  • Received : 2020.12.09
  • Accepted : 2021.01.26
  • Published : 2021.02.28

Abstract

This study aims to help users to have a more satisfying encounter based on the problems found by comparing and analyzing similar applications. That is, an application that derives intermediate points through the subway, which is a public transportation means, and provides information on nearby convenience facilities was proposed. The middle point calculation process uses the dijkstra algorithm, which stores the minimum number of nodes in the stored path from the first input location to the last location. The stack and arraylist are used to search all paths from the first input position to the last position, and then the path with the smallest number of nodes is selected. After that, the number of stations in the route is divided in half and the resulting station is output. In addition, this study provides information on convenience facilities near intermediate points in order to have differences from similar applications. It categorizes within a 1km radius of the point and provides a function that helps to conveniently identify only facilities around the middle point. In particular, by visualizing the number of convenience facilities with radar charts and numbers, it is possible to grasp the commercial district around the midpoint at a glance.

Keywords

1. 서론

최근 정부에서 삶의 질 개선을 목표로 주 52시간 근무제의 도입 및 시행하고 있다. 이로써 개인주의적 성향의 대중화와 같은 사회 분위기 속에서 ‘워라밸’, ‘욜로’와 같이 개인의 삶의 질과 자신만의 여가 활동 역시 점차 중요시되고 있다[1].

문화체육관광부가 발표한 2019 국민 여가 활동 조사에 따르면, 1년 동안 가장 만족한 여가 활동은 ‘친구 만남’으로 가장 만족도의 성장 폭이 높은 것을 알 수 있다[2]. 즉, 많은 사람이 여가생활을 보낼 때 주로 모임과 같은 친목 도모의 시간을 가진다는 것이다. 그러나 이러한 만남에 있어 우리는 적절한 약속 장소를 선정하기 위해 여러 요소를 따지는 경향이 있다[3,4]. 대중교통으로 비슷한 시간이 소요되는 위치, 해당 위치 주변에 어떤 놀거리가 있는지 등을 고민한 후 약속 장소의 위치를 선정한다[5].

이에 본 연구에서는 해당 문제점을 해결하기 위해 나와 상대방 사이의 거리를 계산하여 중간지점을 계산해주는 애플리케이션을 개발하려 한다. 본 연구를 하기에 앞서, 타 애플리케이션과의 차별점을 갖기 위해 같은 주제로 시중에 출시된 애플리케이션들을 직접 실행해보고 각 애플리케이션에 대한 문제점을 분석하고 보완하여 우리 연구에서 강점으로 활용하고자 한다.Fig.1과 Fig.2는 ‘위밋플레이스’, Fig.3은 ‘중간지점찾기’라는 중간지점을 찾아주는 애플리케이션이다.

Fig. 1. Membership in email format in ‘Wemeetplace’.

Fig. 2. Midpoint coordinates in ‘Wemeet place’.

Fig. 3. Enter search bar in ‘Find midpoint’.

위밋플레이스는 회원가입을 해야 애플리케이션 기능을 실행할 수 있었는데, 사용해 본 결과 형식에 맞지 않는 이메일 또한 회원가입이 가능하였다. 실제 존재하는 이메일이 아니라도 형식만 맞으면 회원가입이 가능하도록 한 기능은 최근 디지털 범죄에서 많이 악용되는 가입 사례이다. 또한, 검색창을 통해 위치 정보를 입력할 때 지도 API와 애플리케이션 내 상호작용이 이루어지지 않아 검색 결과를 볼 수 없는 문제점이 발견되었다. 입력한 위치 사이의 계산을 통해 도출한 중간지점을 단순 좌표로만 제공하고 주변 상권에 대한 정보를 알 수 없어 다른 지도 애플리케이션을 통해 추가 검색이 필요하다는 점에서, 단순히 중간지점만 제공하는 건 사용자가 애플리케이션을 사용하는 데 있어서 불편하다는 것을 알 수 있다.

위의 문제점들을 보완하여 우리의 강점으로 강조하고자 한다. 우선, 스마트폰 사용자 대부분이 사용하는 카카오톡을 통해 회원가입을 유도한다. 지도 API와의 상호작용을 통해 실시간 위치 정보 및 검색한 위치에 대한 상세정보를 알 수 있다[6,7]. 중간지점으로 도출한 결과의 위치 주변 상권을 분석하여 사용자와 상대방 모두가 만족할 수 있는 장소임을 보여주도록 한다. 이는 곧 사용자가 애플리케이션을 사용하는 데 있어서 만족도를 높여준다.

본 논문의 구성은 다음과 같다. 2장에서는 본 논문의 설계와 주 기능 및 서브 기능을 소개하고 있다. 3장에서는 사용자들 사이의 거리를 계산하는 주기 능의 바탕인 다익스트라 알고리즘을 설명한다. 여기서는 다익스트라 알고리즘이 어떠한 방식으로 우리의 기능을 실현하는지를 서술한다. 그리고 4장에서는 제안한 알고리즘으로 실행한 결과로 나온 중간지 점들을 보여준다. 이는 사용자 각자의 위치에서 도출된 중간지점까지의 역 사이 개수를 통해, 알고리즘의 정확성을 입증하려 한다.5장에서는 실행한 결과에 대한 결론을 맺는다.

2. 본론

2.1 애플리케이션 설계

본 논문에서는 다익스트라 알고리즘을 일부 활용하여 두 입력 위치의 중간지점을 계산하여 사용자들 이 간편한 모임을 즐길 수 있도록 도와줄 수 있는 애플리케이션 ‘HALFWAY’를 개발하고자 한다. 또 한, 이를 현재 국내 점유율이 높은 ‘카카오 로그인 API’를 사용하여 번거로운 회원가입 절차를 쉽고 간편하게, 중간지점에 대한 정보를 사용자의 친구에게 결과를 공유할 수 있도록 개발하고자 하였다. 이를 통해 공유 기능도 별도의 친구 추가 과정이 필요 없이 사용자가 카카오톡 친구에게 중간지점 결과를 쉽게 공유할 수 있다.

Fig.4는 ‘HALFWAY’의 전체적인 시스템 구성도를 보여준다.

Fig. 4. System configuration diagram.

애플리케이션을 실행 후 회원가입(Sign Up)이나 로그인(Login)을 하면 메인 기능을 실행할 수 있다. 메인 기능은 위치 기반 기능(Location based func-tion)이 필요한 중간지점을 찾아주는 중간지점 찾기 (HALFWAY) 버튼 이외에 지도(Map) 버튼과 사용자가 일정을 더욱 편리하게 사용할 수 있도록 도와주는 달력(Calendar) 버튼이 있다. 추가로 회원 관련 기능으로는 로그아웃(logout)과 탈퇴(Quit)가 있다.

중간지점 찾기에서 2개의 역 이름을 입력하면 중간지점에 해당하는 역을 보여주는 결과 화면(Result Screen)으로 들어간다. 해당 화면에서 보여주는 결괏값은 다익스트라 알고리즘을 일부 활용한 것으로, 첫 번째 입력값에서 마지막 입력값까지 누적된 노드들의 평균값이다. 이후 상세 경로(Detailed route)에서 입력된 역과 중간지점을 지도 위에 표현하여 시각적으로 보여준다. 이 화면에서 돋보기 아이콘을 클릭하면 중간지점을 기준으로 반경 1km에 있는 카페나 식당 같은 주변 시설을 마커로 표시한다. 마커를 클릭하면 시설의 상세정보를 보여준다. 주변 시설(Cul- tural facilities)화면에서 주변 시설(음식점, 병원, 편의점, 은행, 지하철, 병원, 문화시설, 대형할인점, 약국)을 항목별로 1km 내 몇 개가 있는지 그래프를 통해 보여주고 별점으로 만남 위치로 적절한지 표시한다.

2.2 애플리케이션 기능

Table1은 ‘HALFWAY’의 각 기능의 화면을 보여 준다.

Table 1. Related screen.

애플리케이션을 시작하면 스플래시 화면(Splash screen)에서 로고를 2초간 띄워 보여준 후 로그인 화면(Login screen)으로 넘어간다. 로그인 화면은 ‘카카오 API’를 사용해 회원가입을 쉽게 할 수 있다. 로그인 성공 시 메인메뉴 화면(Main menu screen)으로 넘어가 여러 기능을 이용할 수 있다.HALFWAY 아이콘을 누르면 중간지점을 찾을 수 있고, MAP아 이콘 선택 시 지도 기능을 이용할 수 있다.SCHED- ULE 아이콘을 선택하면 달력을 사용하여 일정을 기록할 수 있다.

HALFWAY 아이콘을 클릭하면 처음 역 입력 화면(Station input screen)이 나오는데 역을 입력하면 지도로 입력된 역의 위치를 보여준다.2개의 역을 입력받으면 중간지점 역(Halfway station screen)을 텍스트로 보여주고 중간역과 입력받은 역을 지도에 마커를 통해 상세하게 보여준다(Detailed halfwaysta- tion screen).+아이콘 클릭 시 숨겨져 있던 아이콘들이 나오는데 돋보기 아이콘 클릭하면 중간지점의 1km 반경 내에 있는 주변 시설(Cultural facilities screen)을 마커를 통해 보여준다. 메뉴 아이콘을 클릭하면 원하는 시설만을 보여준다. 상세 보기 화면 (Cultural facilities chart screen)에서 중간지점에서 이용 가능한 시설이 다양한지 Radar Chart를 통해 항목들의 균형이 잘 되어있는지 확인할 수 있다. 노란색 말풍선 아이콘을 누르면 로그인한 사용자의 ‘카카오톡’ 친구들에게 결과를 공유할 수 있다. 달력 아이콘을 클릭하면 SCHEDULE 아이콘에서 설명한 달력과 연결되어 바로 일정을 추가할 수 있다[8,9].

2.3 Use Case 다이어그램

Fig.5는 ‘HALFWAY’의 Use Case 다이어그램으로 사용자가 사용할 수 있는 기능을 보여준다.

Fig. 5. Use Case Diagram.

- 로그인에 성공하면 무조건 메인화면 실행(무조건 실행, include)

- 메인화면에서 중간거리 찾기(Halfway), 캘린더 (Calender), 설정(System) 버튼을 누르면 무조건 실행(include)

- Halfway 실행 시 주변 시설 찾기(Search for nearby facilities) 기능 실행 가능(extend)

- System 실행 시 GPS 설정 변경(GPS Setting) 기능이나 즐겨 찾는 장소(Favorite place) 기능 실행 가능(extend)

2.4 Use Case 명세서

1. 유스케이스명 : 중간지점 찾기

2. 액터명-주 액터 : 사용자

3. 개요 :사용자가 사적 모임을 진행하기 위해 두 위치의 중간지점을 알고자 한다.

4. 사전 조건 :

① 사용자가 두 위치를 알고 있어야 한다.

② 애플리케이션이 설치 및 로그인이 되어있어야 한다.

5. 기본 흐름 :

-1. 사용자가 애플리케이션에 접속한다.

-2. 사용자가 메인화면에서 Halfway 버튼을 클릭한다.

-3. 사용자가 상단에 두 위치를 입력한다.

-4. 시스템은 계산된 중간지점을 화면에 보여 준다.

-5. 사용자가 ‘지도로 보기’ 버튼을 터치한다.

-6. 시스템은 두 위치에서 중간지점까지의 스플라인을 포함하여 지도를 화면에 띄운다.

-7. 사용자가 하단 왼편의 내비게이션 버튼을 터치한다.

-8. 시스템은 중간지점 주변 1km 내 주요 시설에 대한 카테고리를 dialog로 띄운다.

-9. 사용자가 원하는 항목을 선택한다.

-10. 시스템은 해당 항목에 해당하는 시설을 지도 위 마커로 표시한다.

-11. 사용자가 하단 왼편의 +모양의 버튼을 클릭한다.

-12. 시스템은 중간지점 주변 1km 내 상권에 대한 정보를 레이더 차트와 수치로 표시

한다.

6. 대안 흐름 :

-위치가 입력되지 않을 경우

‘위치를 입력해 주세요’라는 알림 메시지를 띄워 입력을 요구한다.

3. 제안한 방법-다익스트라 알고리즘 활용 (Dijkstra Algorithm)

본 연구는 꼭짓점 간의 최단 경로를 찾는 다익스트라 알고리즘을 활용하여 입력받은 두 역간의 최단 경로를 탐색하여 중간지점을 도출하고자 하였다[10]. Fig.6에서 두 입력값은 신길역과 오류동역이고, 이 두 지하철역의 중간지점을 계산한다고 했을 때, 알고리즘은 제일 먼저 종점 방향으로 두 번째 입력값인 오류동역을 만날 때까지 탐색을 진행하게 된다.탐색 이 진행됨에 따라 알고리즘은 Fig.7과 같이 스택에 지하철역 정보가 담긴 노드를 하나씩 삽입하게 된다. 알고리즘이 1번 화살표를 따라 탐색을 하게 되면, 스택에는 제일 먼저 신길, 그 다음 역인 대방, 노량진 순서로 노드가 점차 쌓이게 된다. 이러한 과정으로 오류동역을 만날 때까지 탐색을 진행하게 된다. 탐색이 종점에 다다르면, 종료하게 되는데, 이 경로를 ArrayList에 저장한 후, 스택의 모든 노드를 삭제한다. 그 후, 다음 방향인 2번 화살표 방향으로 동일한 과정으로 다시 탐색을 진행한다. 모든 방향으로 탐색이 끝나고 나면 ArrayList에는 각 경로가 저장되는데, 이 중 가장 크기가 작은 경로인 3번 화살표 방향의 경로가 선택된다. 이후, 해당 경로 내에 있는 노드의 수를 반으로 나누어 계산된 노드를 출력한다.

Fig. 6. Algorithm example 1.

Fig. 7. Algorithm example 2.

4. 연구결과 및 고찰

Table2, Table3은 애플리케이션 ‘HALFWAY’에서 입력받은 두 개의 역과 두 역의 중간지점 위치를 서울교통공사에서 제공해 주는 지하철 노선도를 통해 결괏값을 비교하였다.

Table 2. Results screen comparison 1.

Table 3. Results screen comparison 3.

애플리케이션 내에서 쌍문역과 영등포구청역을 두 입력 위치로 입력했을 때 중간지점으로 종로3가역이 출력된다. 실제 노선도에서 비교를 해보면 쌍문역에서 종로3가역까지 11개 역을 지나고 마찬가지로 영등포구청역에서 종로 3가까지 11개 역을 지난다. 또 다른 경우로, 간석역과 건대 입구를 입력하였을 때 중간지점으로 영등포역이 나온다. 노선도에서 비교하였을 때 중간지점까지의 운임 구간은 각각 16개, 18개 역을 지난다. 이때, 소요 시간의 편차가 10분 이내로 본 애플리케이션인 ‘HALFWAY’의 중간지점 계산 결괏값이 실제로도 정확하다는 것을 알 수 있다.

‘HALFWAY’에서 주변 시설 검색 화면(Cultural facilities screen), 레이더 차트를 활용하여 주변 시설을 수치화한 화면(Cultural facilities chart screen), 중간지점을 카카오톡 메신저로 공유한 화면(Results sharing screen)을 통하여 시중에 출시된 애플리케이션들과 차별점을 두었다. 중간지점을 중심으로 하여 1km 내에 있는 편의시설에 대한 정보를 제공하고 위치를 카카오톡으로 공유할 수 있어 사용자가 쉽고 간편하게 모임을 진행할 수 있다.

5. 결론 및 향후 개발 사항

본 논문은 대중교통을 중심으로 한 중간지점 및 주변 시설 추천 애플리케이션을 제안 및 개발하였다.

현재 본 논문과 유사한 애플리케이션은 많이 출시되었으나 정확한 중간지점이 아니거나 주변 여가 시설을 알려주는 기능이 없는 등의 문제로 인해 사용률이 저조하였다.

이러한 문제 해결을 위하여 서울시에서 제공하는 대중교통 API를 사용하여 상권이 발달하고 대중적인 장소인 지하철역 부근을 중간지점으로 선정하였다. 개발자가 직접 변동 사항을 일일이 수정하지 않아도 자동으로 변동되는 지하철역들이 반영될 수 있도록 API를 사용함으로써 편리함을 추구하였다. 또한, 카카오에서 제공하는 로컬 API를 사용하여 주변 상권에 대한 정보를 제공하였다.

이러한 개발은 사용자에게 적절한 모임 장소인 중간지점을 계산하여 추천해주는 것은 물론, 해당 지점 주변의 편의시설에 대한 정보까지 제공하여 사용자가 모임을 진행하면서 불편함을 해결했다. 특히, 해당 지점 부근의 상권 정보를 한눈에 알아볼 수 있도록 그래프 및 수치로 제공하여 사용자가 해당 정보를 따로 찾아보지 않아도 해당 정보를 얻을 수 있도록 하였다.

향후 연구로는 커뮤니티 메뉴 및 해당 시설에 대한 후기 창과 같이 주변의 편의시설 등에 대해 사용자가 평가할 수 있는 기능을 제공하여 사용자들이 더욱 만족스럽게 만날 수 있도록 돕는 기능을 개발하는 것이 필요하다. 또한, 수도권 대중교통뿐만 아니라 전국 대중교통을 반영하여 타깃층을 넓히고, 버스와 택시 등 타 대중교통 정보가 반영된 정확한 중간 지점 계산 결과를 위한 추후 개발이 요구된다.

References

  1. H.J. Bae, J.N. Song, Y.J. Lee, and J.W Lee, "The Implementation of a User Location and Preference-based Appointed Place Recommendation Mobile Application," KIISE Transactions on Computing Practices, Vol. 21, No. 6, pp. 403-411, 2015. https://doi.org/10.5626/KTCP.2015.21.6.403
  2. Ministry of Culture, Sports and Tourism, "2019 National Leisure Activity Survey," mcst 2019.
  3. 89% of office workers are concerned about choosing a place to make a promise(2015), https://www.newsquest.co.kr/news/articleView.html?idxno=43010 (accessed April, 13, 2020).
  4. National Leisure Activity Survey Report (2019), file:///C:/Users/wldus/Downloads/2019+%EA%B5%AD%EB%AF%BC%EC%97%AC%EA%B0%80%ED%99%9C%EB%8F%99%EC%A1%B 0%EC%82%AC_%ED%95%A9%EB%B3%B8_0131.pdf (accessed April, 13, 2020).
  5. M.W. Kim, H.S. Hoe, S.H. Mun, and Y.C. Chi, "Auto Appointment Creation Using Location Based Service in Smart-Phones," Journal of Korea Multimedia Society, Vol. 13, No. 1, pp. 100-102 2010.
  6. Find Midpoint Web 'YaManana'(2019), https://github.com/mandooro/YaManNa (accessed May, 4, 2020).
  7. Daum Map Android API [Online]. Available: http://apis.map.daum.net/android/guide/ (accessed May, 7, 2020).
  8. S.C. Cho, Creating a Live App using Android Studios, YoungJin.com Publishers, Geumcheongu, Seoul., 2018.
  9. G.S. Nam, Java's Essential Foundation for First-time Learning of Coding, Dough Publishers, Yongin-si, Gyeonggi-do., 2019.
  10. O. Kwon and H. Cho, "Design and Implementation of Real-time Shortest Path Search System in Directed and Dynamic Road," Journal of Korea Multimedia Society, Vol. 20, No. 4, pp. 649-659, 2017. https://doi.org/10.9717/kmms.2017.20.4.649