1. 시작하기 전에
Google에서 제공하는 강력한 이미지 빌드 도구를 사용하면 Docker 또는 Dockerfile 없이 자바 앱에 최적화된 Docker 컨테이너 이미지를 신속하게 빌드하고 게시할 수 있습니다. 또한 Google Cloud는 스테이트리스(Stateless) 컨테이너를 자동으로 확장하는 관리형 컴퓨팅 플랫폼인 Cloud Run을 통해 컨테이너에 서버리스 기능을 제공합니다. 이 Codelab에서는 Spring Boot Kotlin 앱을 컨테이너화하고, Container Registry에 게시하고, Google Cloud에서 이미지를 원활하게 실행하는 것이 얼마나 쉬운지 알아봅니다.
이 Codelab은 Kotlin으로 간단한 앱을 설정하는 방법을 안내합니다. 이 앱은 Jib, Container Registry, Cloud Run을 비롯한 Google Cloud 서비스 및 도구를 사용하는 방법을 보여줍니다.
기본 요건
- Java 프로그래밍 언어 및 도구에 대한 기본 지식
- Vim, Emacs, nano와 같은 표준 Linux 텍스트 편집기에 대한 지식
실습할 내용
- Spring Boot Kotlin 앱을 설정합니다.
- 최적화된 Docker 이미지를 빌드합니다.
- 이미지를 Container Registry에 게시합니다.
- Cloud Run에서 컨테이너화된 앱을 실행합니다.
필요한 항목
- Google Cloud 프로젝트
- 브라우저(예: Chrome)
2. 설정
자습형 환경 설정
- Cloud 콘솔에 로그인하고 새 프로젝트를 만들거나 기존 프로젝트를 다시 사용합니다. 아직 Gmail이나 Google Workspace 계정이 없는 경우 계정을 만들어야 합니다.
모든 Google Cloud 프로젝트에서 고유한 이름인 프로젝트 ID를 기억하세요(위의 이름은 이미 사용되었으므로 사용할 수 없습니다). 이 ID는 나중에 이 Codelab에서 PROJECT_ID
라고 부릅니다.
- 그런 후 Google Cloud 리소스를 사용할 수 있도록 Cloud Console에서 결제를 사용 설정해야 합니다.
이 Codelab 실행에는 많은 비용이 들지 않습니다. 이 가이드를 마친 후 비용이 결제되지 않도록 리소스 종료 방법을 알려주는 '삭제' 섹션의 안내를 따르세요. Google Cloud 신규 사용자에게는 미화$300 상당의 무료 체험판 프로그램에 참여할 수 있는 자격이 부여됩니다.
Cloud Shell
Google Cloud를 노트북에서 원격으로 실행할 수도 있지만 이 Codelab에서는 Google Cloud에서 실행되는 명령줄 환경인 Cloud Shell을 사용합니다.
Cloud Shell 활성화
- Cloud Console에서 Cloud Shell 활성화를 클릭합니다.
이전에 Cloud Shell을 시작한 적이 없는 경우 기능을 설명하는 중간 화면 (스크롤해야 볼 수 있는 부분)이 표시됩니다. 이 경우 계속을 클릭합니다 (다시 표시되지 않음). 이 일회성 화면은 다음과 같습니다.
Cloud Shell을 프로비저닝하고 연결하는 데 몇 분 정도만 걸립니다.
가상 머신에는 필요한 개발 도구가 모두 들어 있습니다. 영구적인 5GB 홈 디렉터리를 제공하고 Google Cloud에서 실행되므로 네트워크 성능과 인증이 크게 개선됩니다. 이 Codelab에서 대부분의 작업은 브라우저나 Chromebook만 사용하여 수행할 수 있습니다.
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 앱 초기화
- 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 -
Initializr가 템플릿 앱의 pom.xml
에 있는 종속 항목에 spring-boot-starter-web
를 자동으로 추가합니다.
- 템플릿 앱의 디렉터리로 변경합니다.
$ cd kotlin-jib-cloud-run
- Maven을 사용하여 앱을 빌드하고 실행합니다.
$ ./mvnw -DskipTests spring-boot:run
- 앱이 시작되면 포트 8080에서 수신 대기를 시작합니다. Cloud Shell 툴바에서 웹 미리보기를 클릭하고 포트 8080에서 미리보기를 선택하여 앱에 액세스합니다.
- 앱이 아직 유용한 작업을 수행하지 않으므로 404 응답이 표시됩니다.
Control+C
로 앱을 중지합니다.
4. 웹 컨트롤러 추가
- 데모 패키지에서 다음
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!"
}
}
- 앱을 다시 빌드하고 실행합니다.
$ ./mvnw spring-boot:run
- 웹 미리보기 를 사용하여 앱을 다시 확인합니다. 이번에는 '
Kotlin app on Cloud Run, containerized by Jib!
' 메시지가 표시됩니다.Control+C
로 앱을 중지합니다.
5. 앱 컨테이너화 및 Container Registry에 게시
Jib을 사용하면 Docker 없이도 최적화된 방식으로 앱을 컨테이너화하고 모든 Container Registry에 게시할 수 있습니다.
- 계속하기 전에 Container Registry API를 활성화해야 합니다. 프로젝트당 한 번만 이 작업을 수행하면 API에 액세스할 수 있습니다.
$ gcloud services enable containerregistry.googleapis.com
- Jib를 실행하여 Docker 이미지를 빌드하고 Container Registry에 게시합니다.
$ ./mvnw com.google.cloud.tools:jib-maven-plugin:3.1.1: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
)로 올바르게 설정되어 있는지 다시 확인합니다.
- 계속하기 전에 이미지가 성공적으로 게시되었는지 확인합니다. Cloud 콘솔로 돌아가서 탐색 메뉴를 클릭하고 Container Registry를 선택합니다.
이미지가 성공적으로 게시되었음을 확인할 수 있습니다.
6. Cloud Run에서 컨테이너화된 앱 실행
Cloud Run은 서버리스에 컨테이너를 적용하여 스테이트리스(Stateless) 컨테이너를 자동으로 확장합니다.
- 탐색 메뉴 를 다시 클릭하고 Cloud Run을 선택합니다.
Cloud Run에 처음 액세스하는 경우 일회성 설정을 위한 다음 대화상자가 표시됩니다. Cloud Run 사용 시작이 표시되면 클릭합니다.
- Cloud Run 페이지에서 서비스 만들기를 클릭합니다.
- 다음 화면의 소스에서 선택을 클릭합니다. 소스는 Cloud Run에서 실행할 이미지입니다.
- 대화상자에 이전에 빌드한 이미지가 표시됩니다. 이미지를 선택하고 계속을 클릭합니다.
- 클릭 몇 번으로 지금 앱을 배포할 수 있습니다. 배포 플랫폼에서 Cloud Run (완전 관리형)을 선택하여 Google Cloud에서 서비스를 완전 관리형으로 만듭니다. 위치에 적합한 리전을 선택하고 인증되지 않은 호출 허용을 선택한 다음 만들기를 클릭합니다. 작업이 끝났습니다.
이미지가 완전히 배포되면 Cloud Run 페이지에 앱에 액세스할 수 있는 URL이 표시됩니다. 지금 확인해 보세요.
마지막으로 앱에서 기대한 메시지가 표시됩니다.
Kotlin app on Cloud Run, containerized by Jib!
작업이 끝났습니다. 향후 새로운 앱 버전을 배포해야 하는 경우 페이지에서 새 버전 배포를 클릭하면 됩니다.
7. 삭제
- 환경을 삭제하려면 Cloud Run에 배포된 앱과 Container Registry에 게시된 이미지를 삭제해야 합니다. Cloud Run으로 이동하여 앱을 선택한 후 삭제를 클릭합니다.
- 마찬가지로 Container Registry 페이지로 이동하여 이미지를 삭제합니다.
8. 축하합니다
축하합니다. Spring Boot Kotlin 앱을 컨테이너화하여 Cloud Run에 배포했습니다.
Jib를 사용하여 Docker를 설치하거나 Dockerfile을 작성하지 않고 최적화된 컨테이너 이미지를 빌드하여 Container Registry에 게시했습니다. Jib는 이미지 구성을 최적화하므로 Docker에 관한 심층적인 지식이 없는 사람도 Java 앱을 빠르고 효율적으로 컨테이너화할 수 있습니다. 그런 다음 몇 번의 클릭만으로 앱을 Cloud Run에 배포하여 즉시 서비스를 시작할 수 있습니다.