이 문서에서는 Route Optimization API를 사용하기 위해 필요한 단계를 설명합니다.
기본 요건
이 절차에서는 결제가 사용 설정된 Google Cloud 계정 및 Google Cloud 프로젝트를 설정하는 방법을 안내합니다. Route Optimization API 사용 요금이 청구되는 방식도 숙지해야 합니다.
- Route Optimization API 사용량 및 결제에서 사용량에 대한 결제 및 비용을 검토합니다.
Google Cloud 계정이 있는지 확인합니다.
Google Cloud 콘솔에 로그인결제가 사용 설정된 Google Cloud 프로젝트가 있는지 확인합니다.
결제 페이지로 이동- 프로젝트를 선택하여 결제 페이지를 엽니다.
결제 페이지에서 다음을 수행합니다.
- 선택한 프로젝트에 결제가 이미 사용 설정되어 있고 결제 계정이 하나만 있는 경우 결제 페이지가 열립니다.
- 결제 계정이 여러 개인 경우 연결된 결제 계정으로 이동을 선택하여 프로젝트와 연결된 결제 계정에 대한 세부정보를 확인합니다.
- 결제 계정이 있지만 프로젝트와 연결되어 있지 않으면 결제 계정을 프로젝트에 연결하라는 메시지가 표시됩니다.
- 결제 계정이 없거나 새 결제 계정을 만들려면 결제 계정 관리를 선택하여 새 결제 계정을 만듭니다. 자세한 내용은 새 셀프 서비스 Cloud Billing 계정 만들기를 참조하세요.
API 사용 설정
Route Optimization API를 사용하려면 먼저 Google Cloud 콘솔 또는 gcloud 명령어를 사용하여 Google Cloud 프로젝트에서 API를 사용 설정해야 합니다.
API를 사용 설정하려면 다음 안내를 따르세요.
콘솔
Google Cloud 콘솔에서 제품 페이지를 엽니다.
Route Optimization API 사용 설정사용 설정 버튼을 클릭합니다.
gcloud
gcloud services enable \ --project "PROJECT" \ "routeoptimization.googleapis.com"
Google Cloud SDK, Cloud SDK 설치 및 다음 명령어에 대해 자세히 알아보세요.
Google Maps Platform 제품은 무단 사용을 방지하기 위해 API 호출에 OAuth 토큰을 포함해야 합니다.
OAuth 토큰 만들기
Route Optimization API는 인증에 OAuth 2.0을 지원합니다. Google은 웹 서버 시나리오와 같은 일반적인 OAuth 2.0 시나리오를 지원합니다.
이 문서에서는 개발 환경에서 Route Optimization API 호출에 OAuth 토큰을 전달하는 방법을 설명합니다. 프로덕션 환경에서 OAuth를 사용하는 방법에 대한 자세한 내용은 Google의 인증 방법을 참조하세요.
서버에 API 요청을 수행하여 Google 지도 API를 직접 호출하거나 클라이언트 라이브러리를 사용하여 코드를 간소화할 수 있습니다. Google 지도는 Go, Java, Node.js, Python용 클라이언트 라이브러리를 제공합니다. 자세한 내용은 Route Optimization API 클라이언트 라이브러리를 참고하세요.
OAuth 개요
배포 환경에 따라 여러 가지 방법으로 OAuth를 사용하여 액세스 토큰을 만들고 관리할 수 있습니다.
애플리케이션과 Google 서비스 간의 서버 간 상호작용에 OAuth 2.0을 사용할 수 있습니다. 이 시나리오에서는 개별 사용자가 아닌 애플리케이션과 연결된 서비스 계정을 사용합니다. 사용자를 직접 개입시키지 않고 서비스 계정을 사용하여 API 요청을 수행할 수 있습니다. 인증 방법에 대한 자세한 내용은 Google 인증 방법을 참조하세요.
또는 Route Optimization API를 Android 또는 iOS 모바일 앱에 통합할 수 있습니다. 다양한 배포 환경에서 OAuth를 사용하고 액세스 토큰을 관리하는 방법에 관한 자세한 내용은 OAuth 2.0을 사용하여 Google API에 액세스를 참고하세요.
OAuth 범위
Route Optimization API에서 OAuth를 사용하려면 OAuth 토큰에 다음 범위를 할당해야 합니다.
https://www.googleapis.com/auth/cloud-platform
역할 구성
이 문서에서는 경로 최적화의 Identity and Access Management (IAM) 역할과 권한에 대한 정보를 제공합니다. IAM을 사용하면 특정 Route Optimization 리소스에 대한 세분화된 액세스 권한을 부여하고 다른 리소스에 대한 액세스를 방지할 수 있습니다. IAM은 최소 권한의 보안 원칙을 적용하여 실제로 필요한 것보다 더 많은 권한을 갖지 않도록 합니다.
주 구성원 (사용자, 그룹 또는 서비스 계정)이 Google Cloud API를 호출하는 경우 해당 주 구성원에게 리소스를 사용할 적절한 IAM 권한이 있어야 합니다. 주 구성원에게 필수 권한을 부여하려면 주 구성원에게 IAM 역할을 부여합니다.
Google Cloud에서 액세스를 관리하는 일반적인 방법을 알아보려면 IAM 개요를 참조하세요.
주 구성원이 경로 최적화에 액세스할 수 있도록 허용하는 사전 정의된 IAM 역할은 다음과 같습니다.
-
Route Optimization Editor (roles/routeoptimization.editor): 사용자 또는 서비스 계정에 프로젝트의 경로 최적화 리소스에 대한 읽기 및 쓰기 액세스 권한을 부여합니다. 여기에는OptimizeTours및BatchOptimizeTours를 호출하고GetOperation를 사용하여 장기 실행 작업을 검색하는 기능이 포함됩니다. -
Route Optimization Viewer (roles/routeoptimization.viewer): 프로젝트의 경로 최적화 리소스에 대한 읽기 전용 액세스 권한을 부여합니다. 이 역할을 사용하면OptimizeTours를 호출하고GetOperation를 사용하여 장기 실행 작업에 액세스할 수 있습니다.
gcloud projects add-iam-policy-binding PROJECT \ --member user:someone@example.com \ --role roles/routeoptimization.editor
자세한 내용은 Google Cloud 콘솔을 사용하여 IAM 역할 부여를 참조하세요.
예시: 로컬 개발 환경에서 REST API 호출 사용해 보기
토큰을 생성하는 환경이 없고 OAuth 토큰으로 Route Optimization API를 사용해 보려면 이 섹션의 절차를 따르세요.
이 예시에서는 애플리케이션 기본 사용자 인증 정보 (ADC)에서 제공하는 OAuth 토큰을 사용하여 호출하는 방법을 설명합니다. ADC를 사용하고 클라이언트 라이브러리를 사용하여 Google API를 호출하는 방법은 클라이언트를 사용하여 인증을 참조하세요.
다음 REST 절차는 개발 또는 테스트에만 사용하고 프로덕션에는 사용하지 마세요.
기본 요건
ADC를 사용하여 REST 요청을 수행하기 전에 gcloud CLI를 사용하여 ADC에 사용자 인증 정보를 제공합니다.
gcloudCLI를 설치하고 초기화합니다. 자세한 내용은 gcloud CLI 설치를 참조하세요.gcloudCLI로 인증합니다.gcloud auth application-default login
로그인 프로세스를 완료하여 사용자 인증 정보를 ADC에서 사용하는 로컬 사용자 인증 정보 파일에 저장합니다.
자세한 내용은 로컬 개발 환경의 ADC 설정을 참조하세요.
REST 요청 수행
이 예시에서는 두 개의 요청 헤더를 전달합니다.
다음 명령어를 사용하여 토큰을 생성하여
Authorization헤더에 OAuth 토큰을 전달합니다.gcloud auth application-default print-access-token반환된 토큰의 범위는
https://www.googleapis.com/auth/cloud-platform입니다.X-Goog-User-Project헤더에서 결제가 사용 설정된 Google Cloud 프로젝트의 ID 또는 이름을 전달합니다.
OAuth 토큰을 사용하여 Route Optimization API를 호출하려면 다음 단계를 완료하세요.
다음 코드 샘플에서 PROJECT_NUMBER_OR_ID를 Google Cloud 프로젝트 번호 또는 ID로 바꿉니다.
curl -X POST 'https://routeoptimization.googleapis.com/v1/projects/PROJECT_NUMBER_OR_ID:optimizeTours' \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ --data-binary @- << EOM { "model": { "shipments": [ { "pickups": [ { "arrivalLocation": { "latitude": 37.73881799999999, "longitude": -122.4161 } } ], "deliveries": [ { "arrivalLocation": { "latitude": 37.79581, "longitude": -122.4218856 } } ] } ], "vehicles": [ { "startLocation": { "latitude": 37.73881799999999, "longitude": -122.4161 }, "endLocation": { "latitude": 37.73881799999999, "longitude": -122.4161 } } ], "globalStartTime": "2023-01-13T16:00:00-08:00", "globalEndTime": "2023-01-14T16:00:00-08:00" } } EOMcurl명령어를 복사하려면 코드 샘플에서 복사를 클릭합니다.터미널 창에 명령어를 붙여넣은 후 실행합니다.
응답은 JSON 객체입니다.
{
"routes": [
{
"vehicleStartTime": "2023-01-14T00:00:00Z",
"vehicleEndTime": "2023-01-14T00:39:22Z",
"visits": [
{
"isPickup": true,
"startTime": "2023-01-14T00:00:00Z",
"detour": "0s"
},
{
"startTime": "2023-01-14T00:19:53Z",
"detour": "0s"
}
],
"transitions": [
{
"travelDuration": "0s",
"waitDuration": "0s",
"totalDuration": "0s",
"startTime": "2023-01-14T00:00:00Z"
},
{
"travelDuration": "1193s",
"travelDistanceMeters": 9007,
"waitDuration": "0s",
"totalDuration": "1193s",
"startTime": "2023-01-14T00:00:00Z"
},
{
"travelDuration": "1169s",
"travelDistanceMeters": 9546,
"waitDuration": "0s",
"totalDuration": "1169s",
"startTime": "2023-01-14T00:19:53Z"
}
],
"metrics": {
"performedShipmentCount": 1,
"travelDuration": "2362s",
"waitDuration": "0s",
"delayDuration": "0s",
"breakDuration": "0s",
"visitDuration": "0s",
"totalDuration": "2362s",
"travelDistanceMeters": 18553
}
}
],
"metrics": {
"aggregatedRouteMetrics": {
"performedShipmentCount": 1,
"travelDuration": "2362s",
"waitDuration": "0s",
"delayDuration": "0s",
"breakDuration": "0s",
"visitDuration": "0s",
"totalDuration": "2362s",
"travelDistanceMeters": 18553
},
"usedVehicleCount": 1,
"earliestVehicleStartTime": "2023-01-14T00:00:00Z",
"latestVehicleEndTime": "2023-01-14T00:39:22Z"
}
}
문제 해결
요청이 이 API에서 최종 사용자 인증 정보를 지원하지 않는다는 오류 메시지를 반환하는 경우 ADC 설정 문제 해결을 참조하세요.