API 게이트웨이 및 App Engine 시작하기

이 페이지에서는 App Engine 백엔드 서비스를 관리 및 보호하도록 API 게이트웨이를 설정하는 방법을 보여줍니다.

작업 목록

다음 태스크 목록을 사용하여 튜토리얼을 진행하세요. App Engine 백엔드 서비스에 대해 API 게이트웨이를 배포하기 위해서는 모든 태스크를 수행해야 합니다.

  1. Google Cloud 프로젝트를 만들거나 선택합니다.
  2. 자체 App Engine을 배포하지 않았으면 샘플 앱을 배포합니다. 시작하기 전에를 참조하세요.
  3. 필요한 API 게이트웨이 서비스를 사용 설정합니다.
  4. 앱을 보호하도록 IAP를 구성합니다. IAP 구성을 참조하세요.
  5. API를 기술하는 OpenAPI 사양을 만들고 App Engine에 대한 경로를 구성합니다. API 구성 만들기를 참조하세요.
  6. API 구성을 사용하여 API 게이트웨이를 배포합니다. API 게이트웨이 배포를 참조하세요.
  7. 앱 활동을 추적합니다. API 활동 추적을 참조하세요.
  8. Google Cloud 계정에 요금이 청구되지 않도록 합니다. 삭제를 참조하세요.

시작하기 전에

  1. Google Cloud 콘솔에서 대시보드 페이지로 이동하고 Google Cloud 프로젝트를 선택하거나 만듭니다.

    대시보드 페이지로 이동

  2. 프로젝트에 결제가 사용 설정되어 있는지 확인하세요.

    결제 사용 설정 방법 알아보기

  3. 이 튜토리얼에 사용할 프로젝트 ID를 기록해 둡니다. 이 페이지의 나머지 부분에서는 프로젝트 ID를 PROJECT_ID라고 합니다.

  4. Google Cloud CLI를 다운로드하고 설치합니다.

    gcloud CLI 다운로드

  5. gcloud 구성요소를 업데이트합니다.

    gcloud components update
  6. 기본 프로젝트를 설정합니다. PROJECT_ID를 Google Cloud 프로젝트 ID로 바꿉니다.

    gcloud config set project PROJECT_ID

  7. 자체 App Engine 앱을 배포하지 않았으면 해당 언어별 App Engine 빠른 시작 단계에 따라 Google Cloud CLI를 사용해서 Google Cloud 프로젝트를 선택하거나 만들고 샘플 앱을 배포합니다. 앱 URL은 물론 앱이 배포된 리전 및 프로젝트 ID를 기록해 둡니다.

필수 서비스 사용 설정

API 게이트웨이를 사용하려면 다음 Google 서비스를 사용 설정해야 합니다.

이름 제목
apigateway.googleapis.com API 게이트웨이 API
servicemanagement.googleapis.com Service Management API
servicecontrol.googleapis.com Service Control API

필수 서비스가 사용 설정되어 있는지 확인하려면 다음을 사용하세요.

gcloud services list

필수 서비스가 나열되지 않으면 서비스를 사용 설정하세요.

gcloud services enable apigateway.googleapis.com
gcloud services enable servicemanagement.googleapis.com
gcloud services enable servicecontrol.googleapis.com

gcloud 서비스에 대한 자세한 내용은 gcloud 서비스를 참조하세요.

앱 보안을 위한 IAP 구성

App Engine 앱 보안을 위해 IAP(Identity-Aware Proxy)를 사용하여 요청이 인증되었는지 확인해야 합니다. 이 프로세스에는 프로젝트에 필요한 IAP-secured Web App User 역할을 부여할 멤버 지정이 포함됩니다.

IAP 사용 설정 단계에 따라 애플리케이션에 로그인할 수 있는지 확인합니다.

API 구성 만들기

API 게이트웨이를 사용하여 배포된 App Engine 백엔드에 대한 트래픽을 관리할 수 있으려면 API 구성이 필요합니다.

특수한 주석이 포함된 OpenAPI 사양을 사용해서 API 구성을 만들어 원하는 API 게이트웨이 동작을 정의할 수 있습니다. 앱 호출에 필요한 정보가 API 게이트웨이에 포함되도록 각 App Engine 앱의 URL을 포함하는 Google 특정 필드를 추가해야 합니다.

  1. openapi2-appengine.yaml이라는 텍스트 파일을 만듭니다. 편의상 이 페이지에서는 OpenAPI 사양을 이 파일 이름으로 지칭하지만 원하면 다른 이름을 지정할 수 있습니다.
  2. 아래 표시된 것처럼 openapi2-appengine.yaml 파일의 paths 섹션에 각 앱을 나열합니다.
    # openapi2-appengine.yaml
    swagger: '2.0'
    info:
      title: API_ID optional-string
      description: Sample API on API Gateway with an App Engine backend
      version: 1.0.0
    schemes:
      - https
    produces:
      - application/json
    paths:
      /hello:
        get:
          summary: Greet a user
          operationId: hello
          x-google-backend:
            address: APP_URL
            jwt_audience: IAP_CLIENT_ID
          responses:
            '200':
              description: A successful response
              schema:
                type: string
  3. title 필드에서 API_ID를 API 이름으로 바꾸고 optional-string을 선택한 간략한 설명으로 바꿉니다. API가 아직 없는 경우 명령어로 API 구성을 만들면 사용자가 지정한 이름을 사용해서 API도 생성됩니다. title 필드 값은 이 API에 대해 액세스 권한을 부여하는 API 키를 만들 때 사용됩니다. API ID 이름 지정 가이드라인은 API 이름 지정 요구사항을 참조하세요.
  4. x-google-backend 섹션의 address 필드에서 APP_URL을 App Engine 서비스의 실제 URL(호출된 API의 전체 경로)로 바꿉니다. 예를 들면 https://myapp.an.r.appspot.com/hello입니다.

    IAP_CLIENT_ID를 IAP를 설정할 때 만든 OAuth 클라이언트 ID로 바꿉니다.

  5. 다음 명령어를 입력합니다. 각 항목의 의미는 다음과 같습니다.
    • CONFIG_ID는 API 구성의 이름을 지정합니다.
    • API_ID는 API의 이름을 지정합니다. API가 아직 없으면 이 명령어로 생성됩니다.
    • PROJECT_ID은 Google Cloud 프로젝트 이름을 지정합니다.
    • SERVICE_ACCOUNT_EMAIL은 구성된 인증으로 백엔드의 토큰을 서명하는 데 사용되는 서비스 계정을 지정합니다.
    gcloud api-gateway api-configs create CONFIG_ID \
      --api=API_ID --openapi-spec=openapi2-appengine.yaml \
      --project=PROJECT_ID --backend-auth-service-account=SERVICE_ACCOUNT_EMAIL

    API 구성이 다운스트림 시스템에 전파되기 때문에 이 작업은 완료하는 데 몇 분 정도 걸릴 수 있습니다. 복잡한 API 구성을 만들기 위해서는 최대 10분까지 걸릴 수 있습니다.

  6. API 구성이 생성되었으면 다음 명령어를 실행하여 세부정보를 확인할 수 있습니다.
    gcloud api-gateway api-configs describe CONFIG_ID \
      --api=API_ID --project=PROJECT_ID

API 게이트웨이 배포

이제 API 게이트웨이에 API를 배포할 수 있습니다. API 게이트웨이에 API를 배포하면 API 클라이언트가 API에 액세스하기 위해 사용할 수 있는 외부 URL도 정의됩니다.

다음 명령어를 실행하여 바로 전에 만든 API 구성을 API 게이트웨이에 배포합니다.

gcloud api-gateway gateways create GATEWAY_ID \
  --api=API_ID --api-config=CONFIG_ID \
  --location=GCP_REGION --project=PROJECT_ID

각 항목의 의미는 다음과 같습니다.

  • GATEWAY_ID는 게이트웨이의 이름을 지정합니다.
  • API_ID는 이 게이트웨이와 연결된 API 게이트웨이 API의 이름을 지정합니다.
  • CONFIG_ID는 게이트웨이에 배포된 API 구성의 이름을 지정합니다.
  • GCP_REGION은 배포된 게이트웨이의 Google Cloud 리전입니다.

  • PROJECT_ID은 Google Cloud 프로젝트 이름을 지정합니다.

성공적으로 완료되면 다음 명령어를 사용해서 게이트웨이에 대한 세부정보를 확인할 수 있습니다.

gcloud api-gateway gateways describe GATEWAY_ID \
  --location=GCP_REGION --project=PROJECT_ID

이 명령어 결과에서 defaultHostname 속성 값을 기록해 둡니다. 이 값은 다음 단계에서 배포를 테스트하기 위해 사용되는 게이트웨이 URL의 호스트 이름 부분입니다.

API 배포 테스트

이제 게이트웨이 배포 후 생성된 URL을 사용해서 API로 요청을 보낼 수 있습니다.

다음 curl 명령어를 입력합니다. 각 항목의 의미는 다음과 같습니다.

  • DEFAULT_HOSTNAME은 배포된 게이트웨이 URL의 호스트 이름 부분을 지정합니다. defaultHostname 값은 위에 표시된 gateways describe 명령어 결과에서 찾을 수 있습니다.
  • hello는 API 구성에 지정된 경로입니다.
curl https://DEFAULT_HOSTNAME/hello

예를 들면 다음과 같습니다.

curl https://my-gateway-a12bcd345e67f89g0h.uc.gateway.dev/hello

다음과 같은 출력이 표시됩니다.

My-AppEngineApp: Access denied for user gateway-1a2b3c@04d5e6f35FgdsT73dFrty-tp.iam.gserviceaccount.com requesting https://my-project.appspot.com/helloGET. If you should have access, contact myldap@google.com and include the full text of this message.

완료되었습니다. 이제 API 게이트웨이가 App Engine 백엔드 서비스에 대한 액세스를 관리합니다. App Engine 앱에 액세스 권한을 부여하려면 API 게이트웨이에 대한 올바른 권한을 사용해서 서비스 계정을 구성해야 합니다.

API 활동 추적

  1. Google Cloud 콘솔의 API 게이트웨이 페이지에서 API의 활동 그래프를 확인합니다. API를 클릭하여 개요 페이지에서 활동 그래프를 확인합니다. 요청이 그래프에 반영되는 데 잠시 시간이 걸릴 수 있습니다.

  2. 로그 탐색기 페이지에서 API의 요청 로그를 확인합니다. 로그 탐색기 페이지 링크는 Google Cloud 콘솔의 API 게이트웨이 페이지에서 찾을 수 있습니다.

    API 게이트웨이 페이지로 이동

    API 게이트웨이 페이지에서 다음을 수행합니다.

    1. 확인할 API를 선택합니다.
    2. 세부정보 탭을 클릭합니다.
    3. 로그 아래의 링크를 클릭합니다.

삭제

이 빠른 시작에서 사용한 리소스 비용이 Google Cloud 계정에 청구되지 않도록 하려면 다음 안내를 따르세요.

또는 튜토리얼에 사용된 Google Cloud 프로젝트를 삭제할 수도 있습니다.