라벨이 클러스터링인 게시물 표시

관광 앱 지도 마커 성능 최적화 및 데이터 설계 방법 (클러스터링, 위치 권한 Fallback)

관광 관련 앱이나 공공데이터를 활용한 서비스를 개발하다 보면 필수적으로 들어가는 기능이 바로 지도 화면입니다. 처음에는 장소 데이터가 몇 개 없어서 그냥 좌표 받아오는 대로 지도에 마커를 다 찍어도 잘 돌아가는 것처럼 보입니다. 하지만 관광지, 음식점, 숙소, 축제 정보까지 데이터가 수백, 수천 개로 늘어나면 이야기가 달라집니다. 마커들이 서로 겹쳐서 뭐가 뭔지 구분도 안 되고, 지도를 조금만 움직여도 화면이 뚝뚝 끊기는 현상이 발생하죠. 게다가 위치 권한을 꺼둔 사용자 대응이나 좌표 데이터 보안 문제까지 얽히면 머리가 아파집니다. 저의 경우도 예전에 공공데이터 기반으로 지도 화면을 대충 구현했다가, 데이터가 쌓이면서 성능이 감당 안 돼서 구조를 완전히 갈아엎은 적이 있습니다. 나중에 또 삽질하지 않으려고 실무에서 바로 쓸 수 있는 지도 마커 설계와 최적화 기준을 메모해 둡니다. 1. 지도 데이터는 화면 범위(Viewport)와 확대 수준(Zoom)에 맞추기 지도를 구현할 때 가장 많이 하는 실수가 "모든 데이터를 일단 다 가져와서 그리려고 하는 것"입니다. 핵심은 현재 사용자가 보고 있는 영역과 확대 수준에 맞는 데이터만 처리하는 것 입니다. 화면에 보이지도 않는 전국 관광지 좌표를 앱 메모리에 올려둘 이유가 전혀 없습니다. 운영하면서 정립한 확대 수준별 표시 기준은 아래와 같습니다. 상황 표시 기준 추천 처리 방식 전국/도 단위 축소 장소 개별 표시보다 개수 중심 클러스터(묶음) 표시 시/군/구 단위 주요 카테고리 중심 클러스터 + 대표 마커 동/읍/면 단위 확대 개별 장소 상세 표시 개별 마커 표시 검색 결과 지도 검색 결과 내 데이터만 제한 필터 적용 후 마커 생성 상세 화면 지도 단일 장소 표시 단일 마커 + 길찾기 버튼 실무 한 줄 팁: 지도 화면은 데이터를 '얼마나 많이 가져오느냐'보다, 카메라가 움직였을 때 '언제, 어떤 타이밍에 데이터를 갱신할 것인가'를 제어하는 게 훨씬 중요합니다. 2. 마커 ...