최적화 가이드

최적화 전략

보안

보안 권장사항 검토

API 키는 사용자 ID 및 비밀번호와 같은 예방 조치를 역할을 하는 프로젝트 중심 사용자 인증 정보입니다. API 키 권장사항을 검토하여 키를 의도하지 않은 용도로 사용하여 계정에서 과도한 할당량 사용과 예상치 못한 요금이 발생하는 일이 없게 하세요.

API 키를 사용하여 Maps API에 액세스

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

성능

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

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

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

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

사용자 상호작용이 포함된 API에 대한 요청은 주문형으로 보내야 합니다. 즉, 최종 사용자가 API 요청을 시작하는 작업(예: 클릭)을 수행할 때까지 대기한 다음 결과를 사용하여 지도를 로드하거나, 목적지를 설정하거나, 적절한 정보를 표시합니다. 주문형 접근 방식을 사용하면 API에 대한 불필요한 요청을 방지하여 API 소비를 줄일 수 있습니다.

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

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

Draw 메서드에서 고비용 작업 자제

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

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

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

마커에 래스터 이미지 사용

마커를 추가할 때 .PNG 또는 .JPG 형식의 이미지 같은 래스터 이미지를 사용하여 지도에서 위치를 식별합니다. 확장 가능한 벡터 그래픽(SVG) 이미지는 사용하지 마세요. SVG 이미지를 렌더링하면 지도를 다시 그릴 때 지연이 발생할 수 있습니다.

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

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

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

사용량 최적화

사용량 모니터링 및 제한

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

  • 예산 알림을 설정하면 지출액이 특정 금액에 도달하는지 여부를 추적할 수 있습니다. 예산을 설정해도 API 사용량이 제한되지는 않으며 지출액이 지정된 금액에 근접할 때만 알림을 보냅니다.
  • 일일 API 사용량을 제한하여 청구 가능한 API 사용 비용을 관리할 수 있습니다. 일일 요청 수 한도를 설정하면 지출 금액을 제한할 수 있습니다. 지출하려는 금액에 따라 간단한 방정식을 사용하여 일일 한도를 결정하세요. 예: (월간 지출/개당 가격)/30 = 일일 요청 수 한도(API 1개의 경우). 구현에서는 여러 청구 가능한 API를 사용할 수 있으므로 필요에 따라 방정식을 조정하세요. 매월 미화 200달러의 Google Maps Platform 크레딧이 제공되므로 이를 계산에 반영해야 합니다.

지도

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

정적 이미지 사용 고려

동적 이미지(동적 지도 및 동적 스트리트 뷰)를 사용하는 요청은 정적 지도 및 정적 스트리트 뷰보다 비용이 더 많이 듭니다. 지도 또는 스트리트 뷰와의 상호작용(확대/축소 또는 화면 이동)이 예상되지 않는다면 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를 사용하여 장소 위치를 가져옵니다.

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