Cloud SQL에 Spring Boot 앱 연결

1. 시작하기 전에

Cloud SQL은 Google Cloud에서 관계형 데이터베이스를 손쉽게 설정, 유지, 관리할 수 있는 완전 관리형 데이터베이스 서비스입니다. MySQL용 Cloud SQL 또는 PostgreSQL용 Cloud SQL과 함께 Cloud SQL을 사용할 수 있습니다.

이 Codelab에서는 MySQL용 Cloud SQL 인스턴스를 설정한 다음 Cloud SQL 인스턴스를 백엔드 스토리지로 사용하도록 Spring Boot 앱을 업데이트하는 방법을 알아봅니다. Google Cloud SQL용 Spring Boot Starter는 자동 구성된 DataSource를 제공하므로 코드를 거의 변경하지 않고도 Cloud SQL을 쉽게 활용할 수 있습니다. 이 Codelab에서는 Spring Petclinic 소스 코드를 사용합니다.

기본 요건

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

실행할 작업

  • Spring Boot 앱에서 Cloud SQL을 사용합니다.

필요한 항목

2. 설정 및 요건

자습형 환경 설정

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

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.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 활성화

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

55efc1aaa7a4d3ad.png

Cloud Shell을 처음 시작하는 경우에는 무엇이 있는지 설명하는 중간 화면이 표시됩니다. 중간 화면이 표시되면 계속을 클릭합니다.

92662c6a846a5c.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. MySQL용 Cloud SQL 인스턴스 설정

  1. Cloud Shell이 실행되면 명령줄을 사용하여 새 Cloud SQL 인스턴스를 만들 수 있습니다.
$ gcloud sql instances create my-instance

이 작업이 완료되면 인스턴스를 사용할 수 있습니다.

  1. 이제 Petclinic 앱에 사용할 데이터베이스를 만듭니다.
$ gcloud sql databases create petclinic --instance my-instance

Cloud 콘솔을 통해 인스턴스에 액세스하고 구성할 수도 있습니다.

  1. 다음 명령어를 실행하여 project-id:zone-id:instance-id 형식으로 인스턴스 연결 이름을 가져옵니다. 나중에 Spring Boot 앱을 구성할 때 사용합니다.
$ gcloud sql instances describe my-instance | grep connectionName

4. 로컬에서 Petclinic 앱 클론 및 테스트

  1. 이제 Petclinic 앱을 로컬로 클론합니다.
$ git clone https://github.com/spring-projects/spring-petclinic

$ cd spring-petclinic
  1. 올바른 Java 버전이 설정되어 있는지 확인하고 Petclinic 앱을 로컬에서 실행합니다.
$ export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64/

$ ./mvnw spring-boot:run
  1. Cloud Shell에서 웹 미리보기 1a94d5bd10bfc072.png를 클릭한 다음 포트 8080에서 미리보기를 선택합니다.

3aca52f76c6c22a3.png

브라우저에 다음과 같이 Petclinic 홈페이지가 표시됩니다.

34e0d4f1e1765560.png

  1. 데이터를 추가하고 추가합니다. 앱이 메모리 내 HyperSQL 데이터베이스를 사용합니다. 이제 HyperSQL에서 Cloud SQL을 데이터베이스로 사용하도록 전환해 보겠습니다.

5. 펫클리닉에서 Cloud SQL 사용하기

Maven pom.xml 파일 업데이트

다음과 같이 pom.xml 파일을 업데이트합니다. 시작 조건은 Cloud SQL 데이터베이스에 연결하도록 자동 구성된 DataSource 객체를 제공합니다. Vim, nano 또는 Emacs를 사용하여 파일을 편집할 수 있습니다.

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" ...>
    ...
    <!-- Add Spring Cloud GCP Dependency BOM -->
    <dependencyManagement>
        <dependencies>
          <dependency>
          <groupId>com.google.cloud</groupId>
          <artifactId>spring-cloud-gcp-dependencies</artifactId>
          <version>4.1.4</version>
          <type>pom</type>
          <scope>import</scope>
          </dependency>
      </dependencies>
    </dependencyManagement>
    <dependencies>
      ...
      <!-- Add CloudSQL Starter for MySQL -->
      <dependency>
        <groupId>com.google.cloud</groupId>
        <artifactId>spring-cloud-gcp-starter-sql-mysql</artifactId>
      </dependency>
      ...
    </dependencies>
</project>

application-mysql.properties 업데이트

  1. src/main/resources/application-mysql.properties의 콘텐츠를 다음 속성으로 대체합니다. 이전 단계에서 인스턴스 연결 이름을 설정해야 합니다.

src/main/resources/application-mysql.properties

database=mysql

spring.cloud.gcp.sql.database-name=petclinic
spring.cloud.gcp.sql.instance-connection-name=YOUR_CLOUD_SQL_INSTANCE_CONNECTION_NAME

# Initialize the database since the newly created Cloud SQL database has no tables. The following flag is for Spring Boot 2.5+.
spring.sql.init.mode=always  

  1. 마지막으로 application.propertiesmysql을 추가하여 Spring Boot 앱에서 MySQL용 Cloud SQL 프로필을 사용 설정합니다. spring.profiles.active 속성:

src/main/resources/application.properties

# Keep the content of the file the same
...

# In the last line, add mysql to the spring.profiles.active property
spring.profiles.active=mysql

6. Cloud Shell에서 앱 실행

  1. Spring Boot 플러그인을 사용하여 평소처럼 Spring Boot 앱을 시작할 수 있습니다.
$ ./mvnw -DskipTests spring-boot:run
  1. 앱이 시작되면 Cloud Shell 툴바에서 웹 미리보기1a94d5bd10bfc072.png를 클릭한 다음 포트 8080에서 미리보기를 선택합니다.

3aca52f76c6c22a3.png

브라우저에 다음과 같이 Spring Petclinic 홈페이지가 다시 표시됩니다.

34e0d4f1e1765560.png

  1. 반려동물 소유자 항목을 추가합니다.

선택사항: Cloud SQL이 데이터를 유지했는지 확인

입력한 데이터가 여기에 표시된 것처럼 Cloud SQL에 유지되었는지 확인할 수 있습니다. 비밀번호를 입력하라는 메시지가 표시되면 Enter 키를 누릅니다.

$ gcloud sql connect my-instance -u root
Whitelisting your IP for incoming connection for 5 minutes...done.
Enter password: <Press Enter, there is no password by default>
...
mysql> use petclinic;
mysql> select * from owners;

선택사항: Cloud SQL 인스턴스 삭제

앱을 중지하면 다음 명령어를 사용하여 Cloud SQL 인스턴스를 삭제할 수 있습니다.

$ gcloud sql instances delete my-instance

7. 축하합니다

Spring Boot 앱에서 Cloud SQL에 연결하는 방법을 알아보았습니다.

자세히 알아보기