Gradle 및 App Engine 플러그인 사용

선언적이며 빌드, 테스트, 게시, 배포를 자동화하는 데 사용되는 유연한 빌드 자동화 시스템인 Gradle을 사용할 수 있습니다. 이 페이지는 표준 환경에서 App Engine 프로젝트와 함께 Gradle을 사용하는 방법을 설명합니다.

시작하기 전에

다음과 같은 필수 요소를 설치하고 구성합니다.

Google Cloud 프로젝트 설정 및 유효성 검사

Google Cloud 프로젝트를 설정하고 gcloud CLI를 설치해야 합니다.

  1. Google Cloud 콘솔을 사용하여 Google Cloud 프로젝트를 만들고 설정합니다.

    App Engine으로 이동

    1. 새 Google Cloud 프로젝트를 선택하거나 만듭니다.
    2. 메시지에 따라 App Engine 애플리케이션이 있고 결제가 사용 설정되어 있는지 확인합니다.
      1. 프로젝트에 App Engine 애플리케이션을 만들어야 하는 경우 App Engine 애플리케이션을 배치할 리전을 선택하라는 메시지가 표시됩니다.
      2. 안내에 따라 새 결제 계정을 만들거나 기존 계정을 선택합니다.
    3. App Engine 애플리케이션이 생성되고 프로젝트에 결제가 사용 설정되면 대시보드가 열립니다.
  2. 필요한 경우 플러그인이 자동으로 gcloud CLI를 설치하므로 SDK를 설치할 필요가 없습니다.

새 Gradle 프로젝트 만들기

셸을 사용하여 처음부터 새 Gradle 프로젝트를 만들 수 있습니다. 또는 플러그인을 시험해 보려면 hello world 프로젝트를 다운로드하고 로컬에서 실행해 배포할 수 있습니다.

  1. 새 디렉터리를 만들고 입력합니다.

  2. 새 프로젝트를 초기화하려면 다음을 사용하세요.

    gradle init --type java-library;
    mkdir -p src/main/webapp/WEB-INF;
    rm src/main/java/Library.java src/test/java/LibraryTest.java
    
  3. build.gradle 파일에 다음을 추가하여 App Engine Gradle 태스크, Maven 저장소, App Engine Gradle 플러그인, 종속 항목, 태스크 구성을 추가합니다.

    buildscript {    // Configuration for building
      repositories {
        jcenter()    // Bintray's repository - a fast Maven Central mirror & more
        mavenCentral()
      }
      dependencies {
        classpath 'com.google.cloud.tools:appengine-gradle-plugin:2.5.0' // If a newer version is available, use it
      }
    }
    
    repositories {   // repositories for Jar's you access in your code
      maven {
        url 'https://oss.sonatype.org/content/repositories/snapshots' // SNAPSHOT repository (if needed)
      }
      mavenCentral()
      jcenter()
    }
    
    apply plugin: 'java'                              // standard Java tasks
    apply plugin: 'war'                               // standard Web Archive plugin
    apply plugin: 'com.google.cloud.tools.appengine'  // App Engine tasks
    
    dependencies {
      implementation 'com.google.appengine:appengine-api-1.0-sdk:+'  // Latest App Engine Api's
      providedCompile 'javax.servlet:javax.servlet-api:3.1.0'
    
      implementation 'jstl:jstl:1.2'
    
    // Add your dependencies here.
    //  implementation 'com.google.cloud:google-cloud:+'   // Latest Cloud API's http://googlecloudplatform.github.io/google-cloud-java
    
      testImplementation 'junit:junit:4.13.2'
      testImplementation 'com.google.truth:truth:1.1.5'
      testImplementation 'org.mockito:mockito-core:4.11.0'
    
      testImplementation 'com.google.appengine:appengine-testing:+'
      testImplementation 'com.google.appengine:appengine-api-stubs:+'
      testImplementation 'com.google.appengine:appengine-tools-sdk:+'
    }
    
    // Always run unit tests
    appengineDeploy.dependsOn test
    appengineStage.dependsOn test
    
    appengine {  // App Engine tasks configuration
      deploy {   // deploy configuration
        projectId = System.getenv('GOOGLE_CLOUD_PROJECT')
        version = '1'
      }
    }
    
    test {
      useJUnit()
      testLogging.showStandardStreams = true
      beforeTest { descriptor ->
         logger.lifecycle("test: " + descriptor + "  Running")
      }
    
      onOutput { descriptor, event ->
         logger.lifecycle("test: " + descriptor + ": " + event.message )
      }
      afterTest { descriptor, result ->
        logger.lifecycle("test: " + descriptor + ": " + result )
      }
    }
    
    group   = "com.example.appenginej8"        // Generated output GroupId
    version = "1.0-SNAPSHOT"       // Version in generated output
    
    sourceCompatibility = 1.8     // App Engine Flexible uses Java 8
    targetCompatibility = 1.8     // App Engine Flexible uses Java 8
  4. 또한 텍스트 편집기 또는 통합 개발 환경(IDE)을 사용하여 프로젝트에 다음 파일을 추가해야 합니다.

자바 App Engine 프로젝트에 대한 개요는 구성 파일을 참조하세요.

Hello World 앱

  1. Hello World 샘플 앱 저장소를 로컬 머신에 복제합니다.

    git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
    

    또는 ZIP 파일로 샘플을 다운로드하고 압축을 풉니다.

  2. 샘플 코드가 있는 디렉터리로 변경합니다.

    cd java-docs-samples/appengine-java8/helloworld
    

개발 서버에서 애플리케이션 테스트

  1. 로컬에서 실행할 때 프로젝트에서 Google 리소스에 액세스하려면 다음 명령어를 실행하여 애플리케이션 기본 사용자 인증 정보를 설정합니다.

    gcloud auth application-default login
    
  2. 애플리케이션 디렉터리의 루트로 변경합니다.

  3. 개발 단계 중에 언제든지 Gradle을 호출하여 개발 서버에서 애플리케이션을 실행 및 테스트할 수 있습니다.

    gradle appengineRun
    

    또는 Gradle 래퍼를 사용하여 Gradle을 설치하지 않고도 실행할 수 있습니다.

  4. 서버가 시작될 때까지 기다립니다. 다음과 비슷한 메시지가 표시되면 서버가 시작되고 애플리케이션이 실행됩니다.

    :compileJava
    :processResources NO-SOURCE
    :classes
    :war
    :explodeWar
    :assemble
    :appengineRun
    2018-06-05 22:50:46.231:INFO::main: Logging initialized @321ms
    Jun 06, 2018 2:50:49 AM com.google.appengine.tools.development.AbstractModule startup
    INFO: Module instance default is running at http://localhost:8080/
    Jun 06, 2018 2:50:49 AM com.google.appengine.tools.development.AbstractModule startup
    INFO: The admin console is running at http://localhost:8080/_ah/admin
    Jun 05, 2018 10:50:49 PM com.google.appengine.tools.development.DevAppServerImpl doStart
    INFO: Dev App Server is now running
    
  5. http://127.0.0.1:8080에서 실행 중인 앱을 확인하세요.

개발 서버에서 디버깅

로컬에서 실행 중인 애플리케이션을 디버깅하려면 jvmFlags 속성을 설정하여 기본 JVM에서 디버깅을 사용 설정합니다. 예를 들면 다음과 같습니다.

    appengine {
      run {
        jvmFlags = ['-Xdebug', '-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005']
      }
    }

애플리케이션 핫 리로드 사용 설정

핫 리로드(Hot Reloading)는 현재 실행 중인 애플리케이션의 하나 이상의 클래스를 환경을 중지하지 않고 업데이트하는 기능입니다. 핫 리로드를 사용 설정하려면 다음 안내를 따르세요.

  • 로컬 서버에 변경을 검색하도록 지시해야 합니다.

    appengine {
      run {
        automaticRestart = true
      }
    }
    
  • 앱이 실행되는 동안 explodeWar 태스크를 실행하여 변경사항을 과도 앱에 직접 복사하고 실행 중인 애플리케이션에 변경사항을 전파합니다.

애플리케이션 배포

애플리케이션을 배포하려면 다음 안내를 따르세요.

gradle appengineDeploy

appengineDeploy 태스크와 다른 모든 Gradle 태스크는 사용자가 사용할 수 있는 관련 속성이 있습니다. 태스크와 속성의 전체 목록은 App Engine Gradle 태스크 및 속성을 참조하세요.

Gradle 래퍼 사용

Gradle은 설치 없이 필요한 버전의 Gradle을 다운로드하고 실행할 수 있는 메커니즘을 제공합니다.

Linux/macOS

./gradlew appengineRun

Windows

gradlew.bat appengineRun

Gradle에 대한 자세한 내용은 App Engine Gradle 태스크 및 속성을 참조하세요.

다음 단계