모든 준비를 마쳤습니다!

개발을 시작하려면 개발자 문서로 이동하세요.

Google Maps Geocoding API 활성화

개발을 시작하기 위해 Google Developers Console에서 우선적으로 해야 할 일을 몇 가지 소개하겠습니다.

  1. 프로젝트 생성 또는 선택
  2. Google Maps Geocoding API 활성화
  3. 적합한 키 생성
계속

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

지오코딩은 주소(예: "1600 Amphitheatre Parkway, Mountain View, CA")를 지리 좌표(37.423021, -122.083739)로 변환하는 프로세스이며, 이를 사용하여 마커를 배치하거나 지도의 위치를 지정할 수 있습니다. Google Maps API는 지오코딩에 대한 다음 두 가지 접근방식을 제공합니다.

  • 클라이언트측 지오코딩: 일반적으로 사용자 액션에 대한 응답으로 브라우저에서 실행되는 지오코딩입니다. Google Maps JavaScript API가 요청을 수행하는 클래스를 제공합니다. 이 접근방식에 대한 설명은 Google Maps JavaScript API 문서를 참조하세요.
  • HTTP 서버측 지오코딩: 서버가 Google 서버에 지오코드를 직접 쿼리할 수 있도록 허용하는 지오코딩입니다. Google Maps Geocoding API는 이 기능을 제공하는 웹 서비스입니다. 일반적으로 이 서비스를 서버측에서 실행중인 다른 코드와 통합합니다. 서버측 지오코딩에 대한 설명은 Google Maps 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
    });
  }
});

추가 예시는 Google 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 형식도 제공합니다. 추가 예시는 Google Maps Geocoding API 문서와 Python 및 기타 언어용 클라이언트 라이브러리를 참조하세요.

할당량 고려 사항

지오코딩 할당량 및 속도 제한은 이 문서에서 간략하게 설명한 전략을 활용합니다.

기본 플랜을 사용하는 경우, 브라우저를 통한 클라이언트측 지오코딩 또는 Google Maps Geocoding API 웹 서비스를 통한 서버측 지오코딩 등 모든 지오코딩 요청은 하루 2,500개의 요청 할당량을 갖습니다. 하루 동안의 모든 요청은 프로젝트의 할당량에 대해 카운트됩니다. 더 높은 일일 할당량에 액세스하려면 사용 제한 가이드에 설명된 대로 선불 결제를 활성화합니다.

지오코딩 서비스는 일일 할당량 제한 외에도 클라이언트측 쿼리와 서버측 쿼리의 합계로 계산되는 50 QPS(초당 쿼리)로 속도가 제한됩니다.

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

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

API는 Google Maps API 프리미엄 플랜 고객에게 더 높은 일일 할당량을 제공합니다. Google Maps API 프리미엄 플랜 할당량에 대한 자세한 내용은 프리미엄 플랜 사용 요금 및 제한 가이드를 참조하세요. Google Maps API 프리미엄 플랜를 사용해도 여전히 할당량 제한을 초과하는 경우 Google Cloud Support Portal에서 지원 요청을 제출하십시오.

캐싱 고려 사항

Google Maps API 서비스 약관을 사용하면 지오코드를 캐시할 수 있습니다(즉, 제한된 기간 동안 지오코드를 서버에 저장할 수 있음). 동일한 주소를 반복적으로 조회해야 하는 경우 캐싱이 유용할 수 있습니다. 그러나 데이터가 더욱 정확해지면 지오코딩 결과가 변경된다는 점에 유의하십시오. 따라서 데이터를 캐시한 경우에도 주기적으로 데이터를 새로 고쳐 위치에 가장 적합한 지오코드를 확보해야 합니다.

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

정담은 "거의 항상"입니다. 이유는 다음과 같습니다.

  • 클라이언트측 요청 및 응답은 사용자에게 더 나은 대화형 방식으로 훨씬 빠르게 제공됩니다.
  • 클라이언트측 요청은 사용자 언어, 지역 및 뷰포트와 같이 지오코딩 품질을 향상시키는 정보를 포함할 수 있습니다.

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

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

  • 브라우저에서 지오코딩과 디스플레이를 모두 처리합니다. 예를 들어, 사용자가 페이지에 주소를 입력합니다. 애플리케이션이 해당 주소를 지오코딩합니다. 그런 다음 페이지에서 지오코드를 사용하여 지도에 마커를 생성합니다. 또는 앱이 지오코드를 사용하여 간단한 분석을 수행합니다. 서버에 데이터가 전송되지 않습니다. 따라서 서버의 부하가 줄어듭니다.
  • 브라우저에서 지오코딩을 수행한 다음 서버로 보냅니다. 예를 들어, 사용자가 페이지에 주소를 입력합니다. 애플리케이션이 브라우저에서 해당 주소를 지오코딩합니다. 그런 다음 앱이 데이터를 서버로 보냅니다. 서버가 가까운 관심 지점과 같은 데이터로 응답합니다. 따라서 자신의 데이터를 기반으로 응답을 사용자 지정하고, 원하는 경우 지오코드를 캐시할 수 있습니다. 캐싱을 사용하면 훨씬 많은 것을 최적화할 수 있습니다. 예를 들어, 주소로 서버에 쿼리하여 최근에 캐시된 지오코드가 있는지 확인할 수 있습니다. 캐시에 일치하는 항목이 없으면 브라우저로 결과를 반환하지 않고 결과를 지오코딩하여 캐싱을 위해 서버로 다시 보냅니다.

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

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

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

서버측 지오코딩 애플리케이션의 기본 아키텍처는 다음과 같습니다.

  • 서버 기반 애플리케이션이 서버의 지오코딩 스크립트에 주소를 보냅니다.
  • 스크립트가 캐시에서 최근에 주소가 지오코딩되었는지 확인합니다.
  • 그런 경우 스크립트가 결과를 원래 애플리케이션에 반환합니다.
  • 그렇지 않은 경우 스크립트가 Google에 지오코딩 요청을 보냅니다. 결과가 있으면 캐시한 후에 그 결과를 원래 애플리케이션에 반환합니다.

결론

일반적으로 클라이언트측 지오코딩과 캐싱을 함께 사용하면 대부분의 요구사항을 처리할 수 있습니다. 할당량에 문제가 있는 경우 결제 활성화 또는 프리미엄 플랜 라이선스 구입을 고려하십시오.

다음에 대한 의견 보내기...

Google Maps Geocoding API
Google Maps Geocoding API
도움이 필요하시나요? 지원 페이지를 방문하세요.