지오코딩 시 할당량 사용 최적화

지오코딩은 주소 ('1600 Amphitheatre Parkway, Mountain View, CA')를 마커나 지도를 배치하는 데 사용할 수 있는 지리 좌표(37.423021, -122.083739)로 변환하는 과정입니다. Google Maps Platform API는 지오코딩에 대한 두 가지 접근 방식을 제공합니다.

  • 클라이언트 측 지오코딩: 일반적으로 사용자 작업에 응답하여 브라우저에서 실행됩니다. Maps JavaScript API는 요청을 실행하는 클래스를 제공합니다. 이 접근 방식은 Maps JavaScript API 문서에 설명되어 있습니다.
  • HTTP 서버 측 지오코딩: 서버가 Google 서버에 지오코드를 직접 쿼리할 수 있습니다. Geocoding API는 이 기능을 제공하는 웹 서비스입니다. 일반적으로 이 서비스는 서버 측에서 실행 중인 다른 코드와 통합합니다. 서버 측 지오코딩은 Geocoding API 문서에 설명되어 있습니다.

클라이언트 측 지오코딩과 서버 측 지오코딩의 예시

다음은 주소를 가져와 지오코딩하고 지도의 중심을 해당 위치로 이동하고 지도 마커를 추가하는 클라이언트 측 지오코딩의 샘플입니다.

geocoder = new google.maps.Geocoder();
geocoder.geocode({ 'address': address }, function(results, status) {
  if (status == google.maps.GeocoderStatus.OK) {
    map.setCenter(results[0].geometry.location);
    var marker = new google.maps.Marker({
      map: map,
      position: results[0].geometry.location
    });
  }
});

더 많은 예는 Maps JavaScript API 문서를 참고하세요.

다음은 Python을 사용하여 서버 측 지오코딩 요청을 실행하는 예입니다.

import urllib2

address="1600+Amphitheatre+Parkway,+Mountain+View,+CA"
key="my-key-here"
url="https://maps.googleapis.com/maps/api/geocode/json?address=%s&key=%s" % (address, key)

response = urllib2.urlopen(url)

jsongeocode = response.read()

이는 다음과 같은 콘텐츠를 포함하는 JSON 객체를 생성합니다.

{
  "status": "OK",
  "results": [ {
    "types": street_address,
    "formatted_address": "1600 Amphitheatre Pkwy, Mountain View, CA 94043, USA",
    "address_components": [ {
      "long_name": "1600",
      "short_name": "1600",
      "types": street_number
    }, {
      "long_name": "Amphitheatre Pkwy",
      "short_name": "Amphitheatre Pkwy",
      "types": route
    }, {
      "long_name": "Mountain View",
      "short_name": "Mountain View",
      "types": [ "locality", "political" ]
    }, {
      "long_name": "San Jose",
      "short_name": "San Jose",
      "types": [ "administrative_area_level_3", "political" ]
    }, {
      "long_name": "Santa Clara",
      "short_name": "Santa Clara",
      "types": [ "administrative_area_level_2", "political" ]
    }, {
      "long_name": "California",
      "short_name": "CA",
      "types": [ "administrative_area_level_1", "political" ]
    }, {
      "long_name": "United States",
      "short_name": "US",
      "types": [ "country", "political" ]
    }, {
      "long_name": "94043",
      "short_name": "94043",
      "types": postal_code
    } ],
    "geometry": {
      "location": {
        "lat": 37.4220323,
        "lng": -122.0845109
      },
      "location_type": "ROOFTOP",
      "viewport": {
        "southwest": {
          "lat": 37.4188847,
          "lng": -122.0876585
        },
        "northeast": {
          "lat": 37.4251799,
          "lng": -122.0813633
        }
      }
    }
  } ]
}

서버 측 지오코더는 JSON의 대안으로 XML 형식도 제공합니다. 더 많은 예는 Geocoding API 문서와 Python 및 기타 언어용 클라이언트 라이브러리를 참고하세요.

할당량 및 비용 고려사항

지오코딩 비용, 할당량, 비율 제한은 이 문서에 설명된 전략에 따라 달라집니다.

비용

지오코딩 요청에 일일 할당량 (QPD) 제한이 더 이상 사용되지 않습니다. 대신 브라우저를 통한 클라이언트 측, Geocoding API 웹 서비스를 통한 서버 측 모두 각 지오코딩 요청은 각 가격으로 청구됩니다. 사용 비용을 관리하려면 일일 할당량 상한을 설정하는 것이 좋습니다.

비율 제한

지오코딩 서비스는 클라이언트 측 쿼리와 서버 측 쿼리의 합계로 계산되는 분당 3,000QPM (분당 쿼리)으로 속도가 제한됩니다.

모바일 앱에서와 같이 주기적인 간격으로 클라이언트 측 지오코딩 요청을 실행할 때 모든 사용자가 동시에 (예: 모두 1분마다 같은 초에) 요청하는 경우 요청이 오류를 반환할 수 있습니다. 이를 피하려면 다음 중 하나를 고려합니다.

  • 요청에 랜덤 간격(지터)을 적용합니다. 요청이 전체 사용자층에서 임의적인지 확인하세요.
  • Android용으로 개발하는 경우 부정확한 반복 알람을 사용하세요.
  • Android용으로 개발하는 경우 적절한 위치 전략을 선택합니다.

캐싱

캐싱에 대한 자세한 내용은 Geocoding API 정책을 참고하세요.

클라이언트 측 지오코딩을 사용하는 경우

간단히 답하면 '거의 항상'입니다. 이유는 다음과 같습니다.

  • 클라이언트 측 요청 및 응답은 사용자에게 더 빠른 대화형 환경을 제공합니다.
  • 클라이언트 측 요청에는 사용자 언어, 지역, 표시 영역 등 지오코딩 품질을 개선하는 정보가 포함될 수 있습니다.

특히 클라이언트 측 지오코딩은 사용자의 입력을 기반으로 주소를 지오코딩할 때 가장 적합합니다.

클라이언트 측 지오코딩에는 두 가지 기본 아키텍처가 있습니다.

  • 브라우저에서 지오코딩과 디스플레이를 모두 처리합니다. 예를 들어 사용자가 페이지에 주소를 입력합니다. 애플리케이션이 해당 주소를 지오코딩합니다. 그런 다음 페이지에서 지오코드를 사용하여 지도에 마커를 만듭니다. 또는 앱에서 지오코드를 사용하여 간단한 분석을 수행합니다. 서버에 데이터가 전송되지 않습니다. 따라서 서버의 부하가 줄어듭니다.
  • 브라우저에서 지오코딩을 수행한 다음 서버로 보냅니다. 예를 들어, 사용자가 페이지에 주소를 입력합니다. 애플리케이션이 브라우저에서 이를 지오코딩합니다. 그런 다음 앱이 데이터를 서버로 보냅니다. 서버는 주변 관심 장소와 같은 일부 데이터로 응답합니다. 이를 통해 자체 데이터를 기반으로 응답을 맞춤설정할 수 있습니다.

서버 측 지오코딩을 사용하는 경우

서버 측 지오코딩은 클라이언트의 입력 없이 주소를 지오코딩해야 하는 애플리케이션에 가장 적합합니다. 일반적인 예로 지오코딩이 필요한 고정된 유한의 알려진 주소 집합이 있는 경우와 같이 사용자 입력과 독립적으로 제공되는 데이터세트를 가져오는 경우를 들 수 있습니다. 서버 측 지오코딩은 클라이언트 측 지오코딩이 실패할 때를 대비한 백업으로도 유용할 수 있습니다.

사용자 지연 시간이 불필요하게 늘어나거나, 요청에서 사용 가능한 정보가 적어서 클라이언트 측보다 지오코딩 결과의 품질이 낮은 것이 우려될 수 있습니다.