지도기반 웹 사이트를 사용하다보면 문서도 잘 구성되어 있고 사용성도 높은 Google Map API
사용한다.
그리고 지도를 사용하면 필연적으로 만나게 되는 기능이 Marker
를 지도 위에 뿌리는 기능이다.
간단한 몇개의 Marker
를 뿌리는 것은 서비스에 큰 부담이 되지 않지만, 다수의 Marker
를 뿌리고 또한 Clustering
기능까지 더해진다면 메모리를 많이 잡아 먹어 사용자에게 불편함을 줄 수 있다.
그렇기 때문에 Google Map API
에서 제공하는 Marker
기능 중 어떤게 가장 메모리 효율도 좋고 Load 속도도 빠른지 확인하여 개발에 조금이라도 도움이 되었음하는 마음에 측정해 보았다.
Google Map API
는 기본적으로 세가지 방법으로Marker
를 뿌릴 수 있다.
각각의 사용방법은 docs를 보면 아주 친절하게 잘 나와 있어서 참고하면 좋을 거 같다.
Legacy
에서는 제공되지 않던 HTML, CSS 태그를 이용하여 더 상세한 Marker
를 그릴 수 있다는 장점이 있다.JSON
,GEOJSON
파일을 이용하여 데이터를 뿌리는 방식이다. Marker 객체를 따로 생성하지 않아도 자동으로 Marker를 그려주는 특징이 있다.(단, Geojson내의 Feature Type이 "point" 이어여 한다. ) 프로젝트 시 가장 민감하게 받아들이는 항목이 첫 화면 Load 시간
이었다. 대부분의 사용자들이 처음 띄워지는 화면의 속도가 느리면 속도에 대한 문의를 많이 하는 것 같았다. 특히, 많은 수의 Marker를 뿌려야 하는 상황에서는 더 빈번한 문의를 받았었다.그리고 아무리 빠르게 화면이 띄워져도, 지도 상에서 동작 시 버벅임이 느껴지면 이것 또한 문제가 되곤 했다.
그래서 각 Marker 별 Load 속도
와 동작 시 메모리 사용률
에 대해서 비교를 해보고자 한다.
정의
기본 아이콘
으로 Load 속도 & 메모리 사용률 체크 기본 아이콘
으로 Load 속도 & 메모리 사용률 체크SVG 아이콘
으로 Load 속도 & 메모리 사용률 체크SVG 아이콘
으로 Load 속도 & 메모리 사용률 체크화면 Load 속도 테스트는 다섯번 씩 진행
했고 메모리 사용률 체크는 크롬 개발자 도구의 'Performance'
기능을 이용하였다.
사용한 데이터는 서울시에서 제공하는 따릉이 대여소 위치 데이터
를 사용하였고 총 row 수는 2,719개
이다.
확실히 Legacy가 가장 안정적이고 stable한 속도를 보여주었고
아직 Beta 버전인 Advanced Marker가 Load 되는 속도가 느린 것을 볼 수 있었다.
DataLayer로 올리는 것도 Legacy와 속도 차이가 유의미하게 하게 보이지는 않는다. 데이터 유형에 따라서 선택적으로 Legacy와 DataLayer 를 사용하면 좋을 거 같다.
SVG Image(Custom Icon)를 적용했을 때에도 역시 아직 Beta 버전인 Advanced Marker가 느렸지만, 그 외 Legacy와 DataLayer는 역시나 큰 차이는 없었다. 의외로 기본 ICON일 경우 DataLayer Clustering이 Legacy CLustering 보다 조금 더 빨리 Load된다는 점이 조금 의외의 결과
였다.
Beta 버전이 Advanced Marker
의 경우에는 아무래도 아직 실험 단계이다보니 많은 안정화가 필요한 것
으로 보인다. 아마 이러한 안정화 작업을 위해서 개발자들에게 오픈 한 것이 아닐까라는 생각이 든다. 만약 SVG로 해결 할 수없는 그런 Custom ICon을 보여줘야할 경우
에는 HTML 태그를 사용할 수 있는 Advanced Marker가 유용
하게 사용되겠지만 데이터 양에 따라 Load 속도가 느릴 수 있다는 점을 고객에게 안내해주는 것이 필수
일 거 같다.
클러스터링을 적용하지 않고 SVG Image로 ICON을 생성하였다.
그리고 Zoom-In/Out
과 Drag
를 하며 화면에 얼마나 부하가 걸리는지 테스트
를 진행하였다.
아래 결과에서 보이는 것 처럼 Legacy를 사용했을 Memory 사용 효율이 가장 안정적
인 것으로 보인다.실제로 테스트 할때 버벅임이 없어 가장 빨리 끝났다.
하지만 Advanced와 DataLayer의 경우
Zoom-In/Out시 많은 memory를 사용하고 버벅거림도 상당
했다.
앞선 Load 속도
에서는 Legacy와 DataLayer는 무의미한 차이를 보였지만
Memory 사용
측면에서는 확실히 Legacy를 사용하는 것이 더 안정적
인 것으로 보인다.
Advanced
DataLayer
Clustering을 할 때는 정말 많이 애먹었다. 너무 느려서 성격이 급한 나로서는 버티기 힘들었다. ㅋㅋㅋ
Advanced는 우선 너무 너무 느렸다. JS Heap Memory 사용량
의 MAX가 173MB
로 나오는데 내가 볼 땐 더 높을거 같다. 왜냐면 중간에서부터 측정이 안되었거든
. 테스트 다 하고 결과를 보니 중간부터 측정이 안되고 있었다. '측정이 안됐으면 다시 하면 되지' 라고 생각할 수 있지만 이렇게 안되는게 좀 더 인상깊었다.
아무래도 작은 서울 땅위에 다닥 다닥 붙어있는 따릉이 대여소들
이 Zoom-level에 따라
Marker를 어떤 알고리즘
으로 어디로 합쳐야할지
이런것들을 계산하는 것에 있어서 많은 Memory를 사용
하는 것으로 보인다. 만약 국가별 데이터를 Clustering 하였다면 땅이 넓기 때문에 Zoom-Level에 많은 영향을 안받을 거 같은데 level 1에도 엄청난 영향을 받는 작은 영역
이었기 때문에 이러한 결과를 초례한 것으로 보인다.
그래도 이렇게 극단적인 테스트를 하였기에 눈에 띄는 차이가 보인 것 인다. 그래프를 봤을 때 Legacy와 DataLayer 둘다 stable해 보이지만
Heap Memory의 Min, Max값
을 봤을 때 Leagacy
의 Min, Max 값이 더 낮은게 더 효율적
인 것으로 보인다.
Advanced
DataLayer
이렇게 여러가지 종류의 Marker를 사용하면서 각각의 특징에 대해서 많이 배우고 차이를 몸소 깨우칠 수 있었던 유익한 시간이었다. 앞으로 지도를 구성할 때 데이터의 종류와 양에 따라 사용할 Marker 선택 근거를 정립할 수 있는 좋은 시간이었다. 향후에는 Beta Version인 Advanced가 얼마나 성장했는지를 또 비교해보면 또 재미있지 않을까? 하는 생각이 든다.
그리고 이런 화면의 성능 개선 부분에 대한 개념도 많이 공부하여 메모리나 속도 향상도 잘하는 개발자가 되고싶다.