Spring Boot Kotlin 앱 컨테이너화 및 Cloud Run에 배포

Spring Boot Kotlin 앱 컨테이너화 및 Cloud Run에 배포

이 Codelab 정보

subject최종 업데이트: 4월 22, 2020
account_circle작성자: Google 직원

1. 시작하기 전에

Google은 Docker 또는 Dockerfile 없이 자바 앱에 최적화된 Docker 컨테이너 이미지를 손쉽게 빌드하고 게시할 수 있는 강력한 이미지 빌드 도구를 제공합니다. 또한 Google Cloud는 스테이트리스(Stateless) 컨테이너를 자동으로 확장하는 관리형 컴퓨팅 플랫폼인 Cloud Run을 통해 컨테이너에 서버리스를 도입합니다. 이 Codelab에서는 Spring Boot Kotlin 앱을 컨테이너화하고 Container Registry에 게시하고 원활하게 Google Cloud에서 이미지를 실행하는 것이 얼마나 쉬운지 알아봅니다.

이 Codelab에서는 Jib, Container Registry, Cloud Run을 비롯한 Google Cloud 서비스 및 도구 사용 방법을 보여주는 간단한 앱을 Kotlin으로 설정하는 방법을 안내합니다.

기본 요건

  • 자바 프로그래밍 언어 및 도구에 관한 기본 지식
  • Vim, Emacs, nano와 같은 표준 Linux 텍스트 편집기에 대한 지식

실습할 내용

  • Spring Boot Kotlin 앱 설정
  • 최적화된 Docker 이미지를 빌드합니다.
  • Container Registry에 이미지를 게시합니다.
  • Cloud Run에서 컨테이너화된 앱을 실행합니다.

필요한 항목

  • Google Cloud 프로젝트
  • Chrome과 같은 브라우저

2. 설정

자습형 환경 설정

  1. Cloud Console에 로그인한 후 새 프로젝트를 만들거나 기존 프로젝트를 재사용합니다. Gmail 또는 G Suite 계정이 아직 없다면 계정을 만들어야 합니다.

모든 Google Cloud 프로젝트에서 고유한 이름인 프로젝트 ID를 기억하세요(위의 이름은 이미 사용되었으므로 사용할 수 없습니다). 이 ID는 나중에 이 Codelab에서 PROJECT_ID라고 부릅니다.

  1. 다음으로 Google Cloud 리소스를 사용하려면 Cloud Console에서 결제를 사용 설정해야 합니다.

이 Codelab을 진행하는 데는 비용이 몇 달러 이상 들지 않지만 더 많은 리소스를 사용하기로 결정하거나 계속 실행하는 경우 비용이 더 많이 들 수 있습니다.

Google Cloud 신규 사용자는 $300 무료 체험판을 사용할 수 있습니다.

Cloud Shell

노트북에서 원격으로 작동할 수 있는 상태이지만, 이 Codelab에서는 Google Cloud에서 실행되는 명령줄 환경인 Cloud Shell을 사용합니다.

Cloud Shell 활성화

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

이전에 Cloud Shell을 시작하지 않았으면 설명이 포함된 중간 화면(스크롤해야 볼 수 있는 부분)이 제공됩니다. 이 경우 계속을 클릭합니다(이후 다시 표시되지 않음). 이 일회성 화면은 다음과 같습니다.

Cloud Shell을 프로비저닝하고 연결하는 데 몇 분 정도만 걸립니다.

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

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`
gcloud config list project

명령어 결과

[core]
project = <PROJECT_ID>

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

gcloud config set project <PROJECT_ID>

명령어 결과

Updated property [core/project].

3. Spring Boot 앱 초기화

  1. Spring Initializr로 새 Spring Boot 앱을 생성합니다.
$ curl https://start.spring.io/starter.tgz \
    -d language=kotlin \
    -d dependencies=web \
    -d baseDir=kotlin-jib-cloud-run | tar -xzvf -

이니셜라이저가 자동으로 템플릿 앱의 pom.xml에 있는 종속 항목에 spring-boot-starter-web를 추가합니다.

  1. 템플릿 앱의 디렉터리로 변경합니다.
$ cd kotlin-jib-cloud-run
  1. Maven을 사용하여 앱을 빌드하고 실행합니다.
$ ./mvnw -DskipTests spring-boot:run
  1. 앱이 시작되면 포트 8080에서 수신 대기를 시작합니다. Cloud Shell 툴바에서 웹 미리보기 를 클릭하고 포트 8080에서 미리보기를 선택해 앱에 액세스합니다.

  1. 앱에서 아직 아무것도 하지 않으므로 404 응답을 반환해야 합니다. Control+C로 앱을 중지합니다.

4. 웹 컨트롤러 추가

  1. 데모 패키지에서 다음 Controller 클래스를 만듭니다.
$ vi src/main/kotlin/com/example/demo/Controller.kt
    or
$ nano src/main/kotlin/com/example/demo/Controller.kt

src/main/kotlin/com/example/demo/Controller.kt

package com.example.demo

import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.RestController

@RestController
class Controller {
 
 
@GetMapping("/")
  fun saySomething
(): String {
   
return "Kotlin app on Cloud Run, containerized by Jib!"
 
}
}
  1. 앱을 다시 빌드하고 실행합니다.
$ ./mvnw spring-boot:run
  1. 웹 미리보기 를 사용하여 앱을 다시 확인합니다. 이번에는 'Kotlin app on Cloud Run, containerized by Jib!"'라는 메시지가 표시됩니다. Control+C로 앱을 중지합니다.

5. 앱을 컨테이너화하여 Container Registry에 게시

Jib를 사용하면 Docker 없이 최적화된 방식으로 앱을 컨테이너화하여 Container Registry에 게시할 수 있습니다.

  1. 계속 진행하기 전에 Container Registry API를 활성화해야 합니다. API에 액세스할 수 있도록 하려면 프로젝트당 한 번만 수행하면 됩니다.
$ gcloud services enable containerregistry.googleapis.com
  1. Jib를 실행하여 Docker 이미지를 빌드하고 Container Registry에 게시합니다.
$ ./mvnw com.google.cloud.tools:jib-maven-plugin:1.8.0:build \
    -Dimage=gcr.io/$GOOGLE_CLOUD_PROJECT/kotlin-jib-cloud-run

결국 앱이 컨테이너화되어 Container Registry에 푸시된다는 메시지가 표시됩니다.

[INFO] Built and pushed image as gcr.io/PROJECT_ID/kotlin-jib-cloud-run
...
[INFO] BUILD SUCCESS

오류가 표시되면 $GOOGLE_CLOUD_PROJECT Google Cloud 프로젝트 ID(PROJECT_ID)가 올바르게 설정되어 있는지 다시 확인하세요.

  1. 계속하기 전에 이미지가 게시되었는지 확인하세요. Cloud Console로 돌아가서 탐색 메뉴를 클릭한 다음 Container Registry를 선택합니다.

이미지가 게시되었음을 확인할 수 있습니다.

6. Cloud Run에서 컨테이너화된 앱 실행

Cloud Run은 서버리스를 컨테이너로 만들어 스테이트리스(Stateless) 컨테이너를 자동으로 확장합니다.

  1. 탐색 메뉴 를 다시 클릭하고 Cloud Run을 선택합니다.

Cloud Run에 처음 액세스하는 경우 일회성 설정을 위한 대화상자가 표시됩니다. Cloud Run 사용 시작이 표시되면 클릭합니다.

  1. Cloud Run 페이지에서 서비스 만들기를 클릭합니다.

  1. 다음 화면의 소스에서 선택을 클릭합니다. 소스는 Cloud Run에서 실행하려는 이미지입니다.

  1. 이전에 빌드한 이미지가 대화상자에 표시됩니다. 이미지를 선택하고 계속을 클릭합니다.

  1. 클릭 몇 번으로 지금 앱을 배포할 수 있습니다. 배포 플랫폼에서 Cloud Run (완전 관리형)을 선택하여 Google Cloud에서 서비스를 완전히 관리합니다. 위치에 적합한 리전을 선택하고 인증되지 않은 호출 허용을 선택한 후 만들기를 클릭합니다. 작업이 끝났습니다.

이미지가 완전히 배포되면 Cloud Run 페이지에 앱에 액세스할 수 있는 URL이 표시됩니다. 확인해 보세요!

최종적으로, 앱에서 기대하는 메시지가 표시됩니다.

Kotlin app on Cloud Run, containerized by Jib!

작업이 끝났습니다. 나중에 새 앱 버전을 배포해야 하는 경우 페이지에서 새 버전 배포를 클릭하면 됩니다.

7. 삭제

  1. 환경을 삭제하려면 Cloud Run에 배포된 앱과 Container Registry에 게시된 이미지를 삭제해야 합니다. Cloud Run으로 이동하여 앱을 선택한 다음 삭제를 클릭합니다.

  1. 마찬가지로 Container Registry 페이지로 이동하여 이미지를 삭제합니다.

8. 축하합니다

수고하셨습니다. Spring Boot Kotlin 앱을 컨테이너화하고 Cloud Run에 배포했습니다.

Jib를 사용하면 Docker를 설치하거나 Dockerfile을 작성하지 않고 최적화된 컨테이너 이미지를 빌드하여 Container Registry에 게시했습니다. Jib는 이미지 구성을 최적화하므로 심층 Docker 지식이 없는 사용자도 자바 앱을 빠르고 효율적으로 컨테이너화할 수 있습니다. 그런 다음 몇 번의 클릭만으로 Cloud Run에 앱을 배포한 다음 즉시 배포를 시작할 수 있습니다.

자세히 알아보기