리전 ID
REGION_ID
는 앱을 만들 때 선택한 리전을 기준으로 Google에서 할당하는 축약된 코드입니다. 일부 리전 ID는 일반적으로 사용되는 국가 및 주/도 코드와 비슷하게 표시될 수 있지만 코드는 국가 또는 주/도와 일치하지 않습니다. 2020년 2월 이후에 생성된 앱의 경우 REGION_ID.r
이 App Engine URL에 포함됩니다. 이 날짜 이전에 만든 기존 앱의 경우 URL에서 리전 ID는 선택사항입니다.
리전 ID에 대해 자세히 알아보세요.
web.xml
배포 설명자 외에도 App Engine 자바 애플리케이션은 appengine-web.xml
이라는 구성 파일을 사용하여 앱에 대한 정보를 지정하고 앱의 WAR
파일에서 이미지와 같은 정적 파일이 무엇인지 식별하고 애플리케이션에서 사용되는 리소스 파일을 식별합니다.
예
다음 예시는 정적 파일 또는 리소스 파일 없이 자바 8 런타임을 지정하는 최소한의 파일입니다.
<?xml version="1.0" encoding="utf-8"?>
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
<threadsafe>true</threadsafe>
<runtime>java8</runtime>
</appengine-web-app>
구문
App Engine Java 앱에는 appengine-web.xml
디렉터리의 WAR에 WEB-INF/
이라는 파일이 있어야 합니다. 이 파일은 루트 요소가 <appengine-web-app>
인 XML 파일입니다.
appengine-web.xml
에 대한 문서 유형 정의와 스키마 사양은 SDK의 docs/
디렉터리에서 찾을 수 있습니다.
요소 | 설명 |
---|---|
<async-session-persistence> |
선택사항. 애플리케이션이 HTTP 세션 데이터를 Datastore에 비동기식으로 쓰도록 구성하여 요청 지연 시간을 줄일 수 있습니다. <?xml version="1.0" encoding="utf-8"?> <appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> <!-- ... --> <async-session-persistence enabled="true" /> <!-- ... --> </appengine-web-app> 비동기 세션 지속성을 사용하면 App Engine은 데이터를 Memcache에 쓰기 전에 세션 데이터를 Datastore에 쓰는 태스크 큐 태스크를 제출합니다. 기본적으로 태스크는 `default` 큐에 제출됩니다. 다른 큐를 사용하려면 `queue-name` 속성을 추가합니다. <?xml version="1.0" encoding="utf-8"?> <appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> <!-- ... --> <async-session-persistence enabled="true" queue-name="myqueue"/> <!-- ... --> </appengine-web-app> 세션 데이터는 항상 동기식으로 Memcache에 기록됩니다. memcache를 사용할 수 없을 때(또는 세션 데이터가 비워졌을 때) 요청이 세션 데이터를 읽으려고 시도하면, 아직 최신 세션 데이터가 포함되지 않을 수 있는 Datastore로 장애 조치됩니다. 이는 비동기 세션 지속성으로 인해 애플리케이션에 비활성 세션 데이터가 보일 수 있음을 의미합니다. 그러나 대부분 애플리케이션의 경우, 지연 시간의 이점이 이러한 위험을 훨씬 능가합니다. |
<auto-id-policy> |
선택사항. 항목 식별자를 자동으로 설정하는 경우, 자동 ID 정책을 설정하여 사용되는 방법을 변경할 수 있습니다. 유효한 옵션은 다음과 같습니다.
|
<automatic-scaling> |
선택사항. 자세한 설명은 자동 확장 섹션을 참조하세요. |
<basic-scaling> |
선택사항. 자세한 설명은 기본 확장 섹션을 참조하세요. |
<env-variables> |
선택사항.
<env-variables> <env-var name="DEFAULT_ENCODING" value="UTF-8" /> </env-variables> 로컬 환경과의 충돌을 방지하기 위해 개발 서버는 이 파일을 바탕으로 환경 변수를 설정하지 않으며 로컬 환경에서 이러한 변수가 이미 일치하는 값으로 설정되어 있도록 요구합니다. export DEFAULT_ENCODING="UTF-8" dev_appserver war App Engine에 배포하면 이러한 변수가 이미 설정된 환경이 생성됩니다. |
<inbound-services> |
선택사항.
애플리케이션에서 이메일을 수신하려면 먼저 해당 서비스를 사용 설정하도록 애플리케이션을 구성해야 합니다.
자바 8 앱에 서비스를 사용 설정하려면 다음과 같은 인바운드 서비스를 사용할 수 있습니다.
|
<instance-class> |
선택사항. 이 모듈의 인스턴스 클래스 크기입니다. 다른 확장 옵션을 지정하는 경우에 다음과 같은 인스턴스 클래스를 사용할 수 있습니다.
|
<manual-scaling> |
선택사항. 자세한 설명은 수동 확장 섹션을 참조하세요. |
<precompilation-enabled> |
선택사항. App Engine은 Java 런타임 환경에서 앱의 성능을 향상시키기 위해 앱의 Java 바이트코드를 '사전 컴파일'합니다. 사전 컴파일된 코드는 원래의 바이트코드와 동일하게 작동합니다. 어떤 이유로 앱이 사전 컴파일을 사용하지 않게 하려면 <?xml version="1.0" encoding="utf-8"?> <appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> <!-- ... --> <precompilation-enabled>false</precompilation-enabled> <!-- ... --> </appengine-web-app> |
module |
참고: 서비스의 이전 명칭은 '모듈'이며 서비스를 만들 경우 필수 항목입니다. 기본 서비스의 경우에는 선택사항입니다. 각 서비스와 버전에는 이름이 있어야 합니다. 이름에는 숫자, 문자, 하이픈이 포함될 수 있습니다. 63자(영문)를 초과할 수 없으며 하이픈으로 시작하거나 끝날 수 없고 문자열 `-dot`를 포함할 수 없습니다. 각 서비스와 버전에 고유한 이름을 선택하세요. 서비스와 버전 간에 이름을 재사용하지 마세요. 서비스를 참조하세요. |
<public-root> |
선택사항.
예를 들어 다음은 URL 경로 <?xml version="1.0" encoding="utf-8"?> <appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> <!-- ... --> <public-root>/static</public-root> <!-- ... --> </appengine-web-app> |
<resource-files> |
선택사항.
App Engine 리소스 파일은 |
runtime |
자바 8 런타임을 사용하려면 예: <?xml version="1.0" encoding="utf-8"?> <appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> <!-- ... --> <runtime>java8</runtime> <!-- ... --> </appengine-web-app> |
service |
서비스의 이전 명칭은 모듈입니다. 현재는 gcloud app 명령어를 통해 |
service-account |
선택사항. <?xml version="1.0" encoding="utf-8"?> <appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> <!-- ... --> <service-account>[SERVICE_ACCOUNT_NAME]@[PROJECT_ID].iam.gserviceaccount.com</service-account> <!-- ... --> </appengine-web-app> |
<sessions-enabled> |
선택사항. App Engine에는 서블릿 세션 인터페이스를 사용하여 구현된 세션이 포함됩니다. 이 구현은 지속성을 위해 Datastore의 세션 데이터를 저장하며 속도를 높이기 위해 Memcache도 사용합니다. 대부분의 다른 서블릿 컨테이너와 마찬가지로, 요청 중에 `session.setAttribute()`로 설정된 세션 속성은 요청이 끝날 때까지 지속됩니다.
이 기능은 기본적으로 사용 중지되어 있습니다. 이 기능을 사용 설정하려면 <?xml version="1.0" encoding="utf-8"?> <appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> <!-- ... --> <sessions-enabled>true</sessions-enabled> <!-- ... --> </appengine-web-app>
이 구현은 참고: App Engine은 Datastore와 Memcache에 세션 데이터를 저장하므로, 세션에 저장된 모든 값은 세션 데이터 스토리지 지연 시간을 줄이기 위한 방법은 |
<ssl-enabled> |
선택사항. 기본적으로 모든 사용자는 HTTP 또는 HTTPS를 사용하여 모든 URL에 액세스할 수 있습니다. 사용자는 배포 설명자의 특정 URL에 대해 HTTPS를 요구하도록 앱을 구성할 수 있습니다. 배포 설명자: 보안 URL을 참조하세요. 애플리케이션에 HTTPS 사용을 허용하지 않으려면 <?xml version="1.0" encoding="utf-8"?> <appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> <!-- ... --> <ssl-enabled>false</ssl-enabled> <!-- ... --> </appengine-web-app> Java 런타임 환경에서 일부 URL 경로에 대해서만 HTTPS를 허용하지 않는 방법은 없습니다. |
<static-error-handlers> |
선택사항.
특정 오류가 발생하면 App Engine은 일반 오류 페이지를 제공합니다. 커스텀 오류 데이터가 10KB 미만인 경우, 이러한 일반 오류 페이지 대신 커스텀 정적 파일을 제공하도록 앱을 구성할 수 있습니다. 앱의 <static-error-handlers> <handler file="default_error.html" /> <handler file="over_quota.html" error-code="over_quota" /> </static-error-handlers> 경고: 오류 응답 파일의 경로가 정적 파일 핸들러 경로와 겹치지 않는지 확인하세요.
각
커스텀 오류를 처리할 때 사용할 |
<static-files> |
선택사항.
<static-files> <include path="/my_static-files" > <http-header name="Access-Control-Allow-Origin" value="http://example.org" /> </include> </static-files> |
<system-properties> |
선택사항. <system-properties> <property name="myapp.maximum-message-length" value="140" /> <property name="myapp.notify-every-n-signups" value="1000" /> <property name="myapp.notify-url" value="http://www.example.com/signupnotify" /> </system-properties> <env-variables> <env-var name="DEFAULT_ENCODING" value="UTF-8" /> </env-variables> |
<threadsafe> |
필수 항목.
<?xml version="1.0" encoding="utf-8"?> <appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> <!-- ... --> <threadsafe>true</threadsafe> <!-- ... --> </appengine-web-app> 동시 요청을 사용하려면 이 요소는 자바 11 이상 런타임에서 지원되지 않습니다. |
<url-stream-handler> |
선택사항. 가능한 값은 기본값은
<?xml version="1.0" encoding="utf-8"?> <appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> <!-- ... --> <url-stream-handler>urlfetch</url-stream-handler> <!-- ... --> </appengine-web-app> |
<version> |
항상 숫자로 지정되는 숫자 인스턴스와 구분되도록 버전 이름은 문자로 시작되어야 합니다. 이렇게 하면
App Engine에서 이 버전 식별자를 사용하여 지정된 식별자로 새 버전의 앱을 만들지(또는 앱이 이미 존재하는 경우 지정된 식별자로 앱 버전을 바꿀지) 여부를 결정합니다. URL의 하위 도메인 구분 기호로 '-dot-'을 사용하는 URL(예: |
<warmup-requests-enabled> |
선택사항. 기본값은 true입니다. 준비 요청은 기본적으로 자바 8 애플리케이션에서 사용 설정됩니다.
준비 요청이 사용 설정되면 App Engine 인프라는 준비 요청을 중지하려면 이 요소에 대해 <?xml version="1.0" encoding="utf-8"?> <appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> <!-- ... --> <warmup-requests-enabled>false</warmup-requests-enabled> <!-- ... --> </appengine-web-app> |
<vpc-access-connector> |
선택사항. 서버리스 VPC 액세스 커넥터를 사용하도록 애플리케이션을 구성하여 애플리케이션이 VPC 네트워크의 내부 리소스에 요청을 보낼 수 있게 합니다. 자세한 내용은 VPC 네트워크에 연결을 참조하세요.
<vpc-access-connector> <name>projects/PROJECT_ID/locations/REGION/connectors/CONNECTOR_NAME</name> <egress-setting>all-traffic</egress-setting> </vpc-access-connector> |
요소 확장
다음 표에는 애플리케이션 확장을 지정하는 방법을 정의하는 옵션이 나와 있습니다.
확장 유형의 성능 특징 비교에 대해서는 동적 인스턴스 확장을 참조하세요.
요소 | 설명 |
---|---|
<automatic-scaling> |
선택사항. 달리 지정되지 않는 한 기본적으로 자동 확장에는 기본 인스턴스 클래스
이 요소에는 다음 요소가 포함될 수 있습니다.
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> <application>simple-app</application> <module>default</module> <version>uno</version> <threadsafe>true</threadsafe> <instance-class>F2</instance-class> <automatic-scaling> <target-cpu-utilization>0.65</target-cpu-utilization> <min-instances>5</min-instances> <max-instances>100</max-instances> <max-concurrent-requests>50</max-concurrent-requests> </automatic-scaling> </appengine-web-app> |
<basic-scaling> |
선택사항.
이 요소에는 다음 요소가 포함될 수 있습니다.
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> <application>simple-app</application> <module>default</module> <version>uno</version> <threadsafe>true</threadsafe> <instance-class>B8</instance-class> <basic-scaling> <max-instances>11</max-instances> <idle-timeout>10m</idle-timeout> </basic-scaling> </appengine-web-app> |
<manual-scaling> |
선택사항.
이 요소에는 다음 요소가 포함될 수 있습니다.
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> <application>simple-app</application> <module>default</module> <version>uno</version> <threadsafe>true</threadsafe> <instance-class>B8</instance-class> <manual-scaling> <instances>5</instances> </manual-scaling> </appengine-web-app> |
스테이징 요소
배포 중에 수행되는 대부분의 작업은 스테이징이라 하는 준비 단계에서 로컬로 수행되며, 이 과정에서 JAR 파일 어셈블, JSP 컴파일 등의 작업이 수행됩니다. 선택사항으로 애플리케이션 구성 파일의 스테이징 요소를 사용하여 스테이징 동작의 특정 부분을 구성할 수 있습니다. 대부분의 애플리케이션은 스테이징 동작을 수동으로 구성하지 않고도 성공적으로 배포됩니다. 앱이 배포되지 않는 경우, 아래에 있는 옵션을 사용하여 스테이징을 구성해야 할 수도 있습니다.
요소 | 설명 |
---|---|
<staging> |
선택사항. 대부분의 애플리케이션은 기본 동작을 변경할 필요가 없습니다. 스테이징 요소를 사용하면 배포를 위해 필요한 경우에 특정 스테이징 구성을 지정할 수 있습니다. 이 요소에는 다음 요소가 포함될 수 있습니다.
예를 들면 다음과 같습니다. <staging> <delete-jsps>false</delete-jsps> </staging> |
스테이징 옵션 기본값
스테이징 옵션의 세부정보는 다음과 같습니다.
스테이징 요소 | 기본값 |
---|---|
enable-jar-splitting |
true |
jar-splitting-excludes |
NA |
disable-jar-jsps |
false |
enable-jar-classes |
true . 클래스 로딩 순서에 영향을 줄 수 있으므로, 앱이 특정 순서에 의존하는 경우에는 이 요소를 false 로 설정할 수 있습니다. |
delete-jsps |
true |
compile-encoding |
utf-8 |
포함 및 제외 구문
경로 패턴은 <include>
및 <exclude>
요소를 0개 이상의 사용하여 지정됩니다. 패턴에서 '*'
는 파일 또는 디렉터리 이름의 문자를 0개 이상 나타내고, **
는 경로에 있는 디렉터리를 0개 이상 나타냅니다. 앱을 App Engine에 배포하면 <exclude>
패턴과 일치하는 파일과 디렉터리는 업로드되지 않습니다. 단, 로컬 개발 서버에서 실행하는 경우에는 이러한 파일과 디렉터리는 애플리케이션에 계속 액세스할 수 있습니다.
<include>
요소는 모든 파일을 포함하는 기본 동작을 재정의합니다. <exclude>
요소는 모든 <include>
패턴(그리고 <include>
를 명시적으로 제공하지 않은 경우에는 기본값) 이후에 적용됩니다.
다음 예시는 모든 .png
파일(data/
디렉터리와 해당 하위 디렉터리의 파일 제외)을 정적 파일로 지정하는 방법을 보여줍니다.
<static-files>
<include path="/**.png" />
<exclude path="/data/**.png" />
</static-files>
이러한 정적 리소스에 대한 요청 응답 시에 사용할 HTTP 헤더를 설정할 수도 있습니다.
<static-files>
<include path="/my_static-files" >
<http-header name="Access-Control-Allow-Origin"
value="http://example.org" />
</include>
</static-files>
정적 파일의 MIME 유형
기본적으로 정적 파일은 파일 이름 확장명에 따라 선택된 MIME 유형을 사용하여 제공됩니다. web.xml
에서 <mime-mapping>
요소를 사용하여 정적 파일의 파일 이름 확장명에 커스텀 MIME 유형을 연결할 수 있습니다.
URLFetch 제한 시간
각 URLFetch 요청에 기한을 설정할 수 있습니다. 기본적으로 가져오기 기한은 5초입니다.
appengine-web.xml
구성 파일에 다음 설정을 포함하여 이 기본값을 변경할 수 있습니다. 다음 명령어를 입력하여 시간 제한을 초 단위로 지정합니다.
<system-properties>
<property name="appengine.api.urlfetch.defaultDeadline" value="10"/>
</system-properties>