2022 캡스톤 디자인 경진대회 (2022년 1학기 1차 예선)

  • 시티하이커

    팀장
    진겸 (컴퓨터공학부 | 4학년)
    팀원
    국태림 (소프트웨어학부 | 3학년)
    김희민 (소프트웨어학부 | 3학년)

작품영상

시티하이커
  • 개요
  • 당신의 새로운 등산 메이트, 시티하이커 


    29832f3d1277a53ef0c25afc27bab826_1638541526_695.png

     그 어느때 보다 아웃도어 스포츠에 대한 관심이 높아지고 있는 요즘, 등산을 더욱 쉽고, 재밌게 접할 수 있는 서비스, 여러분의 하이킹 메이트가 되어줄 수 있는 가장 재밌는 서비스인 "시티하이커" 를 소개 합니다. 


     등산을 처음 시작 할 때, 어떻게 해야 하는지 막막 했죠? 등산이라는 스포츠에 대한 이미지와 높은 베리어 때문에 이미 경험이 많은 부모님과 함께, 혹은 회사의 팀장님과 함께, 아니면 등산 광팬인 친구를 꼭 한 명 데려야만 했습니다. 그게 아니라면 하루 종일 인터넷을 뒤져가며 어떤 코스를 어떻게 가야할지 스스로 다 찾아보면서 갔다면 이제 더이상 그럴 필요가 없습니다. 시티하이커는 여러분의 취향에 따라, 등산 레벨에 따라 맞춤형으로 등산 코스를 추천 시스템이 추천 해 줍니다.


     맨 처음 앱을 깔면 온보딩을 통해 입력한 정보를 바탕으로 위치 기반, 시간대 기반, 날씨 기반으로 종합적으로 모든 피쳐를 통해 등산 코스를 추천 해 줍니다. 그 뿐만이 아닙니다. 지속적으로 레벨 학습을 통해 추천을 해주기 때문에 앱을 처음 썼을 때도, 1년 후에도 항상 재밌게 시티하이커와 등산을 할 수 있습니다. 



    개발 동기


    ​ 도시에 살고 있는 20, 30대(MZ 세대)에게 하이킹은 새로운 취미로 부상하고 있습니다. 인스타그램의 #등산 헤시태크의 월간 추이만 봐도 2019년에 비해 2020, 2021년 매우 급증을 하였고, 블랙야크가 운영하는 등산 커뮤니티 BAC (블랙야크 알파인 클럽의 2019년에 비해 2배 이상 회원수가 증가 하는 등, 하이킹 자체에 대한 수요는 최근 wellness 라는 트렌드와 함께 기하급수적으로 증가를 하고 있음을 알 수 있습니다.


     하지만 기존의 앱들 같은 경우 초보 등산가를 위한 기능들 보단 기존의 등산 유저를 위한 유틸리성 도구 및 커뮤니티인 경우가 대부분 입니다. 리서치 결과 시장에서 가장 인기가 있는 앱인 BAC, ramblr 등의 앱들은 등산 코스에 대한 단순한 정보와 등신 기록 서비스만 제공 할 뿐 등산을 할 수 있도록 처음 부터 앱이 주체가 되어 도와주는 기능들은 있지 않습니다.


     따라서 저희는 서울에 거주하고 있는 2-30대 중 아웃도어 스포츠, 특히 하이킹(등산)에 입문 하려는 일반인 21명을 상대로 수요 및 필요성 조사를 한 후, 시장에서 필요로 하는 모델에 대한 가설을 세운 후 프로덕트 유저에 대한 페르소나를 지정 할 수 있었습니다.



    29832f3d1277a53ef0c25afc27bab826_1638541908_4361.png


     이런 페르소나를 통해 기존 앱들이 부족했던 문제점들을 확인 할 수 있었으며, 이는 기존 앱들은 불편한 UX와 해당 문제점들을 해결하기 위해 기존에 B2B SaaS 서비스에서 소프트웨어 자체에 대한 진입장벽을 확 낮추기 위해 사용하는 "Onboarding" 기능을 도입 했습니다.


     이런 온보딩 기능과 자체적인 알고리즘으로 설계한 추천 시스템을 활용해 기존에 어렵게 여겨졌던 하이킹이라는 스포츠를 MZ세대에게 더욱 잘 다가가게 했습니다. 


  • 세부내용
  • 앱의 전체적인 구현 설계도 


    ​ 시티하이커는 iOS와 Android 플랫폼에서 공동으로 동작하는 앱으로서, 빠른 시일 내에 크로스 플랫폼 작업을 하기 위해 클라이언트에는 React Native를 활용하였으며, One Stack, 배포의 용이성 및 개발자 에코시스템을 최대한 활용 하기 위해 Server는 Node.js 런타임을 선택 했습니다. TypeScript 를 활용해서 그 위에서 기본적인 Spring 구조를 mocking 한 프레임워크인 Nest.js를 server framework로 활용 했습니다. 또한 아직 사용자 수가 많이 없으며, 서버 구조가 단순함을 이용하여 Serverless (AWS Lambda) 구조를 적극 활용 했습니다. 이를 활용해서 따로 computing machine 을 띄울 필요가 없었으며, 비용을 절감 할 수 있었습니다.


     기본적으로 Client - Server 구조를 통해 REST API 를 사용하여 정보를 호출해서 불러옵니다. Node.js 는 AWS Lambda 위에서 돌아가며 DB의 경우 Postgres를 사용하여 RDS 위에 있습니다. 서버 코드의 경우 Github code repository 에서 코드를 push를 하면 Github CI 가 돌아가도록 수정을 했고 Client 코드의 경우 빌드를 다시 해야 하는 경우 CI를 통해 Github Actions를 트리거 해서 빌드를 돌린 후 firebase deploy 를 통해 배포를 하게 됩니다.


     만약에 빌드를 다시 돌리지 않고 JavaScript(TypeScript) 파일만 수정을 한 경우 해당 파일만 빌드를 한 후 bundling을 통해 OTA(over the air) 를 통해 배포를 하게 됩니다.




    ​기존 등산로 데이터 수집 및 데이터 가공  


     등산로 데이터는 산림청에서 공공데이터로 개방한 등산로 정보 데이터를 사용했습니다. 기존 데이터 는 지리정보시스템(GIS) 분야 등에서 주로 사용하는 파일 포맷인 shape파일이었습니다. 원본 데이터론 각 산 데이터를 Graph형태로 나타낼 수 없었기 때문에 가공 절차를 거쳤습니다. 크게 산 데이터, 산의 시종점/분기점 데이터, 산의 길 데이터로 나눠 데이터를 가공했습니다.

     

     산 데이터의 경우 mountainDB.js 파일에 들어있습니다. 각 산들의 산 고유번호, 이름, 대표좌표, 이미지, 선호 시간대, 설명 등으로 이루어집니다. 


     산의 시종점/분기점 데이터의 경우 mntSpotDB.js 파일에 들어있습니다. 각 산별로 존재하는 시종점/분기점의 좌표, 고유번호, 종류 등의 데이터가 있습니다. 


     산의 길 데이터는 mntSectionDB.js 파일에 들어있습니다. 산의 전체 길은 여러 섹션으로 이루어져있습니다. 산의 시종점/분기점을 Graph의 vertex라고 했을 때, 섹션이 각 vertex를 잇는 edge입니다. 섹션의 고유번호, 이름, 길이, 산행시간, 통제여부, 폐쇠여부, 좌표 등을 정리한 파일이 mntSectionDB.js입니다. 


     섹션은 꽤 많은 좌표들로 이루어져있기 때문에 섹션마다 고유의 js파일을 만들어 mntSectionDB.js에서 해당 섹션 js파일을 불러오도록 했습니다. 


     


    ​등산 추천 모델 설계 


    ​ 우리 팀의 목표는 최대한 사용자가 꼭 맞는 등산 코스라 생각할 수 있는 등산 코스를 추천하는 것입니다. 그렇기에 사용자와 주변 환경에 대한 여러 데이터를 이용해 등산 코스를 추천하죠. 


     가장 먼저 Geolocation 위치정보 API를 통해 불러온 사용자의 위치를 기반으로 10km이내의 산만 추천 대상으로 뽑습니다. 사용자를 초보 등산가로 가정하고 우선 등산이 친숙하고 가까운 운동임을 인지할 수 있도록 가까운 산이 더 높은 적합도 값을 갖게 됩니다. 


     추천 대상으로 선정된 산에서 등산 코스를 추출합니다. 등산로 추출 알고리즘은 DFS 알고리즘을 기반으로 합니다. 산 데이터를 인접 리스트 형태로 표현할 수 있는 Graph구조로 앞서 가공했기 때문에 한 산에 대한 DFS 알고리즘의 시간 복잡도는 O(|vertex|+|edge|)입니다. 아무리 큰 산이라도 사용자가 불편함을 느낄 수 없을 정도의 계산 속도를 보장합니다.


     한 산에 대해 등산 코스들이 모두 추출되었다면 적합도 점수를 매깁니다. 이때 사용자의 평소 운동량과 선호도 데이터, 그리고 과거 등산 기록 데이터를 사용합니다. 사용자가 온보딩에서 입력한 내용을 수치값으로 바꿔 저장하고, 과거 등산 기록을 레벨과 경험치 값으로 수치화합니다. 이 값을 가중치로 하여 사용자에게 가장 적합한 시간대, 난이도, 코스 길이, 산행 시간을 구합니다. 이 값들을 기준으로 각 등산 코스의 속성 값을 비교하여 기준 값에서 가까울 수록 적합도 값이 높아지고, 멀어질 수록 적합도가 낮아집니다. 이 과정에서 일정 기준보다 낮은 적합도를 가진 등산 코스가 걸러집니다. 모든 추천 대상 산들에 대해 추천 알고리즘을 적용한 후 나온 등산 코스들을 적합도에 따라 순위를 매겨 상위 20개의 등산 코스만을 사용자에게 제공합니다.


     사용자가 등산을 할 수록 기존에 입력된 사용자 취향 값과 등산 기록이 업데이트 되기 때문에 사용자의 높아지는 등산 실력에 맞춰 등산 코스를 추천할 수 있습니다.


  • 기대효과
  • 실생활의 문제를 소프트웨어를 통해 해결 및 가치 창출


    ​ 시티하이커는 단순한 유틸리티성 앱이 아닙니다. 그동안 파편화 되어 있던 등산 코스의 정보를 모아, 유저 데이터와 결합하여 높았던 하이킹의 진입장벽을 낮추어 기존에 풀지 못했던 문제를 소프트웨어를 통해 해결 합니다. 이는 하이킹 영역에서는 누구도 타겟팅 하지 않았던 영역으로 데이터와 어플리케이션의 결합을 통해 새로운 가치를 창출해 냅니다.



    등산 커뮤니티의 성장 동력 제공 


     온보딩을 통한 낮은 진입장벽과, 게이미피케이션 레벨 요소를 통한 앱의 리텐션이 증가를 통해 이와 함께 앱 내의 등산 커뮤니티를 만들 수 있습니다. 이러한 커뮤니티는 앱 내의 각 요소와 직접적인 결합을 통해 앱 내에서 다른 "등산러" 들과 함께 같이 하이킹을 할 수 있는, 진짜 하이킹 메이트를 찾을 수 있는 앱이 될 수 있습니다. 서로 등산 레벨 공유, 실시간 코스 함께 하기 등의 기능들을 통해, 더욱 앱의 리텐션을 높일 수 있습니다. 



    새로운 시장 발굴 및 확장  


     앱 내의 커뮤니티를 통한 광고 모델 및 앱 내의 커머스를 통한 상품판매를 통한 비즈니스 모델을 만들어낼 수 있습니다. 등산 용품의 구매 주기가 낮음을 감안하여 커머스의 매출이 제한적일 지라도 특정한 용품의 재구매성 및 위치 기반의 등산 전후 카페, 식당, 술집 추천 등 다양한 수익모델과 연계시킬 수 있습니다. 당근마켓과 오늘의집의 수익모델의 특정한 부분들을 결합하면 충분한 BM 생성이 가능 합니다. 

  • 결과물
  • 온보딩  


     


    ​ 시티하이커를 처음 시작하는 사용자는 온보딩에서 5개의 질문에 답하게 됩니다. 사용자의 체력 수준, 운동 성향과 관련된 이 질문들은 사용자를 이해하고 사용자에게 맞춤 큐레이션을 제공하는 데 활용됩니다. 간단한 질문에 대답하는 것으로 시작되는 시티하이커의 추천. 앞으로 시티하이커와 함께 등산하며 당신을 더 알게 해주세요. 더 멋진 추천을 해드릴게요. 



    날씨, 위치, 사용자 선호도를 고려한 종합적인 등산 코스 추천



     등산을 할 때 날씨는 아주 중요한 조건입니다. 안전과 직결된 문제이기도 하고, 날씨에 따라 등산하기 좋은 산이 달라지기도 하니까요. 그래서 시티하이커는 사용자에게 날씨 정보를 제공합니다. 


     아무리 좋은 산이라도 너무 먼 곳에 있다면 선뜻 가기 어려운 노릇이니 사용자의 위치 정보도 고려합니다. 우선 가까운 산부터, 현재 위치 기준 10km 이내 있는 산에서 등산 코스를 추천합니다. 


     날씨와 위치만 고려한다면 아직 부족하죠. 온보딩 응답과 등산 기록에서 얻은 데이터를 바탕으로 사용자 선호도를 파악하고, 난이도나 소요 시간 등 여러 부분에서 사용자에게 가장 적합한 등산 코스를 선별합니다. 


     이렇게 시티하이커는 사용자가 가장 즐거운 등산 경험을 할 수 있도록 날씨와 위치, 사용자 선호도를 모두 고려한 종합적인 추천 및 큐레이션을 제공합니다.



    실시간 등산 가이드



     등산 중에도 시티하이커는 사용자와 함께합니다. 지도 상에 사용자가 가야 할 길을 표시하고, 사용자의 현재 위치가 어디쯤인지도 보여줍니다. 산길을 잘 모르는 초보자라도 안전하게 산행할 수 있도록 말이죠. 또한 시티하이커는 사용자의 총 이동 거리와 소비 칼로리, 페이스를 실시간으로 계산하여 제공하고, 지금까지의 소요 시간을 측정합니다. 사용자는 앞으로 남은 등산 시간을 가늠하거나 자신의 운동량을 파악할 수 있습니다. 자신의 페이스를 확인하며 동기부여를 받을 수도 있죠. 



    등산 후 레벨 트레킹 기능 


     등산을 성공했다면 사용자의 실력이 높아졌겠죠. 시티하이커는 이를 반영하고 사용자가 등산의 즐거움을 더 크게 느낄 수 있도록 레벨링 시스템을 지원합니다. 어려운 등산 코스를 완주할 수록 더 높은 경험치를 얻을 수 있습니다. 하지만 시티하이커는 우선 사용자의 실력에 맞는 등산 코스를 더 추천한답니다. 사용자의 안전도 관련이 되어 있으니까요! 


중앙대학교 다빈치 sw tech fair 참가신청 닫기