Server/클라우드

[Google Cloud] DB연결과 배포 - 스프링과 GCP 연동하기 3탄

Hannana. 2024. 2. 18. 00:21
반응형

드디어 스프링 프로젝트 배포의 마지막 단계이다.

1탄에서 생성한 mySQL DB인스턴스를 기억할 것이다.

 

 

↓ 이전 글(1탄)

 

[Google Cloud] 구글 클라우드 인스턴스 생성하기 - 스프링과 GCP 연동하기 1탄

구글 클라우드는 Google Cloud Platform (GCP) 라고도 불리우는 구글에서 운영하는 클라우드 서비스이다. 기존 컨테이너를 Google의 관리형 컨테이너 서비스로 이동하기 위한 도구이며 구글 검색과 유튜

hansjour.tistory.com

 

↓ 이전 글(2탄)

 

[Google Cloud] 구글 클라우드 셋팅 및 접속 - 스프링과 GCP 연동하기 2탄

저번 시간에는 로컬 컴퓨터에서 MySQL용 Cloud SQL에 연결하기 위한 전초과정이었다면 본격적으로 스프링 프로젝트를 배포하기 위해 Google Cloud의 VM을 만들어보자. ↓ 이전 글 [Google Cloud] 구글 클라

hansjour.tistory.com

 

 

 


 

 

이제 연결하자!!

 

 

 

 

1. DB인스턴스 연결

 

SQL - 연결 - 네트워크 추가

만들었던 VM의 공개 IP를 등록해준다.

참고로 IP는 고정IP로 승급시킨 뒤에 등록해야함

안그러면 연결마다 IP가 변경됨..

 

 

 

 

 

 

 

2. DB인스턴스 정보 확인

GCP 콘솔(https://console.cloud.google.com/)  - 연결 세부 정보

 

-인스턴스의 IP 주소 및 포트

-데이터베이스 이름

-사용자 이름 및 암호

 

를 확인한다.

 

 

 

 

2. 스프링부트 application.yml 설정

데이터베이스 연결 정보를 스프링 부트 애플리케이션의 application.yml 파일에 입력한다.

mysql 의존성 설정은 당연히 되어 있어야 함

spring:
  datasource:
    url: jdbc:mysql://YOUR_DB_IP:3306/YOUR_DB_NAME?useSSL=false&serverTimezone=UTC
    username: YOUR_DB_USER
    password: YOUR_DB_PASSWORD
    driver-class-name: com.mysql.cj.jdbc.Driver
  jpa:
    database-platform: org.hibernate.dialect.MySQL5Dialect
    hibernate:
      ddl-auto: update

 

 

 


※ 이렇게 했는데도, 에러가 뜨는 경우?

 

 

=> GCP콘솔-VPC방화벽 규칙

 

3306 포트를 열어준다.

 

 

 

그래도 안됨..

 

 

----> (해결) using password: YES 면 패스워드가 틀린 것이라는 이야기를 보고

설마, 하고 영문을 섞어 패스워드를 재정비하니 바로 연결 되었다. 

패스워드가 문제일 줄은 상상도 못했는데....^^

 

 

----> (추가) ddl-auto: update를 해주어도 JPA 에서 자동으로 테이블이 생성이 안된다면? 

  jpa:
    generate-ddl: true

 

를 추가해주면 문제가 해결되고, 코드를 돌리면 정상적으로 테이블이 자동 생성되는 것을 볼 수 있다.

(mysql workbench로 원격DB에 접속하였음)

 

 


 

 

3. 원격 DB 접속을 확인했으니, 프로젝트를 빌드해서 클라우드 서버로 보낸닷

4. GCP서버에서 작동 확인! 배포 끝!

 

 

 

 

 


 

 

느낀 점..

 

-의존성 설정/모듈 버전 확인을 잘 하자.

-공식 문서를 잘 보자.

-이해하면서 해결해나가자.

-GCP는 aws와 크게 다르지 않으나, 기능을 온전히 활용하려면 서버가 제공하는 기능이 뭔지 알아야한다.

-기본 지식이 있으면 플랫폼이 달라져도 쉽게 적응이 가능하겠구나.

-왜, 서버 접속이 안되냐 (대부분 방화벽 이슈..라고 생각했으나 또 그것만은 아닌듯)

     a. 접근이 허용된 IP인지

     b. 포트는 열려있는지

     c. 서비스가 실행 중인지

     d. 사용자 인증이 되었는지, 인증이 적합한지(credential issue)

-어떠한 서비스를 이용하려면 인증이 정확히 잘 이루어져야 하는구나

-생각보다 너무 쉽고 어이없는 게 정답일 수도 있다.

 

 

 

사실 새로운 클라우드 플랫폼을 이용한다는 게 엄두가 안나는 일인데

막상 사용해보니 적용하는 게 쏠쏠하고 재미있었다.

aws만큼.... UI가 편하지는 않은 느낌이라

특히나 사용자 인스턴스(VM)의 오버뷰가 더 간단하고 콘솔 메인에서 바로 접속이 가능하게 보완된다면 좋을 것 같다.

 

 

 

 

 

*참고한 공식 문서

https://mvnrepository.com/

 

 

 

반응형