개발 환경 설정

이 페이지에서는 App Engine 표준 환경용 Cloud Endpoints Frameworks를 사용하여 백엔드 API를 빌드하고 배포하는 개발 환경을 설정하는 방법을 설명합니다. 여기서는 Endpoints Frameworks 버전 2.0 스켈레톤 코드 샘플을 사용하여, 시작할 기본 소프트웨어 및 구성요소를 설명합니다.

새 Endpoints Frameworks 버전 2.0 프로젝트를 생성하기 위해 Apache Maven 및 App Engine 플러그인 사용하기(Cloud SDK 기반)에 설명된 endpoints-skeleton-archetype 또는 hello-endpoints-archetype를 사용하시면 도움이 될 수 있습니다.

Endpoints Frameworks를 사용하여 샘플 API를 배포하는 데 필요한 절차에 대한 자세한 내용은 App Engine에서 Endpoints Frameworks 시작하기 가이드를 참조하세요.

시작하기 전에

  1. Google 계정으로 로그인합니다.

    아직 계정이 없으면 새 계정을 등록하세요.

  2. Cloud Console의 프로젝트 선택기 페이지에서 Cloud 프로젝트를 선택하거나 만듭니다.

    프로젝트 선택기 페이지로 이동

  3. Google Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다. 프로젝트에 결제가 사용 설정되어 있는지 확인하는 방법을 알아보세요.

  4. Google Cloud 프로젝트 ID는 나중에 필요하므로 적어 둡니다.

필수 소프트웨어 설치 및 구성

  1. 자바 8이 설치되어 있지 않으면 Oracle 사이트에서 JDK(Java Development Kit)를 다운로드하여 설치합니다.
  2. Maven 또는 Gradle을 설치합니다.

    Maven

    1. Apache Maven 버전 3.3.9 이상을 다운로드합니다.
    2. 로컬 개발 환경에 Maven을 설치하고 구성합니다.

    Gradle

  3. Cloud SDK를 다운로드하고 초기화합니다.
  4. 다음 명령어를 실행합니다.
    1. Cloud SDK에 Google Cloud의 데이터 및 서비스에 액세스할 수 있는 권한이 있는지 확인합니다.
      gcloud auth login
    2. 애플리케이션 기본 사용자 인증 정보를 사용합니다.
      gcloud auth application-default login
    3. Cloud SDK app-engine-java 구성요소를 설치합니다.
      gcloud components install app-engine-java
    4. Cloud SDK와 모든 구성요소를 최신 버전으로 업데이트합니다.
      gcloud components update
  5. App Engine 애플리케이션을 만듭니다.
    1. 기본 프로젝트를 Google Cloud 프로젝트 ID로 설정합니다.
      gcloud config set project YOUR_PROJECT_ID

      YOUR_PROJECT_ID를 Google Cloud 프로젝트 ID로 바꿉니다. 다른 Google Cloud 프로젝트가 있고 gcloud를 사용하여 이를 관리하려면 Cloud SDK 구성 관리를 참조하세요.

    2. App Engine 애플리케이션을 만들 리전을 선택합니다. 리전 목록에 대해서는 App Engine 위치를 참조하세요.
    3. App Engine 애플리케이션을 만듭니다. YOUR_PROJECT_ID를 Google Cloud 프로젝트 ID로 바꾸고 YOUR_REGION을 생성되는 App Engine 애플리케이션이 위치할 리전으로 바꿉니다.
        gcloud app create \
        --project=YOUR_PROJECT_ID \
        --region=YOUR_REGION
      

Endpoints Frameworks 스켈레톤 샘플 가져오기

Endpoints Frameworks 버전 2.0 스켈레톤 샘플에는 Maven 및 Gradle에 필요한 빌드 스크립트는 물론, 첫 번째 API를 만드는 데 필요한 파일이 포함되어 있습니다.

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

     git clone https://github.com/GoogleCloudPlatform/java-docs-samples
    
  2. Endpoints Frameworks 스켈레톤 샘플이 있는 디렉터리로 변경합니다.

     cd java-docs-samples/appengine-java8/endpoints-v2-skeleton/
    

    샘플의 디렉터리 구조는 다음과 같습니다.

    Endpoints Frameworks 스켈레톤 샘플 레이아웃

    • MyApi.java에는 API 작성을 시작하는 데 사용할 수 있는 빈 클래스가 포함되어 있습니다. 시작하는 데 도움이 될 만한 샘플 코드를 보려면 에코 예시를 참조하세요.

    • web.xml서블릿을 구성하는 데 사용되는 표준 파일입니다.

    • appengine-web.xml는 자바 8을 사용하여 App Engine 표준 환경에 API를 배포하는 데 필요한 정보를 정의합니다.

    • pom.xml에는 Maven에서 프로젝트를 빌드하고 API를 App Engine에 배포하는 데 사용하는 프로젝트 및 구성 정보가 포함되어 있습니다.

    • build.gradle에는 프로젝트를 빌드하고 App Engine에 API를 배포하기 위해 Gradle에서 사용하는 프로젝트 및 구성 정보가 포함되어 있습니다.

빌드 파일 구성

이 섹션에서는 샘플 코드에 포함된 Maven pom.xml 및 Gradle build.gradle 파일에 대해 설명합니다. 호스트 이름에서 사용할 수 있도록 Google Cloud 프로젝트 ID를 입력하는 경우를 제외하고 빌드 파일은 API를 만들 준비가 되어 있습니다.

최소 구성 정보

이 섹션에서는 빌드 파일에 필요한 최소 구성을 설명합니다.

Maven

최소 종속 항목

다음은 시작하기 위해 pom.xml에 필요한 최소 종속 항목을 보여줍니다.

<dependencies>
  <!-- Compile/runtime dependencies -->
  <dependency>
    <groupId>com.google.endpoints</groupId>
    <artifactId>endpoints-framework</artifactId>
    <version>2.2.1</version>
  </dependency>
  <dependency>
    <groupId>com.google.appengine</groupId>
    <artifactId>appengine-api-1.0-sdk</artifactId>
    <version>1.9.80</version>
  </dependency>
  <dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    <type>jar</type>
    <scope>provided</scope>
  </dependency>
  <dependency>
    <groupId>javax.inject</groupId>
    <artifactId>javax.inject</artifactId>
    <version>1</version>
  </dependency>
</dependencies>

  • endpoints-framework 종속 항목에는 API를 만드는 데 필요한 클래스가 포함되어 있습니다.
  • App Engine 표준 환경에 프로젝트를 배포하기 위해 App Engine Standard API SDK (appengine-api-sdk)가 필요합니다.
  • 표준 javax.servlet 패키지는 서블릿을 빌드하는 데 필요합니다.
  • 표준 javax.inject 패키지는 종속 항목 삽입을 지원하는 데 필요합니다.

플러그인 적용

다음 플러그인이 적용되어 사용 설정됩니다.

<build>
  <!-- for hot reload of the web application-->
  <outputDirectory>${project.build.directory}/${project.build.finalName}/WEB-INF/classes</outputDirectory>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-war-plugin</artifactId>
      <version>3.2.3</version>
      <configuration>
        <webResources>
          <resources>
            <directory>${basedir}/src/main/webapp/WEB-INF</directory>
            <filtering>true</filtering>
            <targetPath>WEB-INF</targetPath>
          </resources>
        </webResources>
      </configuration>
    </plugin>
    <plugin>
      <groupId>com.google.cloud.tools</groupId>
      <artifactId>appengine-maven-plugin</artifactId>
      <version>2.2.0</version>
      <configuration>
        <!-- deploy configuration -->
        <projectId>GCLOUD_CONFIG</projectId>
        <version>GCLOUD_CONFIG</version>
      </configuration>
    </plugin>
    <plugin>
      <groupId>com.google.cloud.tools</groupId>
      <artifactId>endpoints-framework-maven-plugin</artifactId>
      <version>2.0.1</version>
      <configuration>
        <!-- plugin configuration -->
        <!--
        You must replace YOUR_PROJECT_ID with your
        Google Cloud Project Id
      -->
      <hostname>YOUR_PROJECT_ID.appspot.com</hostname>
    </configuration>
  </plugin>
</plugins>
</build>
  • maven-war-plugin는 웹 애플리케이션을 어셈블할 수 있도록 java 플러그인을 확장합니다.
  • appengine-maven-plugin 플러그인은 App Engine에서 API를 실행하는 데 필요합니다.
  • endpoints-framework-maven-plugin는 Endpoints Frameworks 프로젝트를 빌드하는 데 필요한 태스크 및 구성을 제공합니다.

Gradle

플러그인 종속 항목

다음은 API를 빌드하는 데 필요한 플러그인을 보여줍니다.

buildscript {
  repositories {
    mavenCentral()
  }

  dependencies {
    classpath 'com.google.cloud.tools:endpoints-framework-gradle-plugin:1.0.2'
    classpath 'com.google.cloud.tools:appengine-gradle-plugin:2.2.0'
  }
}

플러그인 적용

Gradle 빌드 스크립트에서는 다음 플러그인이 적용되어 사용 설정됩니다.

apply plugin: 'java'
apply plugin: 'war'
apply plugin: 'com.google.cloud.tools.endpoints-framework-server'
apply plugin: 'com.google.cloud.tools.appengine'

  • java 플러그인은 자바 관련 컴파일 및 빌드 단계를 프로젝트에 추가합니다.
  • war 플러그인은 웹 애플리케이션을 어셈블할 수 있도록 java 플러그인을 확장합니다.
  • endpoints-framework-server 플러그인은 Endpoints Frameworks Gradle 플러그인에 서버 측 지원을 제공합니다.
  • appengine 플러그인은 App Engine에서 API를 실행하는 데 필요합니다.

프로젝트 종속 항목

프로젝트에서 사용되는 종속 항목은 다음과 같습니다.

dependencies {
    compile 'com.google.endpoints:endpoints-framework:2.0.9'
    compile 'com.google.appengine:appengine-api-1.0-sdk:1.9.59'

    compile 'javax.inject:javax.inject:1'
    compileOnly 'javax.servlet:javax.servlet-api:3.1.0'
}

  • endpoints-framework 종속 항목에는 API를 만드는 데 필요한 클래스가 포함되어 있습니다.
  • App Engine Standard API SDK(appengine-api-sdk)는 App Engine 표준 환경에 프로젝트를 배포하는 데 필요합니다.
  • 표준 javax.servlet 패키지는 서블릿을 빌드하는 데 필요합니다.
  • 표준 javax.inject 패키지는 종속 항목 삽입을 지원하는 데 필요합니다.

서비스의 호스트 이름 정의

Endpoints Frameworks는 DNS 호환 이름을 사용하여 서비스를 고유하게 식별합니다. Google Cloud 프로젝트 ID는 전역에서 고유하므로 API 서비스 이름의 일부로 Google Cloud 프로젝트 ID를 사용해야 합니다.

Google Cloud 프로젝트 ID를 빌드 파일에 추가하여 서비스의 호스트 이름을 구성해야 합니다. 호스트 이름은 다음과 같은 형식이어야 합니다.

YOUR_PROJECT_ID.appspot.com

App Engine에 API를 배포하면 YOUR_PROJECT_ID.appspot.com 형식의 이름을 가진 DNS 항목이 자동으로 생성됩니다. 호스트 이름은 Cloud Endpoints 서비스의 이름과 API에 요청을 보내는 데 사용되는 도메인 이름입니다.

Maven

  <plugin>
    <groupId>com.google.cloud.tools</groupId>
    <artifactId>endpoints-framework-maven-plugin</artifactId>
    <version>2.0.1</version>
    <configuration>
      <!-- plugin configuration -->
      <!--
      You must replace YOUR_PROJECT_ID with your
      Google Cloud Project Id
    -->
    <hostname>YOUR_PROJECT_ID.appspot.com</hostname>
  </configuration>
</plugin>

hostname 필드에서 YOUR_PROJECT_ID를 Google Cloud 프로젝트 ID로 바꿉니다.

Gradle

// You must replace YOUR_PROJECT_ID with your Google Cloud Project Id
def projectId = 'YOUR_PROJECT_ID'

endpointsServer {
  // Endpoints Framework Plugin server-side configuration
  hostname = "${projectId}.appspot.com"
}

projectID 변수를 Google Cloud 프로젝트 ID로 설정합니다. 예를 들면 다음과 같습니다. def projectId = 'example-project-12345'

Endpoints 서블릿 구성

Endpoints 서블릿은 들어오는 요청을 처리하여 App Engine에서 실행되는 백엔드 서비스로 전달합니다. Endpoints 서블릿은 Endpoints에서 API를 관리하는 데 필요합니다.

web.xml에 대한 자세한 내용은 배포 설명자: web.xml를 참조하세요.

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
         http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">
    <!-- Wrap the backend with Endpoints Frameworks v2. -->
    <servlet>
        <servlet-name>EndpointsServlet</servlet-name>
        <servlet-class>com.google.api.server.spi.EndpointsServlet</servlet-class>
        <init-param>
            <param-name>services</param-name>
            <param-value>com.example.skeleton.MyApi</param-value>
        </init-param>
    </servlet>
    <!-- Route API method requests to the backend. -->
    <servlet-mapping>
        <servlet-name>EndpointsServlet</servlet-name>
        <url-pattern>/_ah/api/*</url-pattern>
    </servlet-mapping>
</web-app>

App Engine 배포 구성

appengine-web.xml 파일은 API가 배포되었을 때, App Engine 표준 환경 구성을 정의하기 위해 사용됩니다. 자세한 내용은 appengine-web.xml 참조를 확인하세요.

<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
    <runtime>java8</runtime>
    <threadsafe>true</threadsafe>

    <system-properties>
        <property name="java.util.logging.config.file" value="WEB-INF/logging.properties"/>
    </system-properties>
</appengine-web-app>

다음 단계