구성 파일

각 서비스 버전은 서비스와 버전의 이름을 제공하는 .yaml 파일에서 정의됩니다. YAML 파일은 대개 정의하는 서비스와 동일한 이름을 사용하지만 반드시 그럴 필요는 없습니다. 여러 서비스 버전을 배포하는 경우 버전마다 하나씩 여러 yaml 파일을 동일한 디렉터리에 만들 수 있습니다.

일반적으로 서비스의 YAML 파일과 관련 소스 코드를 포함하는 디렉터리를 서비스마다 만듭니다. 선택적 애플리케이션 수준 구성 파일(dispatch.yaml, cron.yaml, index.yaml, queue.yaml)은 최상위 앱 디렉터리에 포함됩니다. 아래 예시에서는 세 가지 서비스를 보여줍니다. service1service2에서 소스 파일은 YAML 파일과 동일한 수준에 있습니다. service3에는 두 가지 버전의 YAML 파일이 있습니다.

YAML 서비스의 계층구조 그래프

간단한 소규모 프로젝트의 경우 앱의 모든 파일이 디렉터리 하나에 위치할 수 있습니다.

작은 YAML 서비스의 계층구조 그래프

모든 YAML 파일에는 버전 매개변수가 포함되어야 합니다. 기본 서비스를 정의하려면 service: default 매개변수를 명시적으로 포함하거나 서비스 매개변수를 파일에서 제외하면 됩니다.

각 서비스의 구성 파일은 특정 서비스/버전에 대한 확장 유형 및 인스턴스 클래스를 정의합니다. 지정하는 확장 유형에 따라 다른 확장 매개변수가 사용됩니다. 확장을 지정하지 않으면 자동 확장이 기본값이 됩니다. 확장 및 인스턴스 클래스 설정은 appengine-web.xml참조 섹션에 설명되어 있습니다.

서버의 효율성을 높이기 위해 각 서비스에 대해 URL 요청을 특정 스크립트에 매핑하고 정적 파일을 식별하도록 설정할 수도 있습니다. 이러한 설정은 yaml 파일에도 포함되며 appengine-web.xml 참조 섹션에 설명되어 있습니다.

기본 서비스

모든 애플리케이션에는 1개의 기본 서비스가 있습니다. 개발자는 appengine-web.xml에서 service: default 설정을 사용하여 기본 서비스를 정의할 수 있지만 필수는 아닙니다. 서비스와 관련된 모든 구성 매개변수를 기본 서비스에 적용할 수 있습니다.

선택적 구성 파일

다음 구성 파일은 앱의 모든 서비스에 적용되는 선택적 기능을 제어합니다.

  • dispatch.yaml는 URL의 경로 또는 호스트 이름에 따라 수신 요청을 특정 서비스로 보내어 기본 규칙을 라우팅합니다.
  • queue.yaml는 push 큐와 pull 큐를 모두 구성합니다.
  • index.yaml는 Datastore 쿼리를 사용할 경우 앱에 필요한 색인을 지정합니다.
  • cron.yaml는 정의된 시간 또는 일정한 간격으로 작동하는 정기 예약 태스크를 구성합니다.

이러한 구성 파일의 업데이트를 App Engine에 배포하려면 파일이 위치한 디렉터리에서 다음 명령어를 실행합니다.

    gcloud app deploy [CONFIG_FILE]

예시

다음은 웹 요청을 처리하는 기본 서비스와 백엔드를 처리하는 다른 서비스(my-service)를 보유하고 있는 애플리케이션의 WAR 디렉터리 구조에서 다양한 파일을 구성하는 방법을 보여주는 예시입니다.

최상위 EAR 디렉터리가 'my-application'이라고 가정하고 my-application/META-INF/appengine-application.xml 파일을 다음과 같이 정의합니다.

<?xml version="1.0" encoding="utf-8" standalone="no"?>
<appengine-application xmlns="http://appengine.google.com/ns/1.0">
  <application>my-application</application>
</appengine-application>

my-application/defaultmy-application/my-service의 두 가지 서비스용으로 WAR 디렉터리를 만듭니다.

이제 각 WAR에 서비스의 매개변수를 지정하는 appengine-web.xml 파일을 만듭니다. 이 파일에 서비스의 버전 이름이 포함되어야 합니다. 기본 서비스를 정의하려면 <service>default</service> 매개변수를 명시적으로 포함하거나 파일에서 제외할 수 있습니다. 다음은 기본 서비스를 정의하는 my-application/default/WEB-INF/appengine-web.xml 파일입니다.

<?xml version="1.0" encoding="utf-8" standalone="no"?>
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
  <application>my-application</application>
  <module>default</module>
  <version>uno</version>
  <threadsafe>true</threadsafe>
</appengine-web-app>

my-application/my-service/WEB-INF/appengine-web.xml 파일은 백그라운드 요청을 처리하는 서비스를 정의합니다.

<?xml version="1.0" encoding="utf-8" standalone="no"?>
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
  <application>my-application</application>
  <module>my-service</module>
  <version>uno</version>
  <threadsafe>true</threadsafe>
  <manual-scaling>
    <instances>5</instances>
  </manual-scaling>
</appengine-web-app>

마지막으로 서비스를 에뮬레이션하는 my-application/META-INF/application.xml 파일을 정의합니다. 기본 서비스가 첫 번째 서비스로 나열되어야 한다는 점에 유의하세요.

<?xml version="1.0"
encoding="UTF-8"?>

<application
  xmlns="http://java.sun.com/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
                      http://java.sun.com/xml/ns/javaee/application_5.xsd"
  version="5">

  <description>GAE Java SuperFun app</description>
  <display-name>SuperFun</display-name>

  <!-- Services -->
  <!-- The default service should be listed first -->
  <module>
    <web>
      <web-uri>default</web-uri>
      <context-root>default</context-root>
    </web>
  </module>
  <module>
    <web>
      <web-uri>my-service</web-uri>
      <context-root>my-service</context-root>
    </web>
  </module>

</application>

App Engine은 <context-root> 요소를 무시하므로 HTTP 클라이언트는 서비스 주소를 지정할 때 URL 경로 앞에 이 요소를 추가할 필요가 없습니다.