이 가이드에서는 보안, 성능, 사용 측면에서 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를 호출하려고 과도하게 시도하여 할당량 오류와 같은 오류가 발생하는 경우 지수 백오프를 사용하여 요청을 처리할 수 있습니다.
지수 백오프는 500번 대 오류에 가장 유용합니다. 자세한 내용은 HTTP 반환 상태 코드 처리를 참고하세요.
특히 쿼리 속도를 조정하세요. 코드에서
쿼리 간 대기 시간 S
초를 추가합니다. 쿼리에 여전히 할당량 오류가 발생하는 경우 대기 시간을 두 배로 늘린 다음 다른 쿼리를 보내세요. 쿼리가
오류 없이 반환될 때까지 이 방식으로 대기 시간을 계속 조정하세요.
요청 시 사용자 상호작용 요청 전송
사용자 상호작용이 포함된 API에 대한 요청은 요청이 있을 때에만 보내야 합니다.
즉, 최종 사용자가 API 요청을 시작하는 작업(예: on-click
)을 처리할 때까지
대기한 다음 결과를 사용하여 지도를 로드하거나, 목적지를 설정하거나,
적절한 정보를 표시합니다. 요청 시에만 전송하는 방식을 사용하면 API에 대한 불필요한 요청을 방지하여
API 사용을 줄일 수 있습니다.
지도 이동 시 오버레이 콘텐츠 표시 금지
사용자가 지도를 이동시킬 때 Draw()
를 사용하여
지도에 맞춤 오버레이 콘텐츠를 표시하지 않도록 하세요. 사용자가
옮길 때마다 지도가 다시 그려지므로 오버레이 콘텐츠를
동시에 배치하면 지연이나 시각적 끊김 현상이 발생할 수 있습니다. 사용자가 화면 이동이나 확대/축소를 중지했을 때만
지도에서 오버레이 콘텐츠를 추가하거나 삭제하세요.
Draw
메서드에서 집약적인 작업 자제
일반적으로 Draw()
메서드에서는 그리기 이외의
성능 집약적인 작업은 피하는 것이 좋습니다. 예를 들어
Draw()
메서드 코드에서는 다음 작업은 하지 말아야 합니다.
- 대량의 콘텐츠를 반환하는 쿼리
- 표시되는 데이터에 대한 많은 변경사항
- 많은 문서 객체 모델(DOM) 요소 조작
이러한 작업은 지도가 렌더링될 때 성능을 저하시키고 지연이나 시각적 끊김 현상을 유발할 수 있습니다.
마커에 래스터 이미지 사용
지도상의 위치를 식별하기 위해 마커를 추가할 때 .PNG 또는 .JPG 형식의 이미지 같은 래스터 이미지를 사용합니다. Scalable Vector Graphics(SVG) 이미지를 렌더링하면 지도를 다시 그릴 때 지연이 발생할 수 있으므로 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 경유지 제한
가능한 경우 쿼리 1회의 경유지를 최대 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를 호출하는 대신 일부 데이터가 누적되면 속도 제한 서비스를 호출하세요.
장소에서 사용 관리
Place Autocomplete 구현 최적화
Place Autocomplete 사용 비용을 최적화하려면 다음 단계를 따르세요.
필요한 장소 데이터 필드만 반환되도록 JavaScript, Android, iOS 자동 완성 위젯에서 필드 마스크를 사용합니다.
결제 옵션은 사용 사례에 따라 다릅니다. 구현에 자동 완성 세션이 사용되는지 여부에 따라 Autocomplete - Per Request 또는 Autocomplete - Per Session SKU에 대한 요금이 청구됩니다.
사용 사례에 적합한 옵션을 선택하는 방법에 대한 자세한 내용 및 안내는 Place Autocomplete 비용 최적화 권장사항을 참고하세요.
장소 세부정보 및 장소 검색 요청의 특정 필드에 대한 데이터 반환
장소 세부정보 및 장소 검색 요청을 맞춤설정하여 애플리케이션에서 사용하는 특정 필드의 데이터를 반환할 수 있습니다. 이러한 필드는 기본, 연락처, 분위기라는 3개의 카테고리로 분류됩니다. 필드를 지정하지 않는 요청은 모든 필드에 대한 데이터를 수신합니다.
장소 세부정보 요청에 대한 청구는 요청된 데이터의 유형 및 양에 따라 결정됩니다. 필드를 지정하지 않는 요청에는 전체 요금이 청구됩니다. 자세한 내용은 장소 세부정보 및 장소 검색을 참고하세요.
Geocoding API를 사용하여 비용 절감
애플리케이션에서 사용자가 입력한 주소를 처리하는 경우 간혹 주소가 불명확한 경우(불완전하거나, 철자가 잘못되거나, 형식이 잘못 지정되는 경우)가 있습니다. 자동 완성을 사용하여 주소를 구별한 다음 장소 ID를 사용하여 장소 위치를 가져옵니다.
하지만 정확한 주소(또는 근접한 주소)가 있다면 자동 완성 대신 지오코딩을 사용하여 비용을 줄일 수 있습니다. 자세한 내용은 주소 지오코딩 권장사항을 참고하세요.
Google Maps Platform 할당량 작동 방식
모든 API는 각 고객이 호출할 수 있는 횟수가 제한되어 있습니다. 이러한 할당량은 분 단위로 구성됩니다. 특정 API의 호출 할당량에 도달한 경우 1분이 지날 때까지 추가 호출이 허용되지 않습니다.
성공적인 요청과 서버 오류를 유발한 요청만 할당량에 포함됩니다. 인증에 실패한 요청은 할당량에 포함되지 않습니다.