자바 8 런타임은 웹 제공 프레임워크를 포함하지 않습니다. 유일한 요구사항은 앱에서 포트 8080을 수신 대기하고 응답하는 것입니다. 이 문서의 샘플 코드에서는 Spring Boot 등의 자체 프레임워크를 자바 8 런타임에 추가하는 방법을 보여줍니다.
기본 요건
개발을 시작하기 전에 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 플러그인 사용을 포함한 다른 배포 옵션도 있습니다.애플리케이션 프레임워크 안내를 따라 실행 가능한 JAR 빌드를 구성합니다. 이 실행 가능한 JAR은
java -jar app.jar
을 통해 실행되어야 합니다. 예를 들어 Spring Boot 문서를 참조할 수 있습니다.
파일 정리
개발 파일의 계층구조는 다음과 같아야 합니다.
MyDir/ pom.xml [index.yaml] [cron.yaml] [dispatch.yaml] src/main/ appengine/ app.yaml docker/ Dockerfile java/ com.example.mycode/ MyCode.java
app.yaml
app.yaml
파일은 필수 항목입니다. 파일을 다음과 같이 정의하세요.
runtime: java
env: flex
runtime: java
를 지정하면 JAR(*.jar
) 파일을 배포할 때 런타임 이미지 gcr.io/google-appengine/openjdk:8
이 자동으로 선택됩니다.
JDK 버전을 선택하려면 runtime_config.jdk
필드를 사용합니다.
runtime: java
env: flex
runtime_config:
jdk: openjdk8
app.yaml 사용에서 다른 app.yaml
설정을 찾을 수 있습니다.
선택적 파일
다음 구성 파일은 선택사항입니다.
이 파일을 MyDir
의 최상위 수준에 배치하세요. 이러한 파일을 사용하는 경우 gcloud app deploy
명령어를 사용하여 별도로 배포해야 합니다.
기본 진입점
OpenJDK 8 이미지의 진입점인 docker-entrypoint.bash
는 전달된 명령줄 인수를 처리하여 기본 명령어(java
)에 대한 실행 가능한 대안 또는 인수를 찾습니다.
이미지의 첫 번째 인수를 실행할 수 없으면 java
명령어가 암시적으로 추가됩니다. 예를 들면 다음과 같습니다.
$ docker run openjdk -jar /usr/share/someapplication.jar
이미지의 첫 번째 인수를 실행할 수 있으면(예: bash
) 해당 명령어를 실행합니다.
예를 들어 다음과 같이 셸을 실행할 수 있습니다.
> docker run -it --rm openjdk bash
root@c7b35e88ff93:/#
환경 변수
app.yaml
파일의 env_variables
키를 사용하여 환경 변수를 설정합니다.
예를 들면 다음과 같습니다.
env_variables:
MY_VAR_COLOR: 'blue'
다음 표에서는 기능을 사용, 중지 또는 구성하는 데 사용할 수 있는 환경 변수를 보여줍니다.
환경 변수 | 설명 | 유형 | 기본 |
---|---|---|---|
TMPDIR |
임시 디렉토리 | dirname | |
JAVA_TMP_OPTS |
JVM tmpdir 인수 | JVM 인수 | -Djava.io.tmpdir=${TMPDIR} |
GAE_MEMORY_MB |
사용 가능한 메모리 | 크기 | Google App Engine 또는 /proc/meminfo -400M에서 설정 |
HEAP_SIZE_RATIO |
힙용 메모리 | percent | 80 |
HEAP_SIZE_MB |
사용 가능한 힙 | 크기 | ${GAE_MEMORY_MB} 의 ${HEAP_SIZE_RATIO} % |
JAVA_HEAP_OPTS |
JVM 힙 인수 | JVM 인수 | -Xms${HEAP_SIZE_MB}M -Xmx${HEAP_SIZE_MB}M |
JAVA_GC_OPTS |
JVM GC 인수 | JVM 인수 | -XX:+UseG1GC 및 구성 |
JAVA_USER_OPTS |
JVM 기타 인수 | JVM 인수 | |
JAVA_OPTS |
JVM 인수 | JVM 인수 | 아래 참조 |
SHUTDOWN_LOGGING_THREAD_DUMP |
종료 스레드 덤프 | boolean | false |
SHUTDOWN_LOGGING_HEAP_INFO |
종료 힙 정보 | boolean | false |
SHUTDOWN_LOGGING_SAMPLE_THRESHOLD |
종료 샘플링 | percent | 100 |
JAVA_OPTS
를 명시적으로 설정하지 않으면 JAVA_OPTS:=-showversion \
${JAVA_TMP_OPTS} \
${DBG_AGENT} \
${JAVA_HEAP_OPTS} \
${JAVA_GC_OPTS} \
${JAVA_USER_OPTS}
기본값이 적용됩니다.
실제로 실행되는 명령줄은 다음과 같습니다. 여기에서 $@은 docker 진입점에 전달된 인수입니다.
java $JAVA_OPTS "$@"
로컬 테스트
다음을 사용하여 앱을 빌드할 수 있습니다.
mvn package
java
명령줄을 사용하여 실행합니다.
java -jar target/myjar.jar
또는 로컬에서 앱을 실행하는 방법에 대한 애플리케이션 프레임워크 관련 안내에 따릅니다.
로컬 환경에서 테스트할 때는 원격 Google Cloud 서비스 대신 에뮬레이션된 Google Cloud 서비스를 사용할 수 있습니다.
Datastore, Pub/Sub, Bigtable용 에뮬레이터가 있습니다.
앱을 실행하기 전에 gcloud
명령어를 사용하여 시작합니다.
gcloud beta emulators datastore start
gcloud beta emulators pubsub start
gcloud beta emulators bigtable start
앱 배포
구성을 완료하면 Google Cloud CLI에서 다음을 사용하여 app.yaml
파일과 JAR이 포함된 이 디렉터리를 배포할 수 있습니다.
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
자바 8 런타임 맞춤설정
Dockerfile이 없어도 자바 8 런타임에 앱을 배포할 수 있습니다. 그러나 앱에 추가적인 구성이 필요한 경우 명시적으로 Dockerfile을 제공하여 자바 런타임을 맞춤설정할 수 있습니다.
이미지를 커스텀 런타임의 기본으로 사용하려면 app.yaml
파일에 runtime: custom
을 지정한 후 다음과 같이 Dockerfile을 작성하면 됩니다.
FROM gcr.io/google-appengine/openjdk:8
COPY your-application.jar $APP_DESTINATION
이 줄은 Docker 컨테이너의 올바른 위치에 JAR을 추가합니다.
Dockerfile에 추가 지시문을 더하여 자바 런타임을 맞춤설정할 수 있습니다. 커스텀 런타임 빌드를 참조하세요.