Java 런타임은 애플리케이션 코드 및 종속 항목을 설치한 후 가변형 환경에서 해당 애플리케이션을 실행하는 소프트웨어 스택입니다.
11
이상 버전은 빌드팩을 사용하여 빌드되므로app.yaml
파일에서 운영체제를 선택해야 합니다. 예를 들어 Java 21을 사용하려면 Ubuntu 22를 운영체제로 지정해야 합니다.Java 8/Jetty 9 런타임은 Java 서블릿 3.1 사양을 지원하는 OpenJDK 8 및 Eclipse Jetty 9를 제공합니다. Jetty 이미지는 OpenJDK 이미지를 넘겨받습니다.
지원되는 Java 버전의 전체 목록과 해당 Ubuntu 버전은 런타임 지원 일정을 참조하세요.
기본 요건
Java 런타임을 사용하려면 다음 안내를 따르세요.
gcloud CLI 버전 420.0.0 이상을 설치해야 합니다.
gcloud components update
명령어를 실행하여 CLI 도구를 업데이트할 수 있습니다. 설치된 버전을 보려면gcloud version
명령어를 실행하면 됩니다.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]
Java 버전 선택
새 런타임 버전
Java 런타임 버전 11 이상의 경우 app.yaml
파일에 runtime_config
및 operating_system
설정을 포함하여 운영체제를 지정해야 합니다.
선택사항으로 app.yaml
파일에 runtime_version
설정을 포함하여 런타임 버전을 지정할 수 있습니다. runtime_version
설정이 지정되지 않으면 기본적으로 최신 Java 버전이 사용됩니다.
예시
Ubuntu 22에서 Java 21을 지정하려면 다음 안내를 따르세요.
runtime: java env: flex runtime_config: operating_system: "ubuntu22" runtime_version: "21"
Ubuntu 22에서 지원되는 최신 Java 버전을 지정하려면 다음 안내를 따르세요.
runtime: java env: flex runtime_config: operating_system: "ubuntu22"
이전 런타임 버전
Java 8의 경우 app.yaml
파일에 runtime_config
및 jdk
설정을 지정합니다.
Java 8은 다음을 지원합니다.
- Eclipse Jetty 9 런타임은 서블릿 3.1을 사용하여 Jetty 9을 실행합니다.
- 애플리케이션의 일부로 포트 8080에서 리슨하는 자체 서버 코드입니다. 이 기능을 사용하면 SparkJava와 Spring-Boot 등의 마이크로서비스 프레임워크를 사용할 수 있습니다.
예시
Jetty 버전 9 지정하기(기본값/선택사항)
runtime_config: jdk: openjdk8 server: jetty9
Java 버전 8 지정하기
runtime_config: jdk: openjdk8
Java 8용 샘플
app.yaml
Maven 구성은 pom.xml
을, Gradle 구성은 build.gradle
을 참조하세요.
선택적 파일
다음 구성 파일은 선택사항입니다.
이 파일을 최상위 수준 MyDir에 배치하세요. 이러한 파일을 사용하는 경우 gcloud app deploy
명령어를 사용하여 별도로 배포해야 합니다.
web.xml
은 선택사항이며 Servlet 3.x 주석을 사용하지 않는 경우에만 필요합니다.
JavaServer 페이지뿐만 아니라 정적 웹 콘텐츠도 webapp/
디렉터리에 배치할 수 있습니다.
App Engine 가변형 환경에서 서블릿 컨테이너로 사용되는 Jetty 9는 Apache Jasper를 기본 JSP 구현으로 사용하며 JSTL taglib을 포함합니다.
Dockerfile 파일은 선택사항이며 Java 런타임을 사용자 설정하는 데 사용됩니다.
gzip 압축 사용
gzip
핸들러는 Jetty와 함께 번들로 제공되지만 기본적으로 활성화되지 않습니다. 이 모듈을 활성화하려면 app.yaml
파일에서 환경 변수 JETTY_MODULES_ENABLE=gzip
를 설정합니다.
env_variables:
JETTY_MODULES_ENABLE: 'gzip'
빠른 시작 사용
Jetty는 내용을 미리 스캔하고 구성 파일을 생성하여 애플리케이션 시작 시간을 단축할 수 있습니다.
확장된 이미지를 사용하는 경우 애플리케이션 WAR이 추가된 후 Dockerfile에서 /scripts/jetty/quickstart.sh
를 실행하여 빠른 시작을 활성화할 수 있습니다.
환경 변수
Java 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를 Google Cloud 프로젝트의 ID로 바꿉니다. pom.xml
파일에 이미 프로젝트 ID가 지정된 경우 실행할 명령어에 -Dapp.deploy.projectId
속성을 포함하지 않아도 됩니다.
Gradle
Gradle을 사용하여 앱을 배포합니다.
gradle appengineDeploy
Java 8/Jetty 9 런타임 사용자 설정
앱을 Java 8/Jetty 9 런타임에 배포하는 데는 Dockerfile이 필요하지 않습니다. 앱에 추가 구성이 필요하면 Dockerfile을 명시적으로 제공하여 Java 런타임을 사용자 설정하면 됩니다. Dockerfile에는 기본 이미지가 포함되어야 합니다. Dockerfile에 추가 지시문을 더하여 Java 런타임을 맞춤설정할 수 있습니다. 커스텀 런타임 빌드를 참조하세요.
이 경우 your-application.war
은 target/
디렉터리(maven) 또는 build/staged-app/
(gradle)에 빌드된 WAR 파일의 이름입니다.