App Engine 가변형 환경은 App Engine SDK에 있는 API 라이브러리를 제공하지 않습니다. 애플리케이션을 App Engine 표준 환경에서 가변형 환경으로 마이그레이션하려면 모든 Google Cloud 환경에서 제공하는 서비스와 API를 사용하도록 코드를 업데이트해야 합니다.
특정 기존 번들 서비스 및 API를 표준 환경에서 가변형 환경으로 이전하는 방법에 대한 안내는 다음 섹션을 참조하세요.
표준 환경과 가변형 환경의 차이점
여기에 설명된 주요 차이점 외에도 /_ah/
가 포함된 경로는 가변형 환경에서 차단되지 않습니다. 표준 환경에 있는 앱이 /_ah/
가 포함된 경로를 사용하여 특정 서비스에 액세스하는 경우 아래의 해당 서비스 섹션을 참조하세요.
앱 ID
가변형 환경에서 실행하는 경우 환경 변수와 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에 서명할 수 없습니다. Identity and Access Management(IAM) API를 사용하거나 배포할 때 애플리케이션에 서비스 계정 비공개 키를 제공하여 이 문제를 해결할 수 있습니다.
- 마찬가지로 서명 확인용 공개 인증서를 얻기 위한 내장 API가 없습니다. 하지만 모든 서비스 계정의 공개 인증서는
https://www.googleapis.com/robot/v1/metadata/x509/{service account email}
에서 제공됩니다. - Java 런타임을 사용하는 경우 App Engine SystemProperty API를 App Engine 가변형 환경에서 사용할 수 없습니다. 다만 환경 변수 정의에 설명된 대로
app.yaml
에서 환경 변수를 설정하고System.env
를 사용하여 값을 가져올 수 있습니다.
환경 변수에 관한 자세한 내용은 런타임 개요 페이지 또는 app.yaml
참조 페이지를 참고하세요.
백그라운드 스레드
가변형 환경에는 샌드박스 제한이 없으므로 요청 환경 외부에 상주하는 스레드나 프로세스를 자유롭게 만들 수 있습니다. 일반적으로 사용 중인 언어에 내장된 스레딩 또는 다중 처리 도구 이외에 다른 것을 사용할 필요가 없습니다.
Blobstore
Blobstore 서비스 사용은 표준 환경과 가변형 환경 모두에서 대부분 Cloud Storage로 대체되었습니다. Google Cloud 클라이언트 라이브러리를 사용하여 Cloud Storage에 데이터를 저장하고 검색합니다.
자세한 내용은 Cloud Storage 사용을 참조하세요.
기능
표준 환경 외부에서 제공되는 기능 서비스와 유사한 기능은 없습니다.
WebSocket
App Engine 가변형 환경은 웹소켓을 지원합니다. 자세한 내용은 WebSocket으로 영구 연결 만들기를 참고하세요.
Datastore 모드의 Firestore(Datastore)
Datastore API를 사용하여 어디서나 Datastore에 액세스할 수 있습니다. Google Cloud 클라이언트 라이브러리를 사용하여 Datastore에서 데이터를 저장 및 검색할 수 있습니다.
App Engine 라이브러리 또는 Google Cloud 클라이언트 라이브러리를 사용하거나 API를 직접 호출하는지 여부와 관계없이 동일한 Datastore 데이터를 사용할 수 있습니다.
Python ndb
라이브러리를 사용 중이고 NDB 스타일 Datastore 액세스를 선호하는 경우 Cloud NDB로 마이그레이션하는 것이 좋습니다. 자세한 내용은 Cloud NDB 저장소를 참조하세요.
Cloud NDB와 Cloud Datastore 클라이언트 라이브러리는 Python 2 및 3에서 모두 지원되고 App Engine 표준 환경 또는 가변형 환경 및 App Engine이 아닌 앱에서도 작동하지만, 기본적인 목적은 Python 2 개발자가 App Engine ndb
와 같은 기존의 번들형 서비스에서 벗어나도록 돕는 것입니다.
Cloud NDB에는 NDB 사용자 환경을 보존한다는 추가 목표가 있습니다.
자세한 내용은 Datastore 사용을 참고하세요.
이미지
이미지 서비스는 표준 환경 외부에서 사용할 수 없습니다. 하지만 애플리케이션에서 직접 또는 Cloud Storage에서 직접 이미지를 간편하게 제공할 수 있습니다.
이미지 처리가 필요한 경우 다음과 같은 이미지 처리 라이브러리를 설치하여 사용할 수 있습니다.
- Python의 경우 Pillow
- 자바의 경우 ImageJ2, imgscalr 또는 thumbnailator
- Go의 경우 imaging
- PHP의 경우 GD 또는 ImageMagick
이미지 서비스는 제공 URL로 이미지 크기를 조절하여 애플리케이션에 대한 동적 요청을 방지하는 기능도 제공합니다. 유사한 기능이 필요한 경우 크기가 조절된 이미지를 미리 생성하고 Cloud Storage에 업로드하여 제공할 수 있습니다. 또는 이미지 크기 조절 기능을 제공하는 타사 CDN(콘텐츠 전송 네트워크) 서비스를 사용할 수도 있습니다.
더 많은 리소스를 알아보려면 다음 가이드를 참조하세요.
로깅
표준 환경과 마찬가지로 로깅은 가변형 환경에서 자동으로 작동됩니다. 하지만 로그는 다른 형식으로 수집됩니다.
로그는 요청에 따라 번들로 묶이지 않으며 stdout
및 stderr
의 로그가 별도로 수집됩니다.
애플리케이션 로깅, 로그 그룹화 기능, 추가 메타데이터 로깅 기능을 보다 효율적으로 관리하려면 Google Cloud 클라이언트 라이브러리에서 Cloud Logging API를 직접 사용하면 됩니다.
자세한 내용은 애플리케이션 로그 작성을 참고하세요.
메일
App Engine 메일 서비스는 표준 환경 외부에서 사용할 수 없습니다. 이메일을 보내려면 SendGrid, Mailgun, Mailjet과 같은 타사 메일 제공업체를 사용해야 합니다. 이 모든 서비스가 실행 위치에 상관없이 애플리케이션에서 이메일을 보내기 위한 API를 제공합니다.
자세한 내용은 서드 파티 서비스를 사용하여 메시지 보내기를 참조하세요.
Memcache
App Engine 가변형 환경에서는 Memcache 서비스를 사용할 수 없습니다. 애플리케이션 데이터를 캐시하려면 Redis용 Memorystore를 사용합니다.
모듈
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를 사용하여 애플리케이션에서 서비스와 버전을 배포 및 관리할 수도 있습니다.
환경 변수에 관한 자세한 내용은 런타임 개요 페이지 또는 app.yaml
참조 페이지를 참고하세요.
네임스페이스
표준 환경 외부에서는 Cloud Datastore만 멀티테넌시를 직접 지원합니다. 다른 서비스의 경우 멀티테넌시를 수동으로 처리해야 합니다. 서비스 인스턴스를 완전히 분리하려면 Cloud Resource Manager API를 사용하여 프로그래매틱 방식으로 새 프로젝트를 만들고 프로젝트 전체에서 리소스에 액세스하면 됩니다.
OAuth
가변형 환경에서는 OAuth 서비스를 사용할 수 없습니다. OAuth 2.0 토큰을 확인해야 하는 경우에는 OAuth 2.0 API의 oauth2.tokeninfo
메서드를 사용하면 됩니다.
원격
Remote API 서비스는 가변형 환경에 적용되지 않습니다. 가변형 환경에서 액세스할 수 있는 대부분의 지원 서비스(예: Datastore)도 어디서나 액세스할 수 있습니다.
검색
현재 가변형 환경 외부에서는 검색 서비스를 사용할 수 없습니다. Compute Engine의 Apache Solr 또는 Elastic Cloud의 Elasticsearch 서비스와 같은 전체 텍스트 검색 데이터베이스를 호스팅하고 표준 환경과 가변형 환경 모두에서 액세스할 수 있습니다.
소켓
가변형 환경에는 샌드박스 제한이 없으므로 발신 소켓을 정상적으로 열고 사용할 수 있습니다.
태스크 큐
1세대 표준 환경 외부에서 push 태스크 큐 서비스를 사용하려면 Google Tasks를 사용하면 됩니다.
별도의 작업자가 가져와서 처리할 태스크나 메시지를 큐에 추가와 같이 pull 큐를 사용할 수 있는 여러 상황에서는 유사한 기능을 제공하고 전송을 보장하는 Pub/Sub가 좋은 대안이 될 수 있습니다.
URL 가져오기
URL Fetch 서비스는 가변형 환경에서 사용할 수 없습니다. 하지만 샌드박스 제한이 없으므로 앱이 임의의 HTTP 라이브러리를 사용하여 URL 가져오기 기능을 얻을 수 있습니다.
Python을 사용하는 경우 요청을 사용하는 것이 좋습니다. Java를 사용하는 경우 Java용 Google HTTP 클라이언트 라이브러리 또는 OkHttp를 사용하는 것이 좋습니다.
사용자
사용자 서비스는 표준 환경 외부에서 사용할 수 없습니다. 다음과 같은 모든 HTTP 기반 인증 메커니즘을 가변형 환경에서 사용할 수 있습니다.
- Google Identity Platform: Google 사용자 계정을 인증 및 승인하기 위한 많은 옵션을 제공합니다.
- Firebase 인증: 사용자 이름 및 비밀번호나 Google, Facebook, Twitter 등 제휴 ID를 사용하는 인증을 제공합니다.
- Auth0: 다양한 ID 공급업체 및 싱글 사인온(SSO) 기능을 사용하는 인증을 제공합니다.
- OAuth 2.0 및 OpenID Connect: 선택한 공급업체의 제휴 ID를 제공합니다. Google은 OpenID Connect ID 공급업체입니다. 이외에도 여러 다른 공급업체가 있습니다.
사용자 서비스가 제공되지 않으므로 자바에서는 appengine-web.xml
을, 다른 런타임의 경우에는 app.yaml
을 사용하여 관리자만 URL에 액세스할 수 있도록 설정할 수 없습니다. 애플리케이션 내에서 이 로직을 처리해야 합니다.
다음 단계
가변형 환경과 표준 환경 간의 주요 차이점에 대한 개요와 두 환경을 모두 사용하는 애플리케이션의 가이드라인은 표준 환경 사용자를 위한 App Engine 가변형 환경을 참조하세요.