App Engine 표준 환경에 Spring Boot 앱 배포

1. 시작하기 전에

App Engine 앱은 구축 및 유지관리가 쉬우며, 트래픽과 데이터 저장소의 요구사항이 변화하더라도 간단하게 확장이 가능합니다. App Engine을 사용하면 유지관리해야 하는 서버가 없습니다. 앱을 업로드하기만 하면 바로 사용할 수 있습니다.

App Engine 앱은 수신 트래픽에 따라 자동으로 확장됩니다. 부하 분산, 마이크로서비스, 승인, SQL 및 NoSQL 데이터베이스, 메모리 캐싱, 트래픽 분할, 로깅, 검색, 버전 관리, 출시 및 롤백, 보안 스캔이 모두 기본적으로 지원되며 고도로 맞춤설정할 수 있습니다.

App Engine 표준 환경App Engine 가변형 환경은 Java, Python, PHP, NodeJS, Go 등 다양한 프로그래밍 언어를 지원합니다. 두 환경을 통해 개발자는 앱의 동작 방식을 최대한 유연하게 제어할 수 있습니다. 각 환경에는 특정 강점이 있습니다. 자세한 내용은 App Engine 환경 선택을 참조하세요.

App Engine 표준 환경에 Spring Boot 앱을 배포하는 방법을 알아봅니다. 표준 환경은 사용자가 없을 때 인스턴스를 0개로 축소하고 자동으로 확장합니다.

기본 요건

  • Java 프로그래밍 언어 및 도구에 관한 기본 지식
  • Vim, Emacs, nano 등의 표준 Linux 텍스트 편집기에 관한 기본 지식

실행할 작업

  • App Engine에서 Spring Boot Java 앱을 만드는 방법

필요한 항목

  • Google Cloud 프로젝트
  • 브라우저(예: Chrome)

2. 설정 및 요건

자습형 환경 설정

  1. Google Cloud Console에 로그인하여 새 프로젝트를 만들거나 기존 프로젝트를 재사용합니다. 아직 Gmail이나 Google Workspace 계정이 없는 경우 계정을 만들어야 합니다.

b35bf95b8bf3d5d8.pnga99b7ace416376c4.pngbd84a6d3004737c5.png

  • 프로젝트 이름 은 이 프로젝트 참가자의 표시 이름입니다. 이는 Google API에서 사용하지 않는 문자열이며 언제든지 업데이트할 수 있습니다.
  • 프로젝트 ID는 모든 Google Cloud 프로젝트에서 고유하며, 변경할 수 없습니다(설정된 후에는 변경할 수 없음). Cloud 콘솔은 고유한 문자열을 자동으로 생성합니다. 일반적으로는 신경 쓰지 않아도 됩니다. 대부분의 Codelab에서는 프로젝트 ID (일반적으로 PROJECT_ID로 식별됨)를 참조해야 합니다. 생성된 ID가 마음에 들지 않으면 다른 임의 ID를 생성할 수 있습니다. 또는 직접 시도해 보고 사용 가능한지 확인할 수도 있습니다. 이 단계 이후에는 변경할 수 없으며 프로젝트 기간 동안 유지됩니다.
  • 참고로 세 번째 값은 일부 API에서 사용하는 프로젝트 번호입니다. 이 세 가지 값에 대한 자세한 내용은 문서를 참고하세요.
  1. 다음으로 Cloud 리소스/API를 사용하려면 Cloud 콘솔에서 결제를 사용 설정해야 합니다. 이 Codelab 실행에는 많은 비용이 들지 않습니다. 이 튜토리얼이 끝난 후에 요금이 청구되지 않도록 리소스를 종료하려면 만든 리소스 또는 프로젝트를 삭제하면 됩니다. Google Cloud 신규 사용자는 300달러(USD) 상당의 무료 체험판 프로그램에 참여할 수 있습니다.

Cloud Shell

Google Cloud에서 실행되는 명령줄 환경인 Cloud Shell을 사용합니다.

Cloud Shell 활성화

  1. Cloud Console에서 Cloud Shell 활성화 853e55310c205094.png 를 클릭합니다.

55efc1aaa7a4d3ad.png

Cloud Shell을 처음 시작하는 경우 Cloud Shell에 관한 설명이 포함된 중간 화면이 표시됩니다. 중간 화면이 표시되면 계속 을 클릭합니다.

9c92662c6a846a5c.png

Cloud Shell을 프로비저닝하고 연결하는 작업은 몇 분이면 끝납니다.

9f0e51b578fecce5.png

이 가상 머신에는 필요한 모든 개발 도구가 로드되어 있습니다. 영구적인 5GB 홈 디렉터리를 제공하고 Google Cloud에서 실행되므로 네트워크 성능과 인증이 크게 개선됩니다. 이 Codelab에서 대부분의 작업은 브라우저만으로도 수행할 수 있습니다.

Cloud Shell에 연결되면 인증이 완료되었고 프로젝트가 해당 프로젝트 ID로 설정된 것을 확인할 수 있습니다.

  1. Cloud Shell에서 다음 명령어를 실행하여 인증되었는지 확인합니다.
gcloud auth list

명령어 출력

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
  1. Cloud Shell에서 다음 명령어를 실행하여 gcloud 명령어가 프로젝트를 알고 있는지 확인합니다.
gcloud config list project

명령어 출력

[core]
project = <PROJECT_ID>

또는 다음 명령어로 설정할 수 있습니다.

gcloud config set project <PROJECT_ID>

명령어 출력

Updated property [core/project].

3. 새 Spring Boot 웹 앱 만들기

Cloud Shell이 실행되면 명령줄을 사용하여 Spring Initializr로 새 Spring Boot 앱을 생성할 수 있습니다.

$ curl https://start.spring.io/starter.tgz \
  -d bootVersion=3.0.5 \
  -d dependencies=web \
  -d type=maven-project \
  -d baseDir=gae-standard-example | tar -xzvf -
$ cd gae-standard-example

4. Maven pom.xml 업데이트

Java 서버 앱을 배포하는 방법에는 Maven App Engine Plugin 또는 Gradle App Engine Plugin을 사용하거나 war 패키지 디렉터리를 배포하는 두 가지 방법이 있습니다. Maven App Engine Plugin을 사용하여 앱을 배포합니다.

Maven App Engine 플러그인 추가

배포 프로세스를 간소화하는 Google Cloud 플러그인을 포함하도록 pom.xml을 업데이트합니다. Vim, nano 또는 Emacs를 사용하여 파일을 수정할 수 있습니다.

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" ...>
  ...
  <build>
    <plugins>
      ...
      <plugin>
        <groupId>com.google.cloud.tools</groupId>
        <artifactId>appengine-maven-plugin</artifactId>
        <version>2.4.4</version>
        <configuration>
          <version>1</version>
          <projectId>GCLOUD_CONFIG</projectId>
        </configuration>
      </plugin>
      ...
    </plugins>
  </build>
</project>

5. App Engine 설명자 추가

  1. App Engine 표준 환경에 앱을 배포하려면 새 src/main/appengine/app.yaml 설명자 파일을 만들어야 합니다.
$ mkdir -p src/main/appengine/
$ touch src/main/appengine/app.yaml
  1. src/main/appengine/app.yaml 파일을 수정하고 다음 콘텐츠를 추가합니다.

src/main/appengine/app.yaml

runtime: java17
instance_class: F1

6. 컨트롤러 추가

DemoApplication.java에서 "hello world!"를 반환하는 새 컨트롤러를 추가합니다.

src/main/java/com/example/demo/DemoApplication.java

package com.example.demo;

...

// Add imports
import org.springframework.web.bind.annotation.*;

@SpringBootApplication
public class DemoApplication {
  public static void main(String[] args) {
    SpringApplication.run(DemoApplication.class, args);
  }
}

// Add the controller.
@RestController
class HelloWorldController {
  @GetMapping("/")
  public String hello() {
    return "hello world!";
  }
}

7. 로컬에서 앱 실행

  1. JAVA_HOME이 올바른 JDK 버전으로 설정되어 있는지 확인합니다.
$ export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64/
  1. Spring Boot 플러그인으로 Spring Boot 앱을 시작할 수 있습니다.
$ ./mvnw -DskipTests spring-boot:run
  1. 앱이 시작되면 Cloud Shell 툴바에서 웹 미리보기 1a94d5bd10bfc072.png 를 클릭하고 포트 8080에서 미리보기 를 선택합니다.

3aca52f76c6c22a3.png

브라우저의 탭이 열리면서 시작한 서버에 연결됩니다.

7b0d8494f647822a.png

8. App Engine에 앱 배포

  1. 먼저 App Engine 앱을 실행할 수 있도록 프로젝트를 초기화합니다. 또한 미국 중부 리전에서 실행되도록 프로젝트를 초기화합니다.
$ gcloud app create --region us-central
You are creating an app for project [...].
WARNING: Creating an App Engine application for a project is irreversible and the region
cannot be changed. More information about regions is at
https://cloud.google.com/appengine/docs/locations
  1. 그런 다음 mvn appengine:deploy를 실행하여 App Engine 표준 환경에 앱을 배포합니다.
$ ./mvnw -DskipTests package appengine:deploy
... first time deploy may take a couple of minutes
  1. 앱이 배포된 후 웹브라우저에서 http://<project-id>.appspot.com을 열거나 Cloud Shell에서 다음 명령어를 사용하여 앱을 방문할 수 있습니다.
$ gcloud app browse
... [It may print out the URL for your app]

9. 정리

App Engine 애플리케이션을 삭제할 수는 없지만 사용 중지할 수는 있습니다.

Google Cloud 콘솔에서 App EngineSettings으로 이동하여 Disable Application를 선택합니다.

8052c1e4ad73d70e.png

또는 전체 프로젝트를 삭제할 수 있습니다.

$ gcloud projects delete YOUR-PROJECT-ID

10. 축하합니다

첫 번째 App Engine 웹 앱을 작성하는 방법을 알아보았습니다.

자세히 알아보기