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. 설정 및 요건
자습형 환경 설정
- Google Cloud Console에 로그인하여 새 프로젝트를 만들거나 기존 프로젝트를 재사용합니다. 아직 Gmail이나 Google Workspace 계정이 없는 경우 계정을 만들어야 합니다.
- 프로젝트 이름은 이 프로젝트 참가자의 표시 이름입니다. 이는 Google API에서 사용하지 않는 문자열이며 언제든지 업데이트할 수 있습니다.
- 프로젝트 ID는 모든 Google Cloud 프로젝트에서 고유하며, 변경할 수 없습니다(설정된 후에는 변경할 수 없음). Cloud 콘솔은 고유한 문자열을 자동으로 생성합니다. 일반적으로는 신경 쓰지 않아도 됩니다. 대부분의 Codelab에서는 프로젝트 ID (일반적으로
PROJECT_ID
로 식별됨)를 참조해야 합니다. 생성된 ID가 마음에 들지 않으면 다른 임의 ID를 생성할 수 있습니다. 또는 직접 시도해 보고 사용 가능한지 확인할 수도 있습니다. 이 단계 이후에는 변경할 수 없으며 프로젝트 기간 동안 유지됩니다. - 참고로 세 번째 값은 일부 API에서 사용하는 프로젝트 번호입니다. 이 세 가지 값에 대한 자세한 내용은 문서를 참고하세요.
- 다음으로 Cloud 리소스/API를 사용하려면 Cloud 콘솔에서 결제를 사용 설정해야 합니다. 이 Codelab 실행에는 많은 비용이 들지 않습니다. 이 튜토리얼이 끝난 후에 요금이 청구되지 않도록 리소스를 종료하려면 만든 리소스 또는 프로젝트를 삭제하면 됩니다. Google Cloud 신규 사용자는 300달러(USD) 상당의 무료 체험판 프로그램에 참여할 수 있습니다.
Cloud Shell
Google Cloud에서 실행되는 명령줄 환경인 Cloud Shell을 사용합니다.
Cloud Shell 활성화
- Cloud Console에서 Cloud Shell 활성화를 클릭합니다.
Cloud Shell을 처음 시작하는 경우에는 무엇이 있는지 설명하는 중간 화면이 표시됩니다. 중간 화면이 표시되면 계속을 클릭합니다.
Cloud Shell을 프로비저닝하고 연결하는 데 몇 분 정도만 걸립니다.
가상 머신에는 필요한 개발 도구가 모두 들어 있습니다. 영구적인 5GB 홈 디렉터리를 제공하고 Google Cloud에서 실행되므로 네트워크 성능과 인증이 크게 개선됩니다. 이 Codelab에서 대부분의 작업은 브라우저를 사용하여 수행할 수 있습니다.
Cloud Shell에 연결되면 인증이 완료되었고 프로젝트가 자신의 프로젝트 ID로 설정된 것을 확인할 수 있습니다.
- 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`
- 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 업데이트
자바 서버 앱을 배포하는 방법에는 Maven App Engine 플러그인 또는 Gradle App Engine 플러그인을 사용하거나 war
패키지 디렉터리를 배포하는 두 가지 방법이 있습니다. Maven App Engine 플러그인을 사용하여 앱을 배포합니다.
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 설명어 추가
- App Engine 표준 환경에 앱을 배포하려면 새로운
src/main/appengine/app.yaml
설명자 파일을 만들어야 합니다.
$ mkdir -p src/main/appengine/ $ touch src/main/appengine/app.yaml
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. 로컬에서 앱 실행
- JAVA_HOME이 올바른 JDK 버전으로 설정되어 있는지 확인합니다.
$ export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64/
- Spring Boot 플러그인으로 Spring Boot 앱을 시작할 수 있습니다.
$ ./mvnw -DskipTests spring-boot:run
- 앱이 시작되면 Cloud Shell 툴바에서 웹 미리보기를 클릭하고 포트 8080에서 미리보기를 선택합니다.
브라우저에 탭이 열리고 시작한 서버에 연결됩니다.
8. App Engine에 앱 배포
- 먼저 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
- 그런 다음
mvn appengine:deploy
를 실행하여 App Engine 표준 환경에 앱을 배포합니다.
$ ./mvnw -DskipTests package appengine:deploy ... first time deploy may take a couple of minutes
- 앱이 배포되면 웹브라우저에서 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 Engine
및 Settings
로 이동하여 Disable Application
를 선택합니다.
또는 전체 프로젝트를 삭제할 수 있습니다.
$ gcloud projects delete YOUR-PROJECT-ID
10. 축하합니다
첫 번째 App Engine 웹 앱 작성 방법을 알아봤습니다.