네비게이션 어플리케이션 개발

flutter 개발자·2023년 5월 24일

flutter

목록 보기
3/3

들어가기

지도 기능 위주로 서비스를 파악하기 위해
아래의 몇가지를 중점적인 목표로 잡고 아래의 글들을 작성하였다.

  • Beta 버전, Map 위주 소스 분석 (완료)
  • 구글 맵 국가별 제공 기능 분석 (완료)
  • 기타 다른 지도 API 제공 기능 분석 (완료)
  • 전체 프로젝트 개발 방향 제안 (완료)
  • 앞으로 사용할 Map 패키지 제안 (완료)

간단한 서비스 분석

  • 국내뿐아니라 세계적으로 제공할 서비스이기 때문에 서버와 어플리케이션에서 다국어 지원, 날짜, 시간, 통화, 네트워크 상태 등 고려해서 개발해야 함
  • 사용자의 안전주행이 필수인 서비스이기 때문에 속도, 이동거리, 정확도, 변위값, 국내·외의 도로교통 정보 형식을 통일하는 등의 효율적으로 개발 및 관리하는 것 중요
  • 코인 거래도 가능한 서비스이기 때문에 비동기 처리 주의
  • 신규 서비스이기 때문에 앞으로 운영 사항들이 많이 수정될 가능성이 높음
  • 8월 출시 예정이라고 함

네비게이션 기능 포지셔닝

현재 기획된 네비게이션 서비스 수준으로는 주행기록밖에 남기지 않기 때문에, 사용자들은 타 네비게이션 어플리케이션과 공존해서 사용할 수 밖에 없다고 생각한다.
기획상으로는 주행 중 타 어플리케이션(타 네비게이션 어플 포함)을 열면 안전 운전점수가 감소된다. 이 부분에 대한 구체적인 기획이 추가되어야 할 것 같다.
예상되는 필요 기능들은, 도로 정보 확인, 주행 기록, 타 어플리케이션 실행 확인, 주행 목록 확인, 백그라운드 실행 등의 기능이 필요하다.

Beta version 에서 사용한 Map package 분석

기존에 개발된 프로젝트에서 사용한 지도 관련 패키지 목록이다.
권한 등의 간단한 패키지들은 생략했다.

1) flutter_map

  • Open Street Map 패키지이다.
  • 국내, 국외 타일 url 분기 되어 있음
  • 군사시설로 인해 우리나라는 교통 데이터를 제공 받기 힘듦
  • 간단하게 위경도, 마커, 폴리라인, 원 등 지도 위 표시 용도로 사용
  • 지도에 대해 처리할 수 있는 권한이 굉장히 많다
  • 사용자의 목적에 맞게 다양하게 처리할 수 있다

2) flutter_background_geolocation pub.dev

  • 위치 기록 라이브러리
  • 배터리 절약, 동작 감지 센서 탑재, 백그라운드 위치 추적, 지오펜싱 기능

기존 패키지들을 사용하는 것이 BEST 인가?

네비게이션 어플리케이션 개발을 위한 flutter 커뮤니티 추천 지도 패키지Native단에서 사용할 수 있는 인기 네비게이션 API글들을 참조하여 정리해보았다.

Google Map API

세계 지도를 동일한 사용 환경으로 제공하면서 많은 지도 기능들을 제공받으려면 GOOGLE MAP이 베스트이다.
flutter에서도 패키지로 제공해주는 구글 API부터 안전운행에서 필요한 정보들을 얼만큼 제공해주는지 위주로 분석해보았다.

1. 국가별 제공 서비스

  • 각 국가별 제공되는 위치 기능표를 보면 미국을 포함한 몇몇 국가들은 전체 기능을 제공하지만 대한민국의 경우 극소수의 기능만 제공해준다. (아래 캡처 이미지 참조)


...

2. 구글의 대한민국 제공 서비스 (굉장히 열악함)

위키에서 현시점 대한민국 구글 지도에서 제공하는 상세 기능 현황에 대해서 확인할 수 있다.
링크를 보면 확인할 수 있듯이, 국내에서는 많은 서비스들이 미지원되고 있다.
나중에 기능 추가 시에, 여기에 들어가서 지원 여부를 확인하면 될 것 같다.

3. 구글맵의 도로별 속도제한 API

우리가 가장 중요하게 필요하는 기능인 가장 가까운 도로의 제한 속도 API 사용법 에 대해서 확인할 수 있다. 제공되는 국가이기만 하면 간단하다. 해당 문서를 참조하여 추후 미제공 국가와 위치정보 제공 형식을 최대한 통일하려고 한다.

국내 도로교통정보 처리 방안

1. Google Map 위에 국내 노드링크 별도 처리

어떤 지도 API를 쓰더라도 국내 맵 API 가 아닌 이상, 국내 도로교통 정보를 받아올 수 없기 때문에 국토교통부가 제공하는 도로 정보를 데이터베이스화 시켜서 작업하는 방법에 대해 정리해보았다.

1) 내부 데이터베이스화

내부 데이터베이스는 그 어떤 것보다 속도가 빠르며, 서버 트래픽도 발생하지 않는다는 장점이 있지만, 주기적으로 정보를 업데이트 해줘야하는 단점이 존재한다.
개발 순서는 아래와 같다.

1. 국토교통부가 제공하는 노드링크 데이터 다운로드

한국 도로교통정보에 한국의 도로 정보(노드 : 교차로 정보, 링크 : 도로 정보)를 지리데이터 형식인 SHAPEFILE 파일 형식과 api 형식으로 제공한다.

SHAPEFILE 파일 형식이란?

국토교통부에서 제공해주는 파일을 다운받아서 열어보면 같은 이름의 여러 확장자 형식들의 파일들이 나열되어 있는데 관련문서를 찾아서 읽어보니, 여러 확장자 파일이 하나로 합쳐져서 돌아가는 공간데이터라고 한다. 처음 알았다.

2. sqlite 데이터베이스에서 좌표값으로 가장 가까운 도로정보 쿼리하기

어플리케이션 내부 데이터베이스를 생성하고 사용하기 위해 SQLite 패키지를 사용할 예정이다. 우선 컴퓨터에서 데이터베이스를 만들고 테스트해보기 위해, PC SQLite 무료 프로그램인 DB Browser을 설치하여 테스트를 진행했다.

3. 서버 및 모바일에 최신 지리정보 관리 필요

대략 1~2달 단위로 지리 정보가 갱신된다. 주기적으로 서버에 데이터베이스화 후, 단말기 내부 SQLite 데이터베이스에 정보를 업데이트 하는 작업이 필요하다.
사용자가 어플리케이션 실행 시, 서버 정보과 휴대폰 정보 비교 후, 다를 경우 최신 정보로 업데이트 하도록 SQLite 버전 관리 작업이 필요하다.

2) 국토교통부에서 제공하는 API 사용

노드
https://www.data.go.kr/data/15057463/openapi.do?recommendDataYn=Y
링크
https://www.data.go.kr/data/15056674/openapi.do?recommendDataYn=Y

2. 국내 지도 API 사용

국내 API의 장점은 구글 맵에서 제공하지 않는 많은 데이터들을 사용자에게 제공해줄 수 있다. 제한 속도를 포함한 기본적인 국내 도로 교통 정보 뿐 아니라 빠른 길 추천 및 현재 길 막히는지 여부까지, 한번 개발해두면 쉽게 관리 및 확인할 수 있다.

1) 카카오 맵 특징

flutter kakao_flutter_sdk 패키지

  • 카카오에서 직접 제공하는 flutter 패키지 이지만, 네비게이션의 모든 기능을 포함한 sdk 형태가 아닌 네비게이션 앱을 실행시키는 단순한 API이다.
  • 내 어플리케이션 내에서 Kakao 지도와 가까운 도로의 제한속도를 제공받고 싶은 경우, Kakao Navi sdk with UI를 사용하여 각 네이티브별로 개발을 진행해야 한다.
    Android docs || iOS docs

TMAP API 연동 고려

  • Road API를 사용하면 가까운 도로의 제한속도를 던져줌. 가능한 경우, Google MAP API와 연동해서 개발하거나(네이티브별 TMAP SDK 내장할 필요 없음/폴리라인 등의 기능은 구글맵 제공 사용), 각 네이티브별로 TMAP NAVI를 사용하여 개발해야 함.

2) 티맵 특징

3) 기타 (네이버, 아이나비..)

  • 카카오나 티맵에 비해 우리 서비스에 적용하기 위한 큰 메리트를 찾지 못함

결론

flutter 커뮤니티 추천 지도 패키지

  • flutter_map : 사용자 최적화하여 다양한 기능을 제공할 수 있도록 권한을 많이 주지만 그만큼 직접 구현해야할 내용이 많음
  • google_maps_flutter : 해당 라이브러리는 google map을 사용하여 사용자에게 다양한 기능을 제공할 수 있음. 지도 에니메이션 구축 등
    추후 본격화된 네비게이션 기능 개발 시, 조금 더 편하게 구현가능하며 유용하게 사용될 수 있음.
  • geolocator : 위치 정보를 받아오는 가장 많이 사용하는 패키지
  • flutter_background_geolocation : 꽤 많은 기능들이 추가된 위치정보 사용 패키지

현재 개발하는데 걸리는 시간과 비용을 고려할 때, 가장 베스트는 flutter 에서 google_maps_flutterflutter_background_geolocation를 사용하며, 국내 도로교통정보는 국내 노드링크 API를 사용하여 실시간 도로별 제한속도를 받아와서 처리하는 것이다.

마치며..

Native에서 저렴하게 사용가능한 꽤 괜찮은 지도 API

비용이 부담스러울 때, Native에서 저렴하게 사용가능한 나름 괜찮은 지도 API들이 있다. 간단하게 홈페이지에서 둘러보았는데 카카오나 구글 맵보다 기본 제공 기능들은 당연히 부족하기 때문에 당연히 개발하는데 시간이 많이 걸리겠지만, 퀄리티가 나쁘지 않아서 기록으로 남겨둔다.

기타 필요한 기능들

  • 신규 버전 스토어 업로드 시, 어플리케이션 업데이트
  • 타 어플리케이션 실행여부 체크
  • 백그라운드 타이머
  • 백그라운드 강제종료 리스너
  • PIP 기능 개발
  • 4가지 SNS(카카오, 구글, 트위터, 페이스북) 로그인 기능 개발
  • 화면 캡처 및 공유를 위한 이미지 엑세스 기능
  • 다국어 지원을 위한 (국가, 언어)기능 등
  • 터널과 같은 GPS 신호 약한 곳의 정확도 향상

시간이 될 때, GPS 신호 정확도에 대한 글을 써보려고 한다.

+ 추가 결정사항

지도 : 해외 Google map / 국내 kakao map
센서 : geolocator or flutter_background_geolocation 둘 다 써보고 최종으로 어떤 걸 사용할지 결정하기
서버 : postgreSQL 서버 사용 예정

geolocation 패키지 선택

1. Flutter Geolocator

  • 주로 단순한 위치 정보를 가져오는 데 사용되는 패키지입니다.
  • GPS 또는 네트워크 기반 위치 정보를 제공
  • 주기적인 위치 정보를 제공하는 함수는 없기 때문에 timer 와 같은 것을 사용하여 호출해야 함.
  • 단순히 위치 정보를 가져오는 기능에 중점. 추가적인 고급 기능은 제공하지 않음.

2. Flutter Background Geolocation

  • 이동 감지, 주기적인 위치 업데이트, 지오펜싱, 이벤트 및 알림 등과 같은 기능을 사용하여 특정 상황에 따른 위치 기반 작업을 수행.
  • 백그라운드에서 실행되는 동안 정확한 위치 정보를 가져올 수 있으며, 이를 사용하여 위치 추적, 경로 기록, 지오펜싱 등과 같은 기능을 구현할 수 있다.
  • Flutter Background Geolocation은 사용자가 앱을 종료하거나 재부팅한 경우에도 위치 추적을 유지할 수 있다.

결론

앱이 백그라운드에서 실행 중일 때 지속적인 위치 추적이 필요하거나 정기적인 위치 업데이트를 수신해야하기 때문에 Flutter Background Geolocation 패키지를 사용하기로 함.

REFERENCE

각 국가별 제공되는 위치 기능표
https://developers.google.com/maps/coverage?hl=ko
현시점 대한민국 구글 지도에서 제공하는 상세 기능 현황
https://namu.wiki/w/구글%20지도/대한민국
구글을 대체할만한 저렴하나 Native 지도 API
https://nordicapis.com/5-powerful-alternatives-to-google-maps-api
https://www.mappr.co/google-places-api-alternatives
viewt https://viewt.ktdb.go.kr/cong/map/page.do
국가교통DB센터 https://www.ktdb.go.kr/www/index.do
vworld api 레퍼런스 https://www.vworld.kr/dev/v4dv_2ddataguide2_s003.do?svcIde=moctlink
네이버 지도 공식문서 https://api.ncloud-docs.com/docs/ai-naver-mapsdirections15-driving

profile
매일, 꾸준히

1개의 댓글

comment-user-thumbnail
2025년 5월 24일

감사합니다 잘 읽었습니다.

답글 달기