다중 지도 사용 가이드 및 모범 사례
Mega 애플리케이션 개발에서, 하나의 위치 라이브러리에 여러 지도(Block)를 추가해야 하는지 여부는 흔한 질문입니다. 다중 지도를 잘못 사용하면 애플리케이션 능력 향상은커녕 성능 저하와 위치 점프 현상을 초래할 수 있습니다.
본 문서는 다중 지도 기능을 올바르게 이해하고 사용하며 흔한 실수를 피하는 방법을 안내합니다.
여러 개의 지도를 추가하는 것을 피해야 하는 이유는 무엇인가요?
핵심 원칙: "커버리지 확장"을 위해 여러 개의 지도를 추가하지 마세요.
대부분의 경우, 하나의 위치 라이브러리는 단일 장소의 Mega Block 지도 하나만 추가해야 합니다. 다음은 반드시 피해야 할 흔한 잘못된 사용법입니다:
잘못된 시나리오 A: 다중 구역
- 생각: 하나의 관광지 내 서로 연결된 "A구역", "B구역", "C구역"에 대해 각각 지도를 생성하고, 애플리케이션에서 이 세 지도를 한 번에 라이브러리에 추가하여 사용자가 관광지 내 이동 시 원활하게 전환되기를 바람.
- 문제: 이렇게 생성된 세 지도는 서로 공간 좌표상 수학적 연관성이 없으며 독립적입니다. 각각의 좌표계 불일치로 인해 이동 중 원활한 전환이 불가능하며, 구역 경계에서 위치 점프가 발생합니다.
- 해결: 이러한 시나리오의 경우, 대규모 공간 데이터 수집 방법에서 소개된 방식으로 "A구역", "B구역", "C구역"을 수집하고 충분한 중첩 영역을 확보하세요. 대규모 범위 융합 작업에서 소개된 방식으로 지도 제작을 진행하세요. 이렇게 하면 상기 모든 구역을 포함하는 통일된 좌표계의 단일 Block 지도가 생성됩니다. 이 지도를 위치 라이브러리에 추가할 수 있습니다.
잘못된 시나리오 B: 다중 장소
- 생각: 한 장소의 쇼핑몰에 대한 지도를 생성하고, 다른 장소의 동명 쇼핑몰에 대한 지도를 생성하여 하나의 애플리케이션에서 동시에 사용하기를 바람.
- 문제: 이는 위치 인식 속도를 심각하게 저하시킵니다. 장치가 위치를 인식할 때 라이브러리의 모든 지도 데이터를 동시에 비교해야 하여 계산량이 급증하여 초기화 시간이 길어집니다. 사용자는 동시에 하나의 쇼핑몰에만 있을 수 있으므로 다른 쇼핑몰 지도를 로드하는 것은 자원 낭비입니다. 특정 쇼핑몰의 요청량이 많을 경우 다른 쇼핑몰의 요청 응답 시간도 느려집니다.
- 해결: 서로 다른 장소의 쇼핑몰마다 별도의 위치 라이브러리를 생성하고, 각 라이브러리에는 하나의 지도만 추가하세요. 애플리케이션에서 사용자의 현재 위치에 따라 해당 장소의 위치 라이브러리를 동적으로 접근하세요.
잘못된 시나리오 C: 시간대 차이
- 생각: 같은 장소에서 낮에 수집 및 지도 제작을 하고, 밤에도 수집 및 지도 제작을 한 후, 낮과 밤 지도를 라이브러리에 추가하여 사용자가 같은 장소의 다른 시간대에도 일관된 경험을 하기를 바람.
- 문제: 이 시나리오는 잘못된 시나리오 A와 유사하며, 별도로 제작된 지도 결과물 간의 공간 위치 관계는 보장할 수 없습니다.
- 해결: 대규모 범위 융합 작업에서 소개된 방식으로 낮과 밤 수집 데이터를 함께 융합하여 지도를 제작하세요. 최종 생성된 단일 Block 지도를 위치 라이브러리에 추가하세요.
잘못된 시나리오 D: 버전 차이
- 생각: 같은 장소에 이미 버전 A 지도를 제작하여 사용 중인데, 이후 운영 과정에서 업데이트된 버전 B 지도를 새로 제작하여 기존 위치 라이브러리에 추가하고, 애플리케이션을 재배포하지 않고도 새 지도를 사용하기를 바람.
- 문제: 같은 장소의 서로 다른 버전 지도이기 때문에 위치 인식 시 두 개의 다른 버전 데이터 간에 위치 인식 결과가 점프하는 현상이 발생합니다.
- 해결: 무손실 전체 업데이트에서 소개된 방식으로 이전 버전 지도를 업그레이드하여 지도 데이터 버전이 업데이트되면서도 좌표계를 유지하도록 합니다. 업데이트된 지도를 추가한 후에는 반드시 위치 라이브러리에서 원본 버전 지도를 삭제하세요.
잘못된 시나리오 E: 증분 업데이트
- 생각: 같은 장소에 이미 버전 A 지도를 제작하여 사용 중인데, 이후 운영 과정에서 일부 영역이 변경되거나 소규모 영역을 추가 수집해야 해서 새 지도 B를 생성하여 원본 위치 라이브러리에 추가하고, 애플리케이션을 재배포하지 않고도 새 지도를 사용하기를 바람.
- 문제: 새로 수집된 소규모 영역 지도 B와 기존 지도 A 간에는 공간 좌표 연관성이 없습니다. 신규 데이터와 기존 데이터 사이에 위치한 경험에서는 위치 점프가 발생합니다.
- 해결: 증분 업데이트에서 소개된 방식으로 이전 버전 지도를 증분 업데이트하여 새로 수집된 소규모 영역이 기존 지도와 좌표계를 유지하도록 합니다. 업데이트된 지도를 추가한 후에는 반드시 위치 라이브러리에서 원본 버전 지도를 삭제하세요.
요약: 여러 개의 작은 지도를 이어 붙여 하나의 큰 세계를 만들려는 시도는 Mega의 고정밀 지도에는 적합하지 않습니다. Mega의 설계 철학은 하나의 공간적 연속성, 통일된 좌표계, 시공간적 일관성을 가진 고정밀 3차원 표현입니다.
진정으로 다중 지도가 필요한 시나리오
그렇다면 언제 정말로 하나의 라이브러리에 여러 지도(Block)를 추가해야 할까요? 주요 시나리오는 "병렬 작업" 또는 "다중 공간 선택" 이지, "공간 결합" 이 아닙니다.
시나리오 1: 다중 공간 선택
- 설명: 애플리케이션이 하나의 장소 내 완전히 다른 여러 영역을 서비스합니다. 하지만 건물 구조나 수집 실무상의 문제로 인해 이 영역들을 데이터 상 완전히 연결할 수 없어 사용자가 먼저 자신이 위치한 영역을 선택해야 할 수 있습니다. 예: 대형 병원의 서로 다른 층.
- 구현: 사용자가 영역을 선택한 후, 이 사전 정보를 활용하여 해당 장소에 해당하는 단일 지도를 동적으로 활성화하세요. 동시에는 위치 라이브러리에 여전히 하나의 지도만 계산에 참여합니다. 사용자가 새로운 영역으로 이동할 때는 영역 선택을 다시 확인해야 합니다.
시나리오 2: 병렬 작업
- 설명: 애플리케이션이 동일한 장소에 위치하지만 서로 연관성이 없고 특징이 크게 다른 두 개 이상의 독립적이고 알려진 물체 추적 작업을 동시에 처리해야 합니다. 예: 박물관의 여러 전시품.
- 구현: 이러한 고급 시나리오에서는 각 물체에 대해 독립적인 지도를 생성한 후, 이 "물체 지도"들을 하나의 위치 라이브러리에 추가할 수 있습니다. 단, 이때 위치 인식 성능은 위치 라이브러리에 추가된 물체 수에 따라 달라집니다. 물체 수가 매우 많다면 위치 인식 성능과 위치 라이브러리 수 사이에서 타협점을 찾아야 하며, 물체를 분류하여 여러 위치 라이브러리를 생성하고 각각에 추가할 수 있습니다.
다중 지도 사용 시 렌더링 엔진의 동작
다중 지도 위치 인식을 사용할 때, 플랫폼과 버전에 따라 3D 렌더링 동작이 다릅니다.
모범 사례 제안
만약 진정으로 다중 지도가 필요한 시나리오에 설명된 시나리오에 속하거나 다중 지도를 반드시 사용해야 하는 경우, 다음 원칙을 따를 수 있습니다:
- 필요에 따라 활성화: 사용자가 선택을 하거나 특정 영역에 진입할 때, 위치 요청을 보낼 때 해당 사전 정보를 제공하고 해당하는 3D 콘텐츠만 로드하세요.
- 동적 전환: 사용자가 장면을 선택할 수 있도록 명확한 UI를 제공하세요. 새 지도에 해당하는 3D 콘텐츠를 로드하기 전에 기존 지도에 해당하는 3D 콘텐츠를 언로드하여 메모리를 확보하세요.
- 상태 관리: 코드에서 현재 활성화된 지도를 명확하게 관리하고, 위치 결과의 Block ID를 모니터링하여 다른 지도의 위치 피드백을 구분하세요.
- 성능 모니터링: 다중 지도를 사용할 때 장치의 메모리 점유율, 위치 인식 지연 시간 및 전력 소모를 주의 깊게 관찰하여 애플리케이션이 대상 장치에서 원활하게 실행되도록 보장하세요.
결론적으로, 대부분의 애플리케이션에 대해 "하나의 장면, 하나의 지도" 원칙을 고수하는 것이 Mega 위치 인식 성능과 안정성을 보장하는 최선의 선택입니다.