appengine-web.xml 참조

App Engine 자바 애플리케이션은 web.xml 배포 설명자 외에 appengine-web.xml이라는 구성 파일을 사용하여 앱의 등록된 애플리케이션 ID와 최신 코드의 버전 식별자를 지정하고,앱의 WAR에 있는 파일 중에서 정적 파일(예: 이미지)과 애플리케이션에서 사용하는 리소스 파일을 식별합니다. 앱 업로드 시에 appcfg 명령어가 이 정보를 사용합니다.

다음 예는 애플리케이션 ID와 버전 식별자를 지정하고 정적 파일이나 리소스 파일이 없는 최소한의 파일입니다.

<?xml version="1.0" encoding="utf-8"?>
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
  <application>_your_app_id_</application><!-- unused for Cloud SDK based tooling -->
  <version>alpha-001</version><!-- unused for Cloud SDK based tooling -->
  <threadsafe>true</threadsafe>
</appengine-web-app>

구문

App Engine 자바 앱에는 WEB-INF/ 디렉토리의 WAR에 appengine-web.xml이라는 파일이 있어야 합니다. 이 파일은 루트 요소가 <appengine-web-app>인 XML 파일입니다.

appengine-web.xml에 대한 데이터 유형 정의와 스키마 사양은 SDK의 docs/ 디렉토리에서 찾을 수 있습니다.

요소 설명
<application>

gcloud app deploy 명령줄, IntelliJ 또는 Eclipse 플러그인, Maven 또는 Gradle 플러그인과 같은 Cloud SDK 기반 도구를 사용하여 앱을 배포하는 경우에는 필요하지 않습니다. Cloud SDK 기반 도구는 이 요소를 무시하고 gcloud config 프로젝트 속성에서 프로젝트 ID를 가져옵니다. gcloud 명령줄 도구를 사용하여 프로젝트 ID를 재정의할 수는 있지만 이렇게 하면 머신 전체 프로젝트 ID가 설정되므로, 여러 프로젝트 개발 시에 혼란이 야기될 수 있습니다. <application> 요소는 애플리케이션의 프로젝트 ID를 포함합니다. 이 프로젝트 ID는 Google Cloud Platform 콘솔에서 프로젝트 생성 시 등록하는 프로젝트 ID입니다. 앱을 업로드하면 appcfg가 이 파일에서 프로젝트 ID를 가져옵니다.

<async-session-persistence>

선택사항입니다. 애플리케이션이 HTTP 세션 데이터를 데이터 저장소에 비동기식으로 쓰도록 구성하여 요청 지연 시간을 줄일 수 있습니다.


<?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에 쓰기 전에 세션 데이터를 데이터 저장소에 쓰는 작업 대기열 작업을 제출합니다. 기본적으로 작업은 `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를 사용할 수 없는 경우에 요청이 세션 데이터를 읽으려고 하면(또는 세션 데이터가 삭제되면) 아직 최신 세션 데이터가 없을 수도 있는 데이터 저장소로 장애 조치됩니다. 이는 비동기 세션 지속성으로 인해 애플리케이션에 비활성 세션 데이터가 보일 수 있음을 의미합니다. 그러나 대부분 애플리케이션의 경우, 지연 시간의 이점이 이러한 위험을 훨씬 능가합니다.

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

선택사항입니다. 애플리케이션이 이메일을 수신할 수 있으려면 해당 서비스를 사용 설정하도록 애플리케이션을 구성해야 합니다. 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

참고: 이제 모듈 이름이 Services이고, 서비스는 여전히 appengine-web.xml 파일에서 모듈로 선언됩니다. 예: <module>service_name</module>.

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

서비스를 참조하세요.

<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 값으로 지정해야 합니다. 자바 7 런타임을 사용하려면 이 항목을 생략하거나 java7 값을 지정합니다. App Engine 자바 런타임은 OpenJDK를 기반으로 한다는 점에 유의하세요.

예:


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

<sessions-enabled>

선택사항입니다. App Engine에는 서블릿 세션 인터페이스를 사용하여 구현된 세션이 포함됩니다. 이 구현은 지속성을 위해 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 종류의 데이터 저장소 항목과 프리픽스가 _ahs인 키를 사용하여 Memcache 항목을 만듭니다.

참고: App Engine은 데이터 저장소와 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 파일에 파일을 지정하여 지원되는 각 오류 코드에 대해 제공할 다양한 정적 파일을 설정할 수 있습니다. 커스텀 오류 페이지를 제공하려면 이 예와 같이 <static-error-handlers> 섹션을 appengine-web.xml에 추가합니다.


<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
앱이 리소스 할당량을 초과했음을 나타냅니다.
dos_api_denial
이 옵션은 앱의 DoS 보호 구성에 의해 차단된 클라이언트에 이 오류 페이지를 제공합니다.
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시간 후로 캐시 만료 시간을 설정합니다. 만료 시간을 생략하면 프로덕션 서버가 기본값으로 10분을 설정합니다. 자세한 내용은 정적 캐시 만료를 참조하세요.

<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입니다. 기본값과 이 설정값은 자바 8 또는 자바 7 런타임 사용 여부에 따라 다릅니다.

자바 8 런타임의 경우의 기본값은 native이며, 이는 자바 8 런타임과 자바 7 동작의 설명대로 표준 자바 네트워크 클래스가 표준 자바 HTTP(S) 전송을 사용함을 의미합니다. 이 설정을 사용하려면 앱에서 결제 기능을 사용 설정해야 합니다. 그렇지 않으면 요청 시 다음과 같은 런타임 오류가 발생합니다.

자바 8 런타임에서 url-stream-handler 요소를 urlfetch로 설정하면 App Engine은 URL.openConnection과 관련 메소드가 httphttps URL의 URL 가져오기 전송을 사용하도록 하는 URLStreamHandlerFactory설치합니다.

자바 7 런타임의 경우의 기본값은 urlfetch입니다. 즉, 자바 8 런타임과 자바 7 동작의 설명대로 표준 자바 네트워크 클래스가 URL 가져오기 서비스를 사용함을 의미합니다.

자바 7 런타임에서 이 값을 native로 설정하면 App Engine은 URL 가져오기 대신에 java.net.HttpURLConnection의 Sockets API를 사용합니다. 자바 8과 마찬가지로, 이 설정을 사용하려면 앱에 결제 기능을 사용 설정해야 합니다. 그렇지 않으면 요청 시 다음과 같은 런타임 오류가 발생합니다.


<?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.appspot.com과 같이 두 가지로 해석될 수 있는 URL의 모호성을 방지할 수 있습니다. 즉, 버전 '123'이 존재하면 타겟팅은 지정된 모듈의 버전 '123'이 됩니다. 해당 버전이 존재하지 않으면 타겟팅은 모듈 기본 버전의 123번 인스턴스입니다.

appcfg 명령어는 애플리케이션 업로드 시 이 버전 식별자를 사용하여 App Engine에 지정된 식별자로 새 버전의 앱을 만들거나 앱이 이미 존재하는 경우에는 지정된 식별자로 해당 버전의 앱을 바꾸도록 지시합니다. URL의 하위 도메인 구분 기호로 '-점-'을 사용하는 URL(예: https://_version_id_-dot-_your_app_id_.appspot.com)로 새 버전의 앱을 테스트할 수 있습니다. Google Cloud Platform 콘솔을 사용하면 앱의 기본 버전을 선택할 수 있습니다. 기본 버전은 버전을 지정하지 않거나 잘못된 버전을 지정한 경우에 로드됩니다.

<warmup-requests-enabled>

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

준비 요청이 사용 설정되면 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>

요소 확장

다음 표에는 애플리케이션 확장을 지정하는 방법을 정의하는 옵션이 나와 있습니다.

확장 유형의 성능 특징 비교에 대해서는 동적 인스턴스 확장을 참조하세요.

요소 설명
<automatic-scaling>

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

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

이 요소에는 다음 요소가 포함될 수 있습니다.

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

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

중요: 배포를 위해 자바용 App Engine SDK의 appcfg 명령어를 사용하는 경우, appengine-web.xml에서 이 매개변수를 사용할 수 없습니다. 대신 API 탐색기에서 자동 확장 매개변수 설정의 설명대로 또는 App Engine Admin API를 사용하여 매개변수를 설정합니다.

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

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

중요: 배포를 위해 자바용 App Engine SDK의 appcfg 명령어를 사용하는 경우, appengine-web.xml에서 이 매개변수를 사용할 수 없습니다. 대신 API 탐색기에서 자동 확장 매개변수 설정의 설명대로 또는 App Engine Admin API를 사용하여 매개변수를 설정합니다.

<max-instances>
선택사항입니다. 이 애플리케이션 버전에 대해 만들 수 있는 App Engine의 최대 인스턴스 수입니다. 이 값은 모듈 비용을 제한하는 데 유용합니다. 0에서 2147483647 사이의 값을 지정합니다.

중요: 배포를 위해 자바용 App Engine SDK의 appcfg를 사용하는 경우, appengine-web.xml에서 이 매개변수를 사용할 수 없습니다. 대신 API 탐색기에서 자동 확장 매개변수 설정의 설명대로 또는 App Engine Admin API를 사용하여 매개변수를 설정합니다.

<min-instances>
선택사항입니다. 이 모듈 버전에 대해 만들 수 있는 App Engine의 최소 인스턴스 수입니다. 이러한 인스턴스는 요청 도착 시 트래픽을 처리하고 트래픽 처리를 위해 추가 인스턴스가 시작된 경우에도 계속 트래픽을 처리합니다.

0에서 1000 사이의 값을 지정합니다. 매개변수를 값 0으로 설정하고 인스턴스를 0개로 조정하여 제공된 요청이 없는 경우에 비용을 절감할 수 있습니다. 트래픽 수신 여부에 관계없이 지정된 인스턴스 수에 따라 비용이 청구됨에 유의하세요.

중요: 배포를 위해 자바용 App Engine SDK의 appcfg를 사용하는 경우, appengine-web.xml에서 이 매개변수를 사용할 수 없습니다. 대신 API 탐색기에서 자동 확장 매개변수 설정의 설명대로 또는 App Engine Admin API를 사용하여 매개변수를 설정합니다.

<max-concurrent-requests>

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

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

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

<max-pending-latency>

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

  • 최대값이 낮으면 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>

jar-splitting을 사용하는 경우에 제외할 서픽스 목록입니다.

<disable_jar_jsps>

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

<enable-jar-classes>

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

<delete-jsps>

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

<compile-encoding>

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

스테이징 옵션 기본값

스테이징 옵션의 기본값은 appcfg와 같은 App Engine SDK 기반 도구 사용 여부나 gcloud 명령줄 또는 Cloud SDK 기반 Maven, Gradle, Eclipse 또는 IntelliJ 플러그인 사용 여부에 따라 다릅니다.

스테이징 요소 App Engine SDK 기반 기본값 Cloud SDK 기반 기본값
enable-jar-splitting false true
jar-splitting-excludes NA NA
disable-jar-jsps false false
enable-jar-classes false true. 클래스 로딩 순서에 영향을 줄 수 있으므로, 앱이 이전의 false 기본값을 사용하여 특정 순서에 의존하는 경우에는 이 요소를 false로 설정할 수 있습니다.
delete-jsps false true
compile-encoding utf-8 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 참조 위키를 참조하세요.

정적 캐시 만료

별도로 지정하지 않는 한 웹 프록시와 브라우저는 웹사이트에서 로드하는 파일을 제한 기간 동안 유지합니다.

expiration 속성을 <static-files><include ... >에 제공하여 특정 정적 파일 핸들러에 대한 캐시 기간을 구성할 수 있습니다. 값은 공백으로 구분된 숫자와 단위로 구성된 문자열입니다. 단위는 d(일), h(시간), m(분), s(초)일 수 있습니다. 예를 들어, "4d 5h"는 파일의 최초 요청으로부터 4일 5시간 후로 캐시 만료 시간을 설정합니다. 만료 시간을 생략하면 프로덕션 서버가 기본값으로 10분을 설정합니다.

예:

<static-files>
  <include path="/**.png" expiration="4d 5h" />
</static-files>

만료 시간은 Cache-ControlExpires HTTP 응답 헤더에 전송되므로, 인터넷 서비스 제공업체와 같은 중간 캐싱 프록시 서버는 물론 사용자 브라우저에서 파일이 캐시될 수 있습니다. 지정된 만료 시간으로 파일이 전송된 후에는 일반적으로 사용자가 자신의 브라우저 캐시를 지우더라도 중간 캐시에서 파일을 지울 수 있는 방법은 없습니다. 앱의 새 버전을 다시 배포해도 캐시는 재설정되지 않습니다. 따라서 정적 파일을 수정할 계획이 있다면, 만료 시간이 짧아야 합니다(1시간 미만). 대부분의 경우, 만료 시간 기본값인 10분이 적합합니다.

URLFetch 시간 제한

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

<system-properties>
    <property name="appengine.api.urlfetch.defaultDeadline" value="10"/>
</system-properties>
이 페이지가 도움이 되었나요? 평가를 부탁드립니다.

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

자바용 App Engine 표준 환경