brunch

You can make anything
by writing

C.S.Lewis

by 티맵모빌리티 Mar 31. 2022

내비 앱 만들기 어렵지 않아요- 티맵 SDK만 있다면!

8편 – 고생은 티맵이 할게, 앱은 누가 만들래?

Chap 1. 내비게이션 앱을 만드는 험난한 과정(=고생은 티맵이 할게요)

1-1. 전국의 지도 데이터를 모으고 정리한다

1-2. 위치를 측정하는 기술을 연구한다

1-3. 위치 정보와 도로를 매칭한다: Map Matching

1-4. 실시간 데이터 적용의 어려움ㅠㅠ

Chap 2. 내비 앱 만들기 어렵지 않아요- 티맵 SDK만 있다면!

2-1. 쉽고 간단하고 재사용할 수 있게

2-2. 기초부터 탄탄하게

Chap 3. 티맵 SDK 이렇게 더 좋아집니다

3-1. 지원 Platform의 확장

3-2. TMAP의 upgrade와 함께 기능 제공

TMAP은 네이트 드라이브부터 시작해 20년간 서비스를 해왔습니다. 보다 안전하고 편리한 서비스를 위해 노력한 결과, 현재 1300만 명의 가입자들이 월평균 47.7억 km를 티맵으로 주행하고 계시네요:)(2021.06 기준)


티맵은 고객뿐만 아니라 TMAP의 기능을 보다 잘 활용하고자 하는 개발자들을 위한 TMAP API 제공에도 많은 노력을 기울여 왔습니다. 그래서 이번 썰에서는 개발자분들을 위한 노력 중의 하나인, App에서 직접 Navigation을 쉽게 구현할 수 있도록 하는 TMAP SDK 개발기를 풀어보려 합니다.


Chapter 1. 내비게이션 앱을 만드는 험난한 과정(=고생은 티맵이 할게요)


내비게이션 App을 만드는 데에는 생각보다 필요사항과 고려사항들이 많습니다.


먼저 복잡한 지도 데이터가 필요하고, 이 지도 데이터 위에 위치를 획득하는 기술 및 방법을 알아야 하며, 현장 상황에 따른 실시간 데이터 사용의 복잡성 등도 해결해야 하죠.


지금부터 TMAP이 어떻게 내비게이션 App을 만드는지에 대해 소개하겠습니다.


1-1. 전국의 지도 데이터를 모으고 정리한다

전국의 지도/도로에 대한 사전 정보 수집과 정제가 필요합니다.


현재 대한민국에는 112,977 km의 도로가 마치 거미줄처럼 엮여 있으며(2020년 기준), 도로의 종류에 따른 제한속도, 진행 가능 방향 등이 모두 다릅니다. 같은 종류의 도로라 하더라도 안내가 필요한 카메라, 과속방지턱, 사고다발구간 등의 정보들이 또 다르고요. 수많은 데이터가 존재한다는 거죠.


TMAP은 이런 정보들을 수집하고 나름의 규격으로 정리해 지도를 만들고, 이를 기반으로 내비게이션 안내를 수행합니다. 역으로 내비 주행으로 수집된 여러 도로 교통 정보들을 서버에 저장하고요.


이처럼 정보들을 잘 정리해 효율적으로 전달·처리할 수 있는 제반 환경을 구축함으로써, 티맵은 아래와 같은 교통정보 화면을 표출하게 됩니다.


1-2. 위치를 측정하는 기술을 연구한다

흔히 GPS(Global Positioning System)라 불리는 기술을 바탕으로 위치 측정, 즉 측위를 하게 되는데요. Mobile Device의 OS를 제공하는 Google, Apple에서는 GPS 기술과 함께 WIFI, GPS 등의 센서 정보를 종합한 fused location 방식으로 위치 정보를 제공하게 됩니다.


이 두 개의 측위 기술은 나름대로의 장단점을 가지고 있습니다. 정확도가 올라가면 전류 소모가 늘어나고, 전류 소모를 줄이려면 정확도를 낮춰야 하는 상황이 벌어지죠. 때문에 상황에 따라 적절한 기술을 선택하고 잘 운영하는 노하우가 필요합니다. 또한 이 두 기술이 동작하지 않는 상황이 발생할 수 있으므로 측위에 대한 지속적인 연구개발도 필수이고요.


1-3. 위치 정보와 도로를 매칭한다: Map Matching

측위된 위치정보를 현재 지점에 주행 중인 도로(위 과정에서 만들어진 도로)와 매칭(Matching)해야 지도 기반의 내비게이션 안내가 가능한데요. 이처럼 측위된 정보를 기반으로 현재 지점을 지도에 매칭하는 과정을 보통 ‘맵 매칭(Map Matching)’이라고 합니다.


맵 매칭은 실시간으로 전달되는 위치정보의 위치, 방향, 속도 등을 고려해서 지도상에 가장 적합한 위치를 찾아 매칭하게 되고, 사용자들은 매칭된 정보를 기반으로 TMAP의 여러 안내를 받을 수 있게 됩니다.  

(MapMatching 과정에 대한 Flow)
(위 Flow대로 동작을 보여주는 gif)
1-4. 실시간 데이터 적용의 어려움ㅠㅠ

실제 주행에서는 여러 가지 예상치 못한 상황들이 벌어질 수 있습니다. 터널/지하차도 같은 음영지역에서 GPS 정보가 잡히지 않는다거나, 오차가 큰 위치 데이터가 전달되는 등 위치 정보가 정확하지 않을 때 발생하는 문제를 어떻게 처리할지에 대한 고민이 필요합니다.


TMAP은 GPS가 안 잡히는 터널 내에서도 안내가 가능한 기능을 곧 선보일 예정인데요. 일단 현재는 터널 및 지하차도를 만나면 마지막 속도를 기반으로 가상주행을 통해 ‘전방에 카메라 정보가 있는지’, ‘빠져나가야 하는 IC/JC가 있는지’, ‘위험한 상황이 있는지’ 등의 정보를 안내하고 있습니다.


TMAP은 이러한 어려움들을 끊임없이 해결하며 내비게이션 서비스를 해왔고 앞으로도 그럴 것입니다:)

(지하차도에서 정확하게 전달되지 않는 위치정보의 예시)

Chapter 2. 내비 앱 만들기 어렵지 않아요- 티맵 SDK만 있다면!

2-1. 쉽고 간단하고 재사용할 수 있게

자, 챕터 1까지는 티맵이 얼마나 힘들게(?) 내비게이션 서비스를 만드는지에 대해 설명을 드렸다면 이제 본격적으로 SDK를 소개해야겠죠?


SDK의 개발은 “어떻게 하면 개발자 분들이 위와 같은 복잡한 내용을 고민할 필요 없이 쉽게 Navi app을 만들 수 있을까?”하는 고민에서 시작됐습니다.


우리가 자동차의 구조는 모르지만 핸들 잡고 액셀과 브레이크를 밟으며 운전을 할 수 있는 것처럼, 내비게이션 기능에 대해 몰라도 TMAP SDK를 사용하기만 하면 내비 서비스를 제공할 수 있도록 만들자!


그렇다면 내비게이션 서비스에서 필수적인 것은 무엇일까요?


‘원하는 지역에 대한 경로 탐색’‘탐색된 경로를 주행하는 기능’입니다. 따라서 다른 부수적인 내용들은 모두 SDK 내부로 감추고 사용자에게는 필수적인 기능에 대한 API만 제공함으로써, 보다 간단하고 직관적으로 이용할 수 있는 interface를 정리해 lifecycle을 만들었습니다.

(TMAP SDK의 LifeCycle)

예를 들면, 내비게이션 안내 화면에서 필수적인 UI는 TBT(Turn By Turn), SDI(Safe Drive Information), 잔여거리, 예정 시간 등인데요. SDK 사용자는 해당 정보가 어떤 로직으로 구현되고 갱신되는지까지는 알 필요가 없겠죠. 그래서 해당 정보가 갱신되면 이를 표현하기만 하면 되는 형태를 고민했고, LiveData를 활용해 갱신 시점에 맞춰 전달 업데이트되는 형태로 구현했습니다. 마치 자동차의 대시보드에서 정보가 갱신되듯이 말이죠.

(LiveData를 통해 갱신되는 화면 예시)

기능과 UI가 분리되어 내비게이션 기능을 추가할 때마다 UI 관련 기존 코드를 수정하는 일이 없어졌고, 좀 더 쉽게 UI를 구성할 수 있는 이점이 생겼습니다.


2-2. 기초부터 탄탄하게

모든 SDK가 그러하듯 TMAP SDK 역시 UnitTest를 기반으로 기능들을 추가/수정하고 있습니다.


UnitTest의 구성이 단순 기능 test가 아닌 수많은 현장의 상황을 담아야 하기 때문에 쉽지는 않은데요. 그래서 최대한 현장 상황을 반영한 test를 만들기 위해 실제 field에서 수집한 데이터와 동작 시나리오를 녹여 다양한 test case를 만들고 이를 활용하고 있습니다.

(TestCase 사용 예시)

Chapter 3. 티맵 SDK 이렇게 더 좋아집니다


3-1. 지원 Platform의 확장

Android에서 서비스를 제공하기 위한 SDK를 시작으로, iOS용 SDK도 개발 중입니다. 자동차 제조사에 탑재되는 TMAP 인포테인먼트 (Infotainment)에서도 차량에 필요한 다양한 서비스 기능 개발을 좀 더 쉽고 효율적으로 할 수 있도록 TMAP SDK가 적용될 예정이고요. 글로벌한 TMAP이 되기 위해서 한국어로만 제공하고 있는 TTS(Text To Speech)의 script에 다국어 기능을 적용하는 개발도 진행 중입니다.


이처럼 다양한 내비게이션 서비스를 보다 쉽게 이식할 수 있는 방법에 대해 지속적으로 고민하고 적용할 예정입니다.

 

재규어 랜드로버 TMAP (출처: https://tmap.co.kr/tmap_for_car/about_service/jaguar.do)


3-2. TMAP의 upgrade와 함께 기능 제공

지난 테크 브런치 2편에서 소개되었던 터널 내의 안내를 위한 기술이나, 최근 TMAP에 탑재된 신호등 잔여 시간을 표시하는 기능 이외에도, TMAP에서 보다 안전하고 편리한 내비 서비스를 제공하기 위해 새로운 기술 및 데이터의 적용에 힘쓰고 있는데요.

서울시와 함께하는 신호등 잔여시간 표출 (출처 : https://m.etnews.com/20210608000240)


이렇게 TMAP에 적용되는 새로운 기능 모두를 SDK를 통해 여러 서비스에서 손쉽게 적용할 수 있도록, 나아가 서비스의 품질을 향상시킬 수 있도록 계속 노력할 예정이니 앞으로도 TMAP에 많은 관심 부탁 드리겠습니다. 긴 글 읽어주셔서 감사합니다!


매거진의 이전글 주행 데이터로 실시간 핫플 랭킹 서비스 개발하기
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari