SiliconValley_survivor

SiliconValley_survivor

Mobile Design Maps, 오프라인 지도

오프라인 지도는 타일만 저장하는 일이 아니라 검색과 경로 데이터까지 같은 세대로 준비되어야 하는 문제입니다

SiliconValley_survivor's avatar
SiliconValley_survivor
Sep 23, 2026
∙ Paid

Introduction & Requirements

사용자가 여행을 떠나기 전에 공항과 숙소가 있는 지역의 지도를 다운로드합니다.

앱에는 저장 완료라고 표시됩니다. 도착한 뒤 모바일 데이터를 끄고 지도를 열어보니 도로와 건물은 보입니다. 그런데 숙소 이름을 검색하면 결과가 없고, 목적지를 직접 선택해도 자동차 경로를 계산하지 못합니다.

지도는 저장했는데 왜 길 안내는 사용할 수 없을까요.

지도 화면에 도로를 그리는 데이터와 실제로 이동 가능한 경로를 계산하는 데이터는 다르기 때문입니다. 장소 이름을 검색하는 데이터도 별도로 필요합니다. 화면에 도로가 보인다는 사실만으로 검색과 경로 계산까지 준비되었다고 판단할 수 없습니다.

다른 상황도 있습니다.

공항 주변과 숙소 주변은 각각 저장했지만 두 지역을 연결하는 도로는 다운로드하지 않았습니다. 출발지와 목적지는 모두 지도에 보이는데, 중간에 필요한 경로 데이터가 없습니다.

또는 기존 지도를 업데이트하는 동안 앱이 종료될 수 있습니다. 화면에 표시되는 도로는 새로운 버전인데, 경로 엔진은 이전 버전의 연결 정보를 사용한다면 지도와 안내가 일치하지 않을 수 있습니다.

오프라인 지도는 지도 이미지를 휴대폰에 저장하는 기능보다 넓은 문제입니다.

지역을 화면에 표시할 수 있는가

장소와 주소를 찾을 수 있는가

출발지에서 목적지까지 경로를 계산할 수 있는가

현재 위치를 경로와 연결할 수 있는가

경로를 벗어나도 저장된 범위에서 다시 계산할 수 있는가

업데이트 중에도 기존 지도를 일관되게 사용할 수 있는가

실제 제품의 지원 범위도 동일하지 않습니다. Google Maps는 오프라인 자동차 안내에서 전체 경로가 다운로드한 지역 안에 있어야 한다고 설명하며, 오프라인에서는 실시간 교통 정보와 대체 경로 등의 기능이 제한됩니다. Apple Maps는 다운로드한 지역에서 여러 이동 방식의 안내를 제공한다고 설명하지만, 국가와 지역에 따른 제공 제한이 있습니다. 따라서 한 제품의 오프라인 기능을 모든 지도 앱의 공통 기능으로 가정하지 않겠습니다.

이번 글에서는 iOS와 Android에서 동작하는 오프라인 지도 앱을 설계합니다. 저장한 지역의 지도 표시, 장소 검색, 자동차 경로 계산과 재탐색을 기본 기능으로 둡니다.

아래의 패키지 형식, 데이터베이스, API와 업데이트 절차는 이 글에서 제안하는 설계입니다. Google Maps나 Apple Maps의 비공개 내부 구현을 재현하는 것은 아닙니다.

Netflix 다운로드에서는 저장된 미디어와 재생 권한을 구분했습니다. 지도에서는 표시 데이터, 검색 인덱스, 경로 그래프와 지원 범위를 구분해야 합니다. 다운로드가 끝났다는 사실보다 어떤 기능을 어느 지역에서 사용할 수 있는지가 중요해집니다.

Functional Requirements

  • 사용자는 지도에서 저장할 지역을 선택하고, 제공할 상세 수준과 언어에 따른 예상 다운로드 크기를 확인할 수 있습니다.

  • 사용자는 지역 다운로드를 시작하거나 중지하고, 저장한 지도를 갱신하거나 삭제할 수 있습니다.

  • 앱은 네트워크 연결 없이 저장된 범위의 지도를 확대하고 이동하며 표시할 수 있습니다.

  • 사용자는 저장된 검색 데이터에 포함된 장소와 주소를 찾고, 목적지를 선택할 수 있습니다.

  • 앱은 필요한 도로 데이터가 준비된 범위에서 자동차 경로를 계산하고, 사용자가 경로를 벗어나면 다시 탐색할 수 있습니다.

  • 앱은 위치 권한과 위치 정보의 정확도를 확인하고, 위치를 확정하기 어려운 경우 이를 사용자에게 구분해 표시합니다.

  • 앱은 지도 업데이트가 중단되어도 사용 중인 기존 버전을 유지하고, 필요한 데이터가 모두 준비된 뒤 새로운 버전으로 전환할 수 있습니다.

  • 앱은 저장 범위 밖의 이동, 누락된 데이터, 오래된 정보와 지원하지 않는 기능을 정상적인 상태로 표현해야 합니다.

  • 앱은 사용자가 보관한 지도와 자동으로 준비한 임시 지도를 구분하고, 저장 공간과 배터리 정책에 따라 관리할 수 있습니다.

Target & Scale, Traffic & Capacity Assumptions

지역 하나의 완료 조건부터 정합니다

이번 설계에서 지역 하나를 다운로드한다는 것은 지도 타일만 받는다는 뜻이 아닙니다.

사용자가 자동차 안내와 장소 검색을 함께 선택했다면, 해당 기능에 필요한 데이터까지 준비되어야 합니다.

Offline Region Package

Map Data

도로, 건물, 지형 등의 표시 데이터

Style Resources

색상 규칙, 글꼴, 아이콘

Routing Data

도로 연결, 진행 방향, 회전 제한

Search Data

장소, 주소, 검색 인덱스

Package Metadata

지원 범위, 버전, 의존성과 무결성 정보

실제 지도 SDK도 타일 외의 자원을 요구할 수 있습니다. Mapbox의 오프라인 문서는 지도 표시를 위한 타일 데이터와 함께 스타일, 글꼴, 아이콘 등의 자원을 관리해야 한다고 설명합니다. 경로 안내 문서에서는 지도 표시용 데이터와 경로 계산용 데이터를 구분합니다.

이하의 크기와 처리량은 설계를 위한 가정입니다. 특정 제품의 실제 데이터 크기나 성능 보장이 아닙니다.

상세 수준을 한 단계 높이면 필요한 데이터가 크게 늘어납니다

지도는 지역과 확대 수준에 따라 필요한 조각을 선택합니다. 이런 조각을 타일이라고 부르겠습니다.

일반적인 사분할 타일 체계에서는 확대 수준을 한 단계 높일 때 타일 하나의 범위가 더 작은 타일 네 개로 나뉩니다. 같은 지리적 영역을 더 자세하게 저장하려면 더 많은 타일이 필요해집니다.

설명용으로 선택한 지역이 확대 수준 12에서 타일 25개를 정확히 포함한다고 하겠습니다.

Zoom 12 25 tiles

Zoom 13 100 tiles

Zoom 14 400 tiles

Zoom 15 1600 tiles

Zoom 16 6400 tiles

Total 8525 tiles

타일 하나의 압축된 평균 크기를 40KB로 가정하면 표시 데이터는 약 341MB입니다.

여기에 경로 데이터 180MB, 검색 데이터 65MB, 스타일과 글꼴 등 14MB를 더하면 지역 패키지는 약 600MB가 됩니다.

이 계산에서 모든 타일이 실제로 같은 크기라는 뜻은 아닙니다. 도심과 바다, 복잡한 교차로와 단순한 도로는 담고 있는 정보량이 다릅니다. 실제 크기는 패키지 준비 과정에서 객체 목록과 크기를 집계하여 제시해야 합니다.

This post is for paid subscribers

Already a paid subscriber? Sign in
© 2026 실리콘밸리_생존자 · Privacy ∙ Terms ∙ Collection notice
Start your SubstackGet the app
Substack is the home for great culture