최적화 가이드

이 가이드에서는 보안, 성능, 사용 측면에서 Google 지도 API 사용량을 최적화하는 전략을 설명합니다.

보안

보안 권장사항 검토

API 키는 프로젝트 중심의 사용자 인증 정보로, 사용자 ID 및 비밀번호와 동일한 보안 조치를 통해 관리해야 합니다. 키를 의도하지 않게 사용하여 할당량을 과도하게 사용하고 계정에 예상치 못한 요금이 발생하지 않도록 API 키 권장사항을 검토하세요.

API 키를 사용하여 지도 API 액세스

API 키는 Google 지도 API에 액세스할 때 자주 사용하는 인증 방법입니다. 클라이언트 ID도 현재 계속 지원되고는 있지만 API 키는 더욱 세분화된 보안 관리를 지원하며 특정 웹 주소, IP 주소, 모바일 SDK(Android 및 iOS)와 함께 작동하도록 조정할 수 있습니다. API 키 생성 및 보호에 관한 자세한 내용은 각 API 또는 SDK의 'API 키 사용하기' 페이지를 참고하세요. 예를 들어 Maps JavaScript API의 경우 API 키 사용하기의 관련 페이지를 참고하세요.

성능

지수 백오프를 사용하여 오류 처리

앱에서 짧은 시간 내에 API를 호출하려고 과도하게 시도하여 QPS 오류 같은 오류가 발생하는 경우 지수 백오프를 사용하여 요청을 처리할 수 있습니다.

특히 쿼리 속도를 조정할 수 있습니다. 코드에서 쿼리 간 대기 시간 S초를 추가합니다. 쿼리에 여전히 QPS 오류가 발생하는 경우 대기 시간을 두 배로 늘린 다음 다른 쿼리를 보내세요. 쿼리가 오류 없이 반환될 때까지 이 방식으로 대기 시간을 계속 조정하세요.

요청 시 사용자 상호작용 요청 전송

사용자 상호작용이 포함된 API에 대한 요청은 요청이 있을 때에만 보내야 합니다. 즉, 최종 사용자가 API 요청을 시작하는 작업(예: on-click)을 처리할 때까지 대기한 다음 결과를 사용하여 지도를 로드하거나, 목적지를 설정하거나, 적절한 정보를 표시합니다. 요청 시 전송하는 방식을 사용하면 API에 대한 불필요한 요청을 방지하여 API 사용을 줄일 수 있습니다.

지도 이동 시 오버레이 콘텐츠 표시 금지

사용자가 지도를 옮길 때 Draw()를 사용하여 맞춤 오버레이 콘텐츠를 지도에 표시하지 마세요. 사용자가 옮길 때마다 지도가 다시 그려지므로 오버레이 콘텐츠를 동시에 배치하면 지연이나 시각적 끊김 현상이 발생할 수 있습니다. 사용자가 화면 이동이나 확대/축소를 중지했을 때만 지도에서 오버레이 콘텐츠를 추가하거나 삭제하세요.

Draw 메서드에서 집약적인 작업 자제

일반적으로 Draw() 메서드에서는 그리기 이외의 성능 집약적인 작업은 자제해야 합니다. 예를 들어 Draw() 메서드 코드에서는 다음 작업은 자제해야 합니다.

  • 대량의 콘텐츠를 반환하는 쿼리
  • 표시되는 데이터에 대한 많은 변경사항
  • 많은 문서 객체 모델(DOM) 요소 조작

이러한 작업은 지도가 렌더링될 때 성능을 저하시키고 지연이나 시각적 끊김 현상을 유발할 수 있습니다.

마커에 래스터 이미지 사용

지도상의 위치를 식별하기 위해 마커를 추가할 때 .PNG 또는 .JPG 형식의 이미지 같은 래스터 이미지를 사용합니다. Scalable Vector Graphics 이미지를 렌더링하면 지도를 다시 그릴 때 지연이 발생할 수 있으므로 SVG 이미지는 사용하지 마세요.

마커 최적화

최적화하면 다수의 마커를 단일 정적 요소로 렌더링하므로 성능이 향상됩니다. 이는 많은 수의 마커가 필요한 경우에 유용합니다. 기본적으로 Maps JavaScript API가 마커를 최적화할지 여부를 결정합니다. 다수의 마커가 있는 경우 Maps JavaScript API에서는 최적화를 사용하여 마커를 렌더링하려고 시도합니다. 모든 마커를 최적화할 수는 없으며, 경우에 따라 Maps JavaScript API에서 최적화 없이 마커를 렌더링해야 할 수도 있습니다. 애니메이션 GIF나 PNG을 대상으로 하거나, 각 마커를 별도의 DOM 요소로 렌더링해야 할 때에는 최적화된 렌더링을 사용하지 않습니다.

클러스터를 만들어 마커 표시 관리

지도상의 위치를 식별할 수 있는 마커 표시를 쉽게 관리할 수 있도록 마커 클러스터러 라이브러리를 사용하여 마커 클러스터를 만드세요. 마커 클러스터러 라이브러리에는 다음 기능에 대한 옵션을 제공합니다.

  • 클러스터에서 함께 그룹화할 마커의 수를 지정할 수 있는 그리드 크기
  • 클러스터 표시의 최대 확대/축소 수준을 지정할 수 있는 최대 확대/축소
  • 마커 아이콘으로 사용할 그래픽 이미지의 이미지 경로

사용

예산을 계획하고 비용을 관리하는 방법은 다음과 같습니다.

  • 예산 알림을 설정하면 비용이 증가하여 특정 금액에 도달하는 과정을 추적할 수 있습니다. 예산을 설정한다고 API 사용량이 제한되는 것은 아니며 비용이 지정한 금액에 가까워지면 알림만 보냅니다.
  • 일일 API 사용량을 제한하여 청구 대상인 API의 비용을 관리할 수 있습니다. 일일 요청 수 한도를 설정하면 비용을 제한할 수 있습니다. 예산에 따라 간단한 방정식을 사용하여 일일 한도를 결정하세요. 예: (월간 지출/개당 금액)/30 = 일일 요청 수 한도(API 1개의 경우). 구현하는 내용에 따라 청구 대상인 API를 여러 개 사용할 수 있으므로 필요한 경우 방정식을 조정하세요. 매월 미화 200달러의 Google 지도 API 크레딧이 제공되므로 이를 계산에 반영해야 합니다.
  • 여러 프로젝트를 사용하여 사용량을 분리하고, 우선순위를 지정하고, 추적하세요. 예를 들어 테스트에서 Google Maps Platform API를 정기적으로 사용한다고 가정합니다. 자체 할당량과 API 키를 사용하는 별도의 테스트용 프로젝트를 만들면 뜻밖의 과다 지출을 방지하면서 철저하게 테스트할 수 있습니다.

지도에서 사용 관리

사용자는 일반적으로 한 번에 하나의 지도와 상호작용하므로 지도 표시를 최적화하는 바람직한 방법은 페이지당 단일 지도를 사용하는 것입니다. 앱은 지도를 조작해 고객과의 상호작용 및 요구사항에 따라 다른 데이터 세트를 표시할 수 있습니다.

정적 이미지 사용

동적 이미지(동적 지도 및 동적 스트리트 뷰)를 사용하는 요청은 정적 지도 및 정적 스트리트 뷰보다 비용이 더 많이 듭니다. 사용자가 지도 또는 스트리트 뷰와 상호작용(확대/축소 또는 화면 이동)을 할 것으로 예상되지 않는다면 정적 버전의 API를 사용하세요.

썸네일(아주 작은 지도 및 사진) 역시 정적 지도 및 스트리트 뷰에 사용하면 도움이 됩니다. 이러한 항목은 비교적 낮은 요율로 청구되며 사용자 상호작용(클릭) 시 완전한 동적 Google 지도 환경을 위한 동적 버전으로 이동할 수 있습니다.

Maps Embed API 사용

Maps Embed API를 사용하면 단일 마커 또는 동적 지도가 포함된 지도를 무료로 추가할 수 있습니다. 마커가 하나만 필요하며 지도 맞춤설정이 필요 없는 애플리케이션에는 Maps Embed API를 사용하세요. 경로 모드, 보기 모드, 검색 모드를 사용하는 Maps Embed API 요청에는 요금이 청구됩니다(자세한 내용은 가격표를 참고하세요).

모바일 애플리케이션용 모바일 지도 SDK 사용

모바일 애플리케이션의 경우 지도를 표시할 때 Android용 Maps SDK나 iOS용 Maps SDK를 사용하세요. 모바일 SDK 사용이 불가능할 때는 Maps Static API나 Maps JavaScript API를 사용하세요.

경로에서 사용 관리

Directions API 경유지 제한

가능한 경우 쿼리의 사용자 항목을 최대 10개의 경유지로 제한하세요. 경유지가 10개를 초과하는 요청에는 비교적 높은 청구 요율이 적용됩니다.

최적 라우팅을 위해 Directions API 최적화 사용

경유지 최적화 인수를 사용하는 요청에는 비교적 높은 청구 요율이 적용됩니다. 자세한 내용은 경유지 최적화를 참고하세요.

최적화 인수는 최적 라우팅을 보장하기 위해 경유지를 정렬합니다. 즉, A에서 E로의 경로의 경우 최적화되지 않은 경로의 임의 시퀀스(예: A-D-B-C-E)보다 최적화된 경로(A-B-C-D-E)가 더 나은 경험을 제공합니다.

Directions API 및 Distance Matrix API에서 실시간 교통정보 모델 사용

실시간 교통정보 모델을 포함하는 Directions API 및 Distance Matrix API 요청에는 비교적 높은 청구 요금이 적용됩니다. 출발 시간을 now로 설정하면 실시간 교통정보 모델이 사용 설정됩니다.

요청에서 교통정보 모델이 누락된 경우 결과는 도로, 거리, 속도 제한 같은 물리적 요인만을 기반으로 합니다.

GPS 데이터가 정확하지 않은 경우 이동한 경로 및 가장 가까운 도로 사용

Maps Roads API 기능인 이동한 경로와 가장 가까운 도로는 상위 계층에 포함되며 비교적 높은 청구 요율이 적용됩니다. GPS 데이터가 부정확하고 Roads API가 올바른 도로를 결정하는 데 도움이 될 때 이상의 기능을 사용하세요. 속도 제한은 Roads API의 또 다른 기능으로 애셋 추적 고객만 사용할 수 있습니다.

5~15분 간격으로 속도 제한 위치 샘플링

Maps Roads API 속도 제한 서비스에 대한 호출양을 최소화하려면 애셋의 위치를 5분~15분 간격으로 샘플링합니다. 정확한 값은 애셋의 이동 속도에 따라 달라집니다. 애셋이 이동하지 않는 경우 단일 위치 샘플로도 충분합니다. 여러 번 호출하지 않아도 됩니다.

전체 지연 시간을 최소화하려면 모바일 애셋의 위치가 수신될 때마다 API를 호출하는 대신 일부 데이터가 누적되면 속도 제한 서비스를 호출하세요.

장소에서 사용 관리

사용 사례에 적합한 자동 완성 옵션 사용

두 옵션은 비용이 동일하므로 사용 사례에 가장 적합한 자동 완성 옵션을 확인하세요. 두 옵션 간의 차이는 애플리케이션 최종 사용자가 API를 활용하는 방법입니다.

  • 자동 완성 - 요청별: 사용자가 작성하는 우편 주소 양식처럼 단일 항목으로 충분한 사용 사례에 적합합니다.
  • 자동 완성 - 세션별: 호텔이나 레스토랑 검색처럼 여러 항목이 필요한 경우에 가장 적합합니다.

자동 완성 - 세션별은 결과를 무제한으로 사용할 수 있지만, 토큰을 실행하여 세션 유효성을 보장해야 합니다. 잘못된 세션이 발생하면 자동 완성 - 요청별은 키 입력당 요금이 부과되므로 비용이 증가할 수 있습니다. 이 기능에 대한 자세한 내용은 장소 자동 완성을 참고하세요.

장소 세부정보 및 장소 검색 요청의 특정 필드에 대한 데이터 반환

장소 세부정보 및 장소 검색 요청을 맞춤설정하여 애플리케이션에서 사용하는 특정 필드의 데이터를 반환할 수 있습니다. 이러한 필드는 기본, 연락처, 분위기라는 3개의 카테고리로 분류됩니다. 필드를 지정하지 않는 요청은 모든 필드에 대한 데이터를 수신합니다.

장소 세부정보 요청에 대한 청구는 요청된 데이터의 유형 및 양에 따라 결정됩니다. 필드를 지정하지 않는 요청에는 전체 요금이 청구됩니다. 자세한 내용은 장소 세부정보장소 검색을 참고하세요.

Geocoding API를 사용하여 비용 절약

애플리케이션에서 사용자가 입력한 주소를 처리하는 경우 간혹 주소가 불명확한 경우(불완전하거나, 철자가 잘못되거나, 형식이 잘못 지정되는 경우)가 있습니다. 자동완성을 사용하여 주소를 구별한 다음 장소 ID를 사용하여 장소 위치를 가져옵니다.

하지만 정확한 주소(또는 근접한 주소)가 있다면 자동 완성 대신 지오코딩을 사용하여 비용을 줄일 수 있습니다. 자세한 내용은 주소 지오코딩 권장사항을 참고하세요.