표준 환경에서 가변형 환경으로 서비스 이전

App Engine 가변형 환경은 App Engine SDK에 있는 API 라이브러리를 제공하지 않습니다. 애플리케이션을 App Engine 표준 환경에서 가변형 환경으로 이전하려는 경우 모든 Google Cloud Platform 환경에서 사용할 수 있는 서비스 및 API를 사용하도록 코드를 업데이트해야 합니다.

특정 서비스 및 API를 표준 환경에서 가변형 환경으로 이전하는 방법에 대한 안내는 다음 섹션을 참조하세요.

표준 환경과 가변형 환경의 차이점

여기에 설명된 주요 차이점 외에도 표준 환경에서 가변형 환경으로 이전할 때 고려해야 할 다른 사소한 차이점도 있습니다.

  • /_ah/가 포함된 경로는 가변형 환경에서 차단되지 않습니다. 표준 환경에 있는 애플리케이션이 /_ah/가 포함된 경로를 사용하여 특정 서비스에 액세스하는 경우 아래 해당 서비스 섹션을 참조하세요.

  • 지출 한도는 App Engine 표준 환경에서만 지원됩니다. 가변형 환경에서는 예산 만들기 및 경보 설정을 고려해야 합니다.

앱 ID

가변형 환경에서 실행하는 경우 환경 변수Google Compute Engine 메타데이터 서비스를 조합하여 애플리케이션 정보를 가져올 수 있습니다.

애플리케이션 정보 액세스 방법
애플리케이션/프로젝트 ID GOOGLE_CLOUD_PROJECT 환경 변수 또는 메타데이터 서버의 /project/project-id 리소스
기본 호스트 이름 App Engine Admin API apps.get 메서드
서비스 계정 이름 메타데이터 서버의 /instance/service-accounts 리소스
OAuth 2.0 액세스 토큰 메타데이터 서버의 /instances/service-accounts 리소스. Compute Engine 서비스 계정 사용자 인증 정보로 인증 문서를 참조하세요.

다음 기능은 직접 사용할 수 없습니다.

  • 프로젝트에 기본 Cloud Storage 버킷이 없습니다. 애플리케이션에서 버킷을 사용하려면 Cloud Storage 버킷을 만들고 프로젝트 ID를 버킷 이름으로 사용하면 됩니다. 그런 다음 애플리케이션의 GOOGLE_CLOUD_PROJECT 환경 변수를 버킷 이름으로 사용하면 됩니다.
  • 기본 서비스 계정으로 blob에 서명할 수 없습니다. Google Identity and Access Management(IAM) API를 사용하거나 배포 시 애플리케이션에 서비스 계정 비공개 키를 제공하여 이 문제를 해결할 수 있습니다.
  • 마찬가지로 서명 확인용 공개 인증서를 얻기 위한 내장 API가 없습니다. 하지만 모든 서비스 계정의 공개 인증서는 https://www.googleapis.com/robot/v1/metadata/x509/{service account email}에 제공됩니다.

백그라운드 스레드

가변형 환경에는 샌드박스 제한이 없으므로 요청 환경 외부에 상주하는 스레드 또는 프로세스를 자유롭게 만들 수 있습니다. 일반적으로 사용 중인 언어에 내장된 스레딩 또는 다중 처리 도구 이외에 다른 것을 사용할 필요가 없습니다.

Blobstore

Blobstore 서비스 사용은 표준 환경과 가변형 환경 모두에서 대부분 Cloud Storage로 대체되었습니다. Google Cloud 클라이언트 라이브러리를 사용하여 Cloud Storage에서 데이터를 저장하고 검색하세요.

자세한 내용은 다음 가이드를 참조하세요.

기능

표준 환경 외부에서 제공되는 기능 서비스와 유사한 기능은 없습니다.

웹소켓

App Engine 가변형 환경은 웹소켓을 지원합니다. 자세한 내용은 다음 가이드를 참조하세요.

Cloud Datastore

Cloud Datastore API를 사용하면 어디서나 Cloud Datastore에 액세스할 수 있습니다. Google Cloud 클라이언트 라이브러리를 사용하면 Cloud Datastore에서 데이터를 저장 및 검색할 수 있습니다.

App Engine 라이브러리 또는 Google Cloud 클라이언트 라이브러리를 사용하는지 아니면 API를 직접 호출하는지에 관계없이 동일한 Cloud Datastore 데이터를 사용할 수 있습니다.

현재 ndbObjectify처럼 표준 환경에서 사용할 수 있는 ORM 라이브러리는 표준 환경 외부에서 지원되지 않습니다.

자세한 내용은 다음 가이드를 참조하세요.

이미지

이미지 서비스는 표준 환경 외부에서 사용할 수 없습니다. 하지만 애플리케이션에서 직접 또는 Cloud Storage에서 직접 이미지를 쉽게 제공할 수 있습니다.

이미지 처리가 필요한 경우 Pillow와 같은 이미지 처리 라이브러리를 설치하여 사용할 수 있습니다.

이미지 서비스는 제공 URL을 사용하여 이미지 크기 조절 작업을 처리함으로써 애플리케이션에 대한 동적 요청을 방지할 수 있는 기능도 제공합니다. 비슷한 기능을 사용하려면 미리 크기가 조절된 이미지를 생성하고 Cloud Storage에 업로드하여 제공하면 됩니다. 또는 이미지 크기 조절 기능을 제공하는 타사 CDN(콘텐츠 전송 네트워크) 서비스를 사용할 수도 있습니다.

더 많은 리소스를 알아보려면 다음 가이드를 참조하세요.

로깅

표준 환경과 마찬가지로 로깅은 가변형 환경에서도 자동으로 수행됩니다. 하지만 로그는 다른 형식으로 수집됩니다. 로그는 요청에 따라 번들로 묶이지 않으며 stdoutstderr의 로그가 따로 수집됩니다.

애플리케이션 로깅, 로그 그룹화 기능, 추가 메타데이터 로깅 기능을 보다 효율적으로 관리하려면 Google Cloud 클라이언트 라이브러리에서 Stackdriver Logging API를 직접 사용하면 됩니다.

자세한 내용은 다음 가이드를 참조하세요.

메일

App Engine 메일 서비스는 표준 환경 외부에서 사용할 수 없습니다. 이메일을 보내려면 SendGrid, Mailgun, Mailjet과 같은 타사 메일 제공업체를 사용해야 합니다. 이 모든 서비스가 실행 위치에 상관없이 애플리케이션에서 이메일을 보내기 위한 API를 제공합니다.

다음 가이드에서는 이러한 서비스를 가변형 환경에서 사용하는 방법을 보여줍니다.

Memcache

Memcache 서비스는 현재 App Engine 가변형 환경에서 사용할 수 없습니다. Memcache 서비스의 알파 버전이 곧 출시될 예정입니다. 서비스가 출시될 때 알림을 받으려면 사전 체험판 양식을 작성해 주세요.

Memcache 서비스에 즉시 액세스해야 하는 경우 Redis Labs의 타사 Memcache 서비스를 사용할 수 있습니다. 이 서비스에 액세스하려면 Redis Labs Memcache를 사용하여 애플리케이션 데이터 캐싱을 참조하세요.

타사 완전 관리형 서비스인 Redis Labs Redis Cloud를 사용할 수도 있습니다. 이 서비스에 액세스하려면 Redis Labs Redis를 사용하여 애플리케이션 데이터 캐싱을 참조하세요.

Modules

Modules API는 표준 환경 외부에서 사용할 수 없습니다. 하지만 환경 변수App Engine Admin API를 조합하여 애플리케이션에서 실행 중인 서비스에 대한 정보를 가져오고 서비스를 수정할 수 있습니다.

서비스 정보 액세스 방법
현재 서비스 이름 GAE_SERVICE 환경 변수
현재 서비스 버전 GAE_VERSION 환경 변수
현재 인스턴스 ID GAE_INSTANCE 환경 변수
기본 호스트 이름 App Engine Admin API apps.get 메서드
서비스 목록 App Engine Admin API apps.services.list 메서드
서비스 버전 목록 App Engine Admin API apps.services.versions.list 메서드
트래픽 분할을 포함한 서비스의 기본 버전 App Engine Admin API apps.services.get 메서드
특정 버전으로 실행 중인 인스턴스 목록 App Engine Admin API apps.services.versions.instances.list 메서드

App Engine Admin API를 사용하여 애플리케이션에서 서비스와 버전을 배포관리할 수도 있습니다.

네임스페이스

표준 환경 외부에서는 Cloud Datastore멀티테넌시를 직접 지원합니다. 다른 서비스의 경우 수동으로 다중 테넌트 지원을 처리해야 합니다. 서비스 인스턴스를 완전히 분리하려면 Cloud Resource Manager API를 사용하여 프로그래매틱 방식으로 새 프로젝트를 만들고 프로젝트 전체에서 리소스에 액세스하면 됩니다.

OAuth

가변형 환경에서는 OAuth 서비스를 사용할 수 없습니다. OAuth 2.0 토큰을 확인해야 하는 경우에는 OAuth 2.0 APIoauth2.tokeninfo 메서드를 사용하면 됩니다.

원격

Remote API 서비스는 가변형 환경에 적용되지 않습니다. 가변형 환경에서 액세스할 수 있는 Cloud Datastore와 같은 대부분의 백엔드 서비스에는 어디에서나 액세스할 수 있습니다.

검색 서비스는 현재 표준 환경 외부에서 사용할 수 없습니다. Google Compute Engine의 ElasticSearch와 같은 전체 텍스트 검색 데이터베이스를 호스팅하고 표준 환경과 가변형 환경 모두에서 이에 액세스할 수 있습니다.

소켓

가변형 환경에는 샌드박스 제한이 없으므로 발신 소켓을 정상적으로 열고 사용할 수 있습니다.

태스크 큐

1세대 표준 환경 외부에서 push 태스크 큐 서비스를 사용하려면 Cloud Tasks를 사용하면 됩니다.

별도의 작업자가 가져와서 처리할 태스크나 메시지를 큐에 추가하는 경우처럼 pull 큐를 사용할 수 있는 많은 경우에는 Cloud Pub/Sub가 유사한 기능과 전송 보장을 제공하므로 좋은 대안이 될 수 있습니다.

URL 가져오기

URL 가져오기 서비스는 가변형 환경에서 사용할 수 없습니다. 하지만 샌드박스 제한이 없으므로 앱이 임의의 HTTP 라이브러리를 사용하여 URL 가져오기 기능을 사용할 수 있습니다. 요청을 사용하는 것이 좋습니다.

사용자

사용자 서비스는 표준 환경 외부에서 사용할 수 없습니다. 다음과 같은 모든 HTTP 기반 인증 메커니즘을 가변형 환경에서 사용할 수 있습니다.

  • Google Identity Platform: Google 사용자 계정을 인증 및 승인하기 위한 많은 옵션을 제공합니다.
  • Firebase 인증: 사용자 이름 및 비밀번호나 Google, Facebook, Twitter 등 제휴 ID를 사용하는 인증을 제공합니다.
  • Auth0: 다양한 ID 공급업체 및 싱글 사인온(SSO) 기능을 사용하는 인증을 제공합니다.
  • OAuth 2.0OpenID Connect: 선택한 공급업체의 제휴 ID를 제공합니다. Google은 OpenID Connect ID 공급업체입니다. 이외에도 다른 여러 공급업체가 있습니다.

사용자 서비스가 제공되지 않으므로 app.yaml을 사용하여 관리자만 URL에 액세스할 수 있도록 설정할 수 없습니다. 애플리케이션 내에서 이 로직을 처리해야 합니다.

다음 단계

가변형 환경과 표준 환경 간의 주요 차이점에 대한 개요와 두 환경을 모두 사용하는 애플리케이션의 가이드라인은 App Engine 표준 환경 사용자를 위한 App Engine Flexible Environment를 참조하세요.

이 페이지가 도움이 되었나요? 평가를 부탁드립니다.

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

Python 문서용 App Engine 가변형 환경