appengine-web.xml 참조

리전 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 자바 앱에는 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 정책을 설정하여 사용되는 방법을 변경할 수 있습니다. 유효한 옵션은 다음과 같습니다.
default
기본값. 64비트 부동 소수점으로 표시될 수 있을 만큼 작고 적절하게 분포된 큰 정수인 분산형 자동 ID를 사용합니다.
legacy
이전 옵션은 이후 출시 버전에서 지원 중단되고 결국 삭제될 예정입니다. 자세한 내용은 이 변경 사항을 알리는 블로그 게시물을 참조하세요.
<automatic-scaling>

선택사항. 자세한 설명은 자동 확장 섹션을 참조하세요.

<basic-scaling>

선택사항. 자세한 설명은 기본 확장 섹션을 참조하세요.

<env-variables>

선택사항. appengine-web.xml 파일은 애플리케이션이 실행 중에 설정되는 환경 변수를 정의할 수 있습니다.


<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 앱에 서비스를 사용 설정하려면 appengine-web.xml 파일에 <inbound-services> 섹션을 포함합니다.

다음과 같은 인바운드 서비스를 사용할 수 있습니다.

mail
애플리케이션이 메일을 수신하도록 허용합니다.
<instance-class>

선택사항. 이 모듈의 인스턴스 클래스 크기입니다.

다른 확장 옵션을 지정하는 경우에 다음과 같은 인스턴스 클래스를 사용할 수 있습니다.

automatic_scaling
자동 확장을 사용하면 F1, F2, F4, F4_1G 인스턴스 클래스를 사용할 수 있습니다.
기본값: automatic_scaling 요소 사용 시 인스턴스 클래스를 지정하지 않으면 F1이 할당됩니다.
basic_scaling
기본 확장을 사용하면 B1, B2, B4, B4_1G, B8 인스턴스 클래스를 사용할 수 있습니다.
기본값: basic_scaling 요소 사용 시 인스턴스 클래스를 지정하지 않으면 B2가 할당됩니다.
manual_scaling
수동 확장을 사용하면 B1, B2, B4, B4_1G, B8 인스턴스 클래스를 사용할 수 있습니다.
기본값: manual_scaling 요소 사용 시 인스턴스 클래스를 지정하지 않으면 B2가 할당됩니다.

참고: instance-classF2 이상으로 설정되면 max-concurrent-requests를 기본값인 10보다 큰 값으로 설정하여 인스턴스를 최적화할 수 있습니다. 최적 값을 찾으려면 값을 점차적으로 늘리면서 애플리케이션 성능을 모니터링하세요.

<manual-scaling>

선택사항. 자세한 설명은 수동 확장 섹션을 참조하세요.

<precompilation-enabled>

선택사항. App Engine은 자바 런타임 환경에서 앱의 성능을 향상시키기 위해 앱의 자바 바이트코드를 '사전 컴파일'합니다. 사전 컴파일된 코드는 원래의 바이트코드와 동일하게 작동합니다.

어떤 이유로 앱이 사전 컴파일을 사용하지 않게 하려면 appengine-web.xml 파일에 다음을 추가하여 사전 컴파일을 사용 중지할 수 있습니다.


<?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

참고: 서비스의 이전 명칭은 '모듈'이며 appengine-web.xml 파일에서 서비스는 계속해서 모듈로 선언됩니다. 예를 들면 <module>service_name</module>입니다.

서비스를 만들 경우 필수 항목입니다. 기본 서비스의 경우에는 선택사항입니다. 각 서비스와 버전에는 이름이 있어야 합니다. 이름에는 숫자, 문자, 하이픈이 포함될 수 있습니다. 63자(영문)를 초과할 수 없으며 하이픈으로 시작하거나 끝날 수 없고 문자열 `-dot`를 포함할 수 없습니다. 각 서비스와 버전에 고유한 이름을 선택하세요. 서비스와 버전 간에 이름을 재사용하지 마세요.

서비스를 참조하세요.

<public-root>

선택사항. <public-root>는 애플리케이션의 정적 파일이 포함된 애플리케이션의 디렉터리입니다. 정적 파일에 대한 요청이 실행되면 요청 경로 앞에 애플리케이션의 <public-root>가 추가됩니다. 이에 따라 요청된 콘텐츠가 있는 애플리케이션 파일 경로가 제공됩니다.

<public-root>의 기본값은 /입니다.

예를 들어 다음은 URL 경로 /index.html을 애플리케이션 파일 경로 /static/index.html로 매핑합니다.


<?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>

선택사항. <resource-files> 요소에 나열된 파일은 파일 시스템을 사용하여 애플리케이션 코드에 액세스할 수 있습니다. 이러한 파일은 정적 파일을 저장하고 제공하는 방식과 달리 앱과 함께 애플리케이션 서버에 저장됩니다.

<resource-files> 요소는 다음 요소를 포함할 수 있습니다.

<include>
<include> 요소는 파일을 리소스 파일로 지정하며 애플리케이션 코드에서 사용될 수 있습니다. 이 파일은 트래픽 서비스 제공이 아닌 읽기 전용으로만 코드에서 사용될 수 있습니다. 파일 포함 및 제외.
<exclude>

<exclude> 패턴과 일치하는 파일 및 디렉터리는 애플리케이션 코드에 업로드하거나 사용할 수 없습니다. 단, 로컬 개발 서버에서 실행하는 경우에는 이러한 파일과 디렉터리는 애플리케이션에 계속 액세스할 수 있습니다. 자세한 내용은 파일 포함 및 제외를 참조하세요.

예:

<resource-files>
  <include path="/**.xml" />
  <exclude path="/feeds/**.xml" />
</resource-files>

이 예시는 feeds/ 디렉터리와 해당 하위 디렉터리의 파일을 제외하고 모든 .xml 파일을 리소스 파일로 지정하는 방법을 보여줍니다.

App Engine 리소스 파일은 java.io.File 또는 javax.servlet.ServletContext.getResource/getResourceAsStream을 사용하여 읽습니다. 이들은 Class.getResourceAsStream()을 통해 액세스할 수 없습니다.

runtime

자바 8 런타임을 사용하려면 java8 값으로 이 항목을 지정해야 합니다.

예:


<?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>service_name</service >로 서비스를 정의하는 것만 지원됩니다.

service_account

선택사항. service_account 요소를 사용하면 사용자 관리 서비스 계정을 버전의 ID로 지정할 수 있습니다. 지정된 서비스 계정은 다른 Google Cloud 서비스에 액세스하고 작업을 실행할 때 사용됩니다.

예:

<?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()`로 설정된 세션 속성은 요청이 끝날 때까지 지속됩니다.

이 기능은 기본적으로 사용 중지되어 있습니다. 이 기능을 사용 설정하려면 appengine-web.xml에 다음을 추가하세요.

예:

<?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>

이 구현은 _ah_SESSION 종류의 Datastore 항목과 프리픽스가 _ahs인 키를 사용하여 Memcache 항목을 만듭니다. 이러한 항목은 Dataflow 템플릿을 사용하여 삭제할 수 있습니다.

참고: App Engine은 Datastore와 Memcache에 세션 데이터를 저장하므로, 세션에 저장된 모든 값은 java.io.Serializable 인터페이스를 구현해야 합니다.

세션 데이터 스토리지 지연 시간을 줄이기 위한 방법은 async-session-persistence 요소를 참조하세요.

<ssl-enabled>

선택사항. 기본적으로 모든 사용자는 HTTP 또는 HTTPS를 사용하여 모든 URL에 액세스할 수 있습니다. 사용자는 배포 설명자의 특정 URL에 대해 HTTPS를 요구하도록 앱을 구성할 수 있습니다. 배포 설명자: 보안 URL을 참조하세요.

애플리케이션에 HTTPS 사용을 허용하지 않으려면 appengine-web.xml 파일에 다음을 추가합니다.


<?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>

자바 런타임 환경에서 일부 URL 경로에 대해서만 HTTPS를 허용하지 않는 방법은 없습니다.

<static-error-handlers>

선택사항. 특정 오류가 발생하면 App Engine은 일반 오류 페이지를 제공합니다. 커스텀 오류 데이터가 10KB 미만인 경우, 이러한 일반 오류 페이지 대신 커스텀 정적 파일을 제공하도록 앱을 구성할 수 있습니다. 앱의 appengine-web.xml 파일에 여러 파일을 지정하여 지원되는 각 오류 코드에 대해 제공할 다양한 정적 파일을 설정할 수 있습니다. 커스텀 오류 페이지를 제공하려면 이 예시와 같이 appengine-web.xml<static-error-handlers> 섹션을 추가합니다.


<static-error-handlers>
  <handler file="default_error.html" />
  <handler file="over_quota.html" error-code="over_quota" />
</static-error-handlers>

경고: 오류 응답 파일의 경로가 정적 파일 핸들러 경로와 겹치지 않는지 확인하세요.

file 항목은 일반 오류 응답을 대신 제공해야 하는 정적 파일을 나타냅니다. error-code는 연관된 파일 제공을 유발하는 오류 코드를 나타냅니다. 지원되는 오류 코드는 다음과 같습니다.

over_quota
앱이 리소스 할당량을 초과했음을 나타냅니다.
timeout
앱에서 응답하기 전 기한에 도달한 경우에 사용됩니다.

error-code는 선택사항입니다. 지정하지 않으면 제공된 파일이 앱의 기본 오류 응답이 됩니다.

커스텀 오류를 처리할 때 사용할 mime-type을 선택사항으로 지정할 수 있습니다. MIME 유형의 전체 목록을 참조하세요.

<static-files>

선택사항. <static-files> 요소는 정적 파일 목록에 포함하거나 해당 목록에서 제외할 파일 경로와 일치하는 패턴을 지정하여 기본 동작을 재정의하거나 수정합니다. 정적 파일은 애플리케이션 서버와는 별도의 전용 서버 및 캐시에서 제공되고 이미지, CSS 스타일시트 또는 자바스크립트 파일과 같은 정적 콘텐츠를 제공하는 데 유용합니다.

<static-files> 요소는 다음 요소를 포함할 수 있습니다.

<include>

<include> 요소는 모든 비JSP 파일을 포함하는 기본 동작을 재정의합니다. <include> 요소는 지정된 리소스에 대한 요청 응답 시에 사용할 HTTP 헤더를 지정할 수 있습니다. 자세한 내용은 파일 포함 및 제외를 참조하세요.

include 요소에 expiration 속성을 지정하여 기본 정적 캐시 만료 시간을 재정의할 수 있습니다. 값은 공백으로 구분된 숫자와 단위 문자열입니다. 단위는 d(일), h(시간), m(분), s(초)일 수 있습니다. 예를 들어 "4d 5h"는 파일이 처음 요청된 후 4일 5시간으로 캐시 만료 시간을 설정합니다. 자세한 내용은 캐시 만료를 참조하세요.

<exclude>
앱을 App Engine에 배포하면 <exclude> 패턴과 일치하는 파일과 디렉터리는 업로드되지 않습니다. 단, 로컬 개발 서버에서 실행하는 경우에는 이러한 파일과 디렉터리는 애플리케이션에 계속 액세스할 수 있습니다. 자세한 내용은 파일 포함 및 제외를 참조하세요.

<static-files>
  <include path="/my_static-files" >
    <http-header name="Access-Control-Allow-Origin"
                 value="http://example.org" />
  </include>
</static-files>
<system-properties>

선택사항. appengine-web.xml 파일은 애플리케이션이 실행 중에 설정되는 시스템 속성과 환경 변수를 정의할 수 있습니다.


<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>

필수. appengine-web.xmlthreadsafe 요소가 false이면 App Engine은 요청을 지정된 웹 서버에 순차적으로 전송합니다. 값이 true이면 App Engine은 여러 요청을 동시에 보낼 수 있습니다.


<?xml version="1.0" encoding="utf-8"?>
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
  <!-- ... -->
  <threadsafe>true</threadsafe>
  <!-- ... -->
</appengine-web-app>

동시 요청을 사용하려면 threadsafe를 사용 설정하기 전에 애플리케이션 코드가 적절한 스레드 동기화를 사용해야 합니다.

<url-stream-handler>

선택사항. 가능한 값은 native 또는 urlfetch입니다.

기본값은 native이며, 이는 표준 자바 네트워크 클래스가 표준 자바 HTTP(S) 전송을 사용함을 의미합니다. 이 설정을 사용하려면 앱에서 결제를 사용 설정해야 합니다. 그렇지 않으면 발행 요청에 설명된 것처럼 예외가 발생합니다.

url-stream-handlerurlfetch로 설정하면 URL.openConnection 및 관련 메서드가 httphttps 전송에 URL 가져오기를 사용합니다.


<?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>

<version> 요소에는 앱 코드의 최신 버전에 대한 버전 식별자가 포함됩니다. 버전 식별자는 소문자, 숫자, 하이픈을 포함할 수 있습니다. 프리픽스 'ah-'로 시작될 수 없으며, 'default'와 'latest' 이름은 예약된 이름이므로 사용될 수 없습니다.

항상 숫자로 지정되는 숫자 인스턴스와 구분되도록 버전 이름은 문자로 시작되어야 합니다. 이렇게 하면 123.my-module.uc.r.appspot.com과 같이 2가지로 해석될 수 있는 URL의 모호성을 방지할 수 있습니다. 즉, URL에 버전 '123'이 있으면 대상은 제공된 모듈의 버전 '123'이 됩니다. 해당 버전이 존재하지 않으면 타겟팅은 모듈 기본 버전의 123번 인스턴스입니다.

App Engine에서 이 버전 식별자를 사용하여 지정된 식별자로 새 버전의 앱을 만들지(또는 앱이 이미 존재하는 경우 지정된 식별자로 앱 버전을 바꿀지) 여부를 결정합니다. URL의 하위 도메인 구분 기호로 '-dot-'을 사용하는 URL(예: https://VERSION_ID-dot-default-dot-PROJECT_ID.REGION_ID.r.appspot.com)로 새 버전의 앱을 테스트할 수 있습니다. Google Cloud Console을 사용하면 앱의 기본 버전을 선택할 수 있습니다. 기본 버전은 버전을 지정하지 않거나 잘못된 버전을 지정한 경우에 로드됩니다.

<warmup-requests-enabled>

선택사항. 기본값은 true입니다. 준비 요청은 기본적으로 자바 8 애플리케이션에서 사용 설정됩니다.

준비 요청이 사용 설정되면 App Engine 인프라는 /_ah/warmup에 `GET` 요청을 보내 <load-on-startup> 서블릿, ServletContextListeners, 커스텀 준비 서블릿을 초기화합니다. 따라서 애플리케이션 코드를 필요에 따라 초기화할 수 있습니다. 선택한 방법에 따라 /_ah/warmup에 대한 고유한 핸들러를 구현해야 할 수도 있습니다.

준비 요청을 중지하려면 이 요소에 대해 false를 지정합니다.


<?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 네트워크에 연결을 참조하세요.

name
서버리스 VPC 액세스 커넥터의 정규화된 이름을 지정합니다.

projects/PROJECT_ID/locations/REGION/connectors/CONNECTOR_NAME
egress-setting
선택사항. 기본값은 private-ranges-only입니다. egress-setting은 다음 중 하나일 수 있습니다.
private-ranges-only
기본값. 내부 IP 주소에 대한 요청은 서버리스 VPC 액세스 커넥터를 거쳐 연결된 VPC 네트워크로 전송됩니다. 외부 IP 주소에 대한 요청은 공개 인터넷으로 전송됩니다.
all-traffic
모든 요청은 서버리스 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>

선택사항. 달리 지정되지 않는 한 기본적으로 자동 확장에는 기본 인스턴스 클래스 F1이 사용됩니다.

automatic_scaling 요소는 모듈의 인스턴스 수, 지연 시간, 동시 연결에 대한 최소 및 최대 수준을 설정합니다.

이 요소는 다음 요소를 포함할 수 있습니다.

<target-cpu-utilization>
선택사항. 0.5~0.95 사이의 값을 지정합니다.

이 매개변수는 트래픽 처리를 위해 새 인스턴스가 시작되는 CPU 사용량 임계값을 지정합니다. 이렇게 하면 성능과 비용 간의 균형을 유지할 수 있습니다. 값을 낮추면 성능과 비용이 높아지고, 값을 높이면 성능이 낮아지지만 비용도 낮아집니다. 예를 들어 값이 0.7이면 CPU 사용량이 70%에 도달한 후 새 인스턴스가 시작됩니다.

<target-throughput-utilization>
선택사항. 0.5~0.95 사이의 값을 지정합니다.

동시 요청으로 인해 새 인스턴스가 시작되는 경우를 지정하기 위해 max-concurrent-requests과 함께 사용됩니다. 동시 요청 수가 max-concurrent-requeststarget-throughput-utilization을 곱한 값에 도달하면 스케줄러는 새 인스턴스를 시작합니다.

<max-instances>
선택사항. 이 애플리케이션 버전에 대해 App Engine이 만들 수 있는 최대 인스턴스 수입니다. 이 값은 모듈 비용을 제한하는 데 유용합니다. 0에서 2147483647 사이의 값을 지정합니다.
<min-instances>
선택사항. 이 모듈 버전에 대해 App Engine이 만들 수 있는 최소 인스턴스 수입니다. 이러한 인스턴스는 요청이 도착했을 때 트래픽을 처리하고 트래픽 처리를 위해 추가 인스턴스가 시작되었을 때도 계속 트래픽을 처리합니다.

0에서 1,000 사이의 값을 지정합니다. 매개변수를 값 0으로 설정하면 요청이 처리되지 않을 때 비용 절감을 위해 인스턴스를 0개로 조정할 수 있습니다. 트래픽을 수신 중인지 여부에 관계없이 인스턴스 수에 따라 비용이 청구됩니다.

<max-concurrent-requests>

선택사항. 스케줄러가 새 인스턴스를 만들기 전에 자동 확장 인스턴스가 수락할 수 있는 동시 요청 수입니다(기본값: 10, 최대값: 80).

이 설정이 너무 높으면 API 지연 시간이 늘어날 수 있습니다. 스케줄러는 실제 최대 요청 수에 도달하기 전에 새 인스턴스를 생성할 수 있습니다.

참고: instance-classF2 이상으로 설정되면 max-concurrent-requests를 기본값인 10보다 큰 값으로 설정하여 인스턴스를 최적화할 수 있습니다. 최적 값을 찾으려면 값을 점차적으로 늘리면서 애플리케이션 성능을 모니터링하세요.

<max-idle-instances>

이 버전에 대해 App Engine이 유지해야 하는 최대 유휴 인스턴스 수입니다. 기본값은 'automatic'입니다. 다음 사항에 유의하세요.

  • 최댓값이 높으면 부하 수준이 급상승 이후 정상으로 돌아갈 때 유휴 인스턴스 수가 보다 점진적으로 줄어듭니다. 이렇게 하면 요청 부하가 변동되더라도 애플리케이션이 성능을 안정적으로 유지할 수 있지만 높은 부하 기간 중에 유휴 인스턴스 수가 증가하므로 비용도 늘어납니다.
  • 최댓값이 낮으면 실행 비용이 낮아지지만 부하 수준의 변동 폭이 클 때 성능이 저하될 수 있습니다.

참고: 부하 급증 후 정상 수준으로 다시 조정될 때는 유휴 인스턴스 수가 사용자가 지정한 최댓값을 일시적으로 초과할 수 있습니다. 하지만 사용자가 지정한 최대 개수를 초과하는 인스턴스에 대해서는 비용이 청구되지 않습니다.

<max-pending-latency>

대기 지연 시간이 감소되도록 요청 처리를 위해 추가 인스턴스를 시작하기 전에 App Engine이 대기 큐에서 요청에 허용해야 하는 최대 대기 시간입니다.

  • 최대값이 낮으면 App Engine이 대기 중인 요청에 대해 새 인스턴스를 더 빠르게 시작하므로, 성능이 향상되지만 실행 비용도 높아집니다.
  • 최댓값이 높으면 (대기 중인 요청이 있지만 이를 처리할 유휴 인스턴스가 없는 경우) 요청을 처리하는 데 오래 기다려야 할 수 있지만 애플리케이션 실행 비용은 낮아집니다.
<min-idle-instances>

실행 상태로 유지되고 트래픽을 처리할 수 있는 인스턴스 수입니다. 이 설정은 트래픽을 가장 많이 수신하는 버전에만 적용됩니다. 다음 사항에 유의하세요.

  • 최소값이 낮으면 유휴 기간 중의 실행 비용이 낮아지지만, 갑작스러운 부하 증가에 대응하기 위해 즉시 사용할 수 있는 인스턴스 수가 부족할 수 있습니다.
  • 최솟값이 높으면 요청 부하가 빠르게 급증하더라도 애플리케이션이 대응할 수 있습니다. App Engine은 들어오는 요청을 처리하기 위해 실행 중인 최소 인스턴스 수를 유지합니다. 요청 처리 여부에 관계없이 인스턴스에 대한 요금은 청구됩니다. 이 기능이 올바르게 작동하기 위해서는 준비 요청이 사용 설정되었고 애플리케이션이 준비 요청을 처리할 수 있는지 확인해야 합니다.

    유휴 인스턴스 최소 수를 설정하면 애플리케이션 성능은 대기 중인 지연 시간 영향을 보다 적게 받습니다. App Engine은 유휴 인스턴스를 예약된 상태로 유지하므로, 부하가 매우 크게 증가하는 경우를 제외하고 요청이 대기 중인 대기열에 진입할 가능성이 낮습니다. 예약 상태로 유지할 이상적인 인스턴스 수를 결정하려면 애플리케이션과 예상 트래픽 볼륨을 테스트해야 합니다.

<min-pending-latency>

App Engine이 요청 처리를 위해 새 인스턴스를 시작하기 전에 대기 중인 대기열에서 요청 대기 시간을 허용하는 최소 시간(초)입니다. 0.01에서 15 사이의 값을 지정합니다.

  • 최소값이 낮으면 기존의 모든 인스턴스가 활성화 상태인 경우에 요청이 대기 중인 대기열에 있어야 하는 시간이 줄어듭니다. 따라서 성능은 향상되지만 애플리케이션 실행 비용이 증가합니다.
  • 최솟값이 높으면 기존의 모든 인스턴스가 활성화 상태인 경우에 요청이 대기 중 상태로 유지되는 시간이 늘어납니다. 따라서 실행 비용은 낮아지지만 요청 처리를 위해 사용자가 기다려야 하는 시간이 늘어납니다.

<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>

선택사항. <basic-scaling> 요소는 모듈의 인스턴스 수를 설정합니다.

이 요소는 다음 요소를 포함할 수 있습니다.

<idle-timeout>
선택사항. 마지막 요청을 받은 후 이 시간이 경과되면 인스턴스가 종료됩니다. 기본값은 5분입니다.
<max-instances>
필수. 이 모듈 버전에 대해 App Engine이 만들 수 있는 최대 인스턴스 수입니다. 이 값은 모듈 비용을 제한하는 데 유용합니다.

<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>

선택사항. <manual-scaling> 요소는 모듈에 대해 수동 확장을 사용 설정하고 모듈의 인스턴스 수를 설정합니다.

이 요소는 다음 요소를 포함할 수 있습니다.

<instances>
시작 시 모듈에 할당할 인스턴스 수입니다.

<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>

선택사항. 대부분의 애플리케이션은 기본 동작을 변경할 필요가 없습니다.

스테이징 요소를 사용하면 배포를 위해 필요한 경우에 특정 스테이징 구성을 지정할 수 있습니다.

이 요소는 다음 요소를 포함할 수 있습니다.

<enable-jar-splitting>

선택사항. 큰 Jar 파일(10MB 초과)을 작은 조각으로 분할합니다. (기본값: true).

<jar-splitting-excludes>

쉼표로 구분된 파일 서픽스 목록을 지정합니다. enable-jar-splitting이 사용 설정된 경우 서픽스가 일치하는 모든 파일이 모든 JAR에서 제외됩니다.

<disable_jar_jsps>

JSP에서 jar 클래스를 생성하지 마세요. (기본값: false).

<enable-jar-classes>

WEB-INF/클래스의 콘텐츠를 Jar로 만듭니다. (기본값: false).

<delete-jsps>

컴파일 후 JSP 소스 파일을 삭제합니다. (기본값: true).

<compile-encoding>

컴파일을 위한 소스 파일 인코딩을 입력합니다. (기본값: utf-8)

예:


        <staging>
          <delete-jsps>false</delete-jsps>
        </staging>
        

스테이징 옵션 기본값

스테이징 옵션의 세부정보는 다음과 같습니다.

스테이징 요소 기본값
enable-jar-splitting true
jar-splitting-excludes 북미
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 유형을 연결할 수 있습니다. 자세한 내용은 Metawerx web.xml 참조 위키를 확인하세요.

URLFetch 제한 시간

URLFetch 요청에 기한을 설정할 수 있습니다. 기본적으로 가져오기 기한은 5초입니다. appengine-web.xml 구성 파일에 다음 설정을 포함하여 이 기본값을 변경할 수 있습니다. 다음 명령어를 입력하여 시간 제한을 초 단위로 지정합니다.

<system-properties>
    <property name="appengine.api.urlfetch.defaultDeadline" value="10"/>
</system-properties>