자바 8 런타임

자바 8 런타임은 웹 제공 프레임워크를 포함하지 않습니다. 유일한 요구사항은 앱에서 포트 8080을 수신 대기하고 응답하는 것입니다. 이 문서의 샘플 코드에서는 Spring Boot 등의 자체 프레임워크를 자바 8 런타임에 추가하는 방법을 보여줍니다.

기본 요건

  • 개발을 시작하기 전에 Google Cloud SDK의 최신 버전을 다운로드하거나 Cloud SDK를 최신 버전으로 업데이트합니다.

    gcloud components update
    
  • Maven을 사용하여 배포하려면 pom.xmlApp Engine Maven 플러그인을 추가해야 합니다.

    <plugin>
       <groupId>com.google.cloud.tools</groupId>
       <artifactId>appengine-maven-plugin</artifactId>
       <version>2.0.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-appenine/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'

다음 표에서는 기능을 사용, 중지 또는 구성하는 데 사용할 수 있는 환경 변수를 보여줍니다.

환경 변수 설명 유형 기본값
DBG_ENABLE Stackdriver Debugger boolean true
TMPDIR 임시 디렉토리 dirname
JAVA_TMP_OPTS JVM tmpdir 인수 JVM 인수 -Djava.io.tmpdir=${TMPDIR}
GAE_MEMORY_MB 사용 가능한 메모리 size Google App Engine의 설정 값 또는 /proc/meminfo-400M
HEAP_SIZE_RATIO 힙용 메모리 percent 80
HEAP_SIZE_MB 사용 가능한 힙 size ${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 서비스를 사용할 수 있습니다. Cloud Datastore, Cloud PubSub, Cloud Bigtable용 에뮬레이터가 있습니다. 앱을 실행하기 전에 다음과 같은 gcloud 명령을 사용하여 에뮬레이터를 시작하세요.

gcloud beta emulators datastore start
gcloud beta emulators pubsub start
gcloud beta emulators bigtable start

앱 배포

구성을 완료한 후 Google Cloud SDK를 사용하여 다음과 같이 app.yaml 파일 및 JAR이 들어 있는 디렉토리를 배포할 수 있습니다.

gcloud app deploy app.yaml

선택적 구성 파일(index.yaml, cron.yaml, dispatch.yaml)을 하나라도 사용하는 경우 gcloud 명령으로 해당 파일을 별도로 배포해야 합니다. 예를 들면 다음과 같습니다.

gcloud app deploy cron.yaml

Maven

Maven을 사용하여 앱을 배포합니다.

mvn appengine:deploy

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에 추가 지시문을 더하여 자바 런타임을 맞춤설정할 수 있습니다. 커스텀 런타임 빌드를 참조하세요.

이 페이지가 도움이 되었나요? 평가를 부탁드립니다.

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

Java 문서용 App Engine 가변형 환경