자바 8/Jetty 9 런타임은 자바 서블릿 3.1 사양을 지원하는 OpenJDK 8 및 Eclipse Jetty 9를 제공합니다. 이 런타임의 특정 Jetty 버전에 대한 자세한 내용은 GitHub 프로젝트의 Jetty 속성에서 런타임의 이미지를 참조하세요.
기본 요건
Google Cloud CLI의 최신 버전을 다운로드하거나 gcloud CLI를 최신 버전으로 업데이트합니다.
gcloud components update
Maven을 사용하여 배포하려면
pom.xml
에 App Engine Maven 플러그인을 추가해야 합니다.<plugin> <groupId>com.google.cloud.tools</groupId> <artifactId>appengine-maven-plugin</artifactId> <version>2.7.0</version> </plugin>
gcloud app deploy
명령어 또는 App Engine Gradle 플러그인을 포함한 다른 배포 옵션도 있습니다.
파일 정리
소스 트리는 다음과 같은 형태입니다.
MyDir/ [pom.xml] [build.gradle] [index.yaml] [cron.yaml] [dispatch.yaml] src/main/ appengine/ app.yaml docker/ [Dockerfile] java/ com.example.mycode/ MyCode.java webapp/ [index.html] [jsp.jsp] WEB-INF/ [web.xml]
app.yaml
app.yaml
파일은 필수 항목입니다. 이러한 형태의 파일을 정의하세요.
WAR(*.war
파일)를 배포할 때 런타임 이미지 gcr.io/google-appengine/jetty
가 자동으로 선택됩니다.
이 이미지를 커스텀 런타임의 기본으로 사용하려면 app.yaml
파일에 runtime: custom
을 지정한 후 다음과 같이 Dockerfile을 작성하면 됩니다.
FROM gcr.io/google-appengine/jetty
ADD your-application.war $APP_DESTINATION
이 줄은 Docker 컨테이너의 올바른 위치에 WAR을 추가합니다.
다른 app.yaml
설정은 app.yaml 사용에 설명되어 있습니다.
pom.xml은 Maven을 구성하는 데 사용되고 build.gradle은 Gradle을 구성하는 데 사용됩니다.
선택적 파일
다음 구성 파일은 선택사항입니다.
이 파일을 최상위 수준 MyDir에 배치하세요. 이러한 파일을 사용하는 경우 gcloud app deploy
명령어를 사용하여 별도로 배포해야 합니다.
web.xml은 선택사항이며 Servlet 3.x 주석을 사용하지 않는 경우에만 필요합니다.
JavaServer 페이지뿐만 아니라 정적 웹 콘텐츠도 webapp/
디렉터리에 배치할 수 있습니다.
App Engine 가변형 환경에서 서블릿 컨테이너로 사용되는 Jetty 9는 Apache Jasper를 기본 JSP 구현으로 사용하며 JSTL taglib을 포함합니다.
Dockerfile 파일은 선택사항이며 자바 런타임을 사용자 설정하는 데 사용됩니다.
gzip 압축 사용
gzip
핸들러는 Jetty와 함께 번들로 제공되지만 기본적으로 활성화되지 않습니다. 이 모듈을 활성화하려면 app.yaml
파일에서 환경 변수 JETTY_MODULES_ENABLE=gzip
를 설정합니다.
env_variables:
JETTY_MODULES_ENABLE: 'gzip'
빠른 시작 사용
Jetty는 내용을 미리 스캔하고 구성 파일을 생성하여 애플리케이션 시작 시간을 단축할 수 있습니다.
확장된 이미지를 사용하는 경우 애플리케이션 WAR이 추가된 후 Dockerfile에서 /scripts/jetty/quickstart.sh
를 실행하여 빠른 시작을 활성화할 수 있습니다.
FROM launcher.gcr.io/google/jetty
ADD your-application.war $JETTY_BASE/webapps/root.war
# generate quickstart-web.xml
RUN /scripts/jetty/quickstart.sh
환경 변수
자바 8/Jetty 9 런타임과 관련하여 다음과 같은 선택적 환경 변수를 설정할 수 있습니다. OpenJDK 8 환경 변수도 설정할 수 있습니다.
환경 변수를 설정하려면 app.yaml
파일에서 env_variables
키를 사용하세요.
환경 변수 | Maven 속성 | 값/설명 |
---|---|---|
JETTY_PROPERTIES |
$JETTY_ARGS 에 추가된 쉼표로 구분된 name=value 쌍의 목록 |
|
JETTY_MODULES_ENABLE |
$JETTY_ARGS 에 추가하여 사용 설정할 쉼표로 구분된 모듈의 목록 |
|
JETTY_MODULES_DISABLE |
$JETTY_BASE/start.d 에서 삭제하여 사용 중지할 쉼표로 구분된 모듈의 목록 |
|
JETTY_ARGS |
jetty의 start.jar 에 전달된 인수. 커스텀 설정 jetty 구성에 사용되는 인수는 여기로 전달됩니다. |
|
JAVA_OPTS |
JVM 런타임 인수 |
향상된 Cloud Logging(베타)
App Engine flex 환경에서 실행하는 경우 JETTY_ARGS
환경 변수를 설정하여 Cloud Logging에 로그를 전송하도록 Java Util Logging을 구성할 수 있습니다. 예를 들면 다음과 같습니다.
env_variables:
JETTY_ARGS: -Djava.util.logging.config.file=WEB-INF/logging.properties
다음과 같이 LoggingHandler를 구성하는 logging.properties 파일을 제공해야 합니다.
handlers=com.google.cloud.logging.LoggingHandler
# Optional configuration
.level=INFO
com.google.cloud.logging.LoggingHandler.level=FINE
com.google.cloud.logging.LoggingHandler.log=gae_app.log
com.google.cloud.logging.LoggingHandler.formatter=java.util.logging.SimpleFormatter
java.util.logging.SimpleFormatter.format=%3$s: %5$s%6$s
로컬 테스트
로컬 환경에서 테스트할 때 원격 Google Cloud 서비스 대신 에뮬레이션된 Google Cloud 서비스를 사용할 수 있습니다. 다음 에뮬레이터를 사용할 수 있습니다.
앱을 실행하기 전에 gcloud
명령어를 사용하여 시작합니다.
gcloud beta emulators datastore start
gcloud beta emulators pubsub start
gcloud beta emulators bigtable start
Maven
Maven pom.xml
파일에 다음 줄을 추가하여 Jetty 9 Maven 플러그인을 추가합니다.
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>9.4.2.v20170220</version>
</plugin>
앱을 로컬에서 실행하려면 Maven 명령어를 사용하세요.
mvn jetty:run-exploded
Gradle
새 Gradle 프로젝트 만들기의 안내를 따라 Gretty Gradle 플러그인을 build.gradle
에 추가하고 다음 명령어를 사용합니다.
gradle jettyRun
앱 배포
Google Cloud CLI를 초기화하려면 다음을 실행합니다.
gcloud init
구성을 완료한 후 Google Cloud CLI에서 다음을 사용하여 app.yaml
및 WAR 파일이 포함된 이 디렉터리를 배포할 수 있습니다.
gcloud app deploy app.yaml
선택적 구성 파일(index.yaml
, cron.yaml
, dispatch.yaml
)을 사용하는 경우 gcloud
명령어를 사용하여 별도로 배포합니다. 예를 들면 다음과 같습니다.
gcloud app deploy cron.yaml
Maven
Maven을 사용하여 앱을 배포합니다.
mvn package appengine:deploy -Dapp.deploy.projectId=PROJECT_ID
PROJECT_ID를 Cloud 프로젝트의 ID로 바꿉니다. pom.xml
파일에 이미 프로젝트 ID가 지정된 경우 실행할 명령어에 -Dapp.deploy.projectId
속성을 포함하지 않아도 됩니다.
Gradle
Gradle을 사용하여 앱을 배포합니다.
gradle appengineDeploy
자바 8/Jetty 9 런타임 사용자 설정
앱을 자바 8/Jetty 9 런타임에 배포하는 데는 Dockerfile이 필요하지 않습니다.
앱에 추가 구성이 필요하면 Dockerfile을 명시적으로 제공하여 자바 런타임을 사용자 설정하면 됩니다. Dockerfile에는 기본 이미지 gcr.io/google-appengine/jetty
가 포함되어야 합니다. Dockerfile에 추가 지시문을 더하여 자바 런타임을 맞춤설정할 수 있습니다. 커스텀 런타임 빌드를 참조하세요.
Dockerfile은 다음과 같이 시작합니다.
FROM gcr.io/google-appengine/jetty
ADD your-application.war $APP_DESTINATION
# YOUR DOCKER COMMANDS
이 경우 your-application.war
은 target/
디렉터리(maven) 또는 build/staged-app/
(gradle)에 빌드된 WAR 파일의 이름입니다.