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

지오코딩은 주소 ('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,000개로 제한됩니다.

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

  • 요청에 랜덤 간격(지터)을 적용합니다. 요청이 전체 사용자층에 걸쳐 무작위로 이루어지도록 합니다.
  • Android용으로 개발하는 경우 부정확한 반복 알람을 사용합니다.
  • Android용으로 개발하는 경우 적절한 위치 전략을 선택합니다.

캐싱

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

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

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

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

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

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

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

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

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

사용자의 지연 시간이 불필요하게 늘어나거나, 요청에서 사용할 수 있는 정보가 적기 때문에 클라이언트 측보다 품질이 낮은 지오코딩 결과가 발생할 수 있습니다.