[Project] Ecoya - GCP Cloud SQL 연동

익선·2023년 9월 15일
0

프로젝트

목록 보기
1/2

서론

GCP 를 사용하게 된 이유?

필자는 학교 동아리에서 받은 크레딧을 사용하기 위해서 우선적으로 네이버 클라우드 플랫폼(NCP)에서 제공하는 Cloud DB for MySQL 을 DB 로 사용했었다. 하지만, NCP 는 가격이 너무 비쌌고, GCP Cloud SQL의 경우 공유 리소스(ex. 0.3 vCPU) 플랜이 추가되어 NCP 보다 가격적으로 저렴하였기 떄문에 GCP 로 변경하게 되었다.

기존에는 NCP를 사용해서 sprinboot 프로젝트를 배포했었는데, 배포 서버를 그대로 NCP 로 유지한 채 DB를 GCP로 이전하게 된다면 추후에 진행할 CI/CD 작업이 불가능하기 떄문에 이번 포스트에서는 GCP 로 DB를 관리하는 방식으로 변경하고 이후 배포 서버를 Docker 로 바꿀 예정이다.

GCP 환경 설정

1) VM 인스턴스 생성

Google Cloud Platform 에 접속하기 전 새로운 구글 계정을 하나 만들기를 권장한다. (90일 동안 $300 크레딧을 제공해주는 무표 평가판 사용을 위해)

원하는 프로젝트를 하나 만들어도 되지만 기존 디폴트로 생성된 프로젝트로 진행여도 무관하니 바로 다음으로 넘어가자

가상 서버를 생성하기 위해 GCP 콘솔 메뉴탭에서 Compute EngineVM 인스턴스 탭으로 들어간다.

VM 인스턴스 만들기 를 클릭하여 다음을 설정한다.

  • VM 이름은 원하는 이름으로 짓고, 리전은 낮은 CO2 지역 중 그나마 가까운 오리건으로 선택한다.
  • 제일 값싼 N1 시지르의 f1-micro 를 선택한다.
  • 부팅 디스크는 ubuntu 로 지정하고 방화벽은 이후에도 설정하겠지만 우선 HTTP 트래픽 허용과 HTTPS 트래픽 허용에 체크를 눌러준다.

위와 같은 설정을 마치고 VM 인스턴스를 생성한다.

2) 네트워크 설정

VM 인스턴스를 생성하게 되면 해당 OS 가 설치만 되기 때문에 필요한 애플리케이션 설정 및 네트워크 설정을 해주어야 한다.

생성된 VM 인스턴스를 클릭하고 점세개를 눌러 네트워크 세부정보 보기 를 클릭한다.

고정 IP 설정

클라우드 서비스는 기본적으로 동적인 외부 IP 를 가지고 있다. 즉 인스턴스가 재실행 될 경우 IP 가 변경될 수 있다는 의미이다.

따라서, 인스턴스가 유지되는 동안 고정 IP 를 사용하여 IP 가 변경되지 않도록 해야한다.

  • 외부 IP 주소 할당
    • 외부 고정 주소 예약 을 누르고 이름은 static01 로 하고 버전은 IPv4, 연결 대상은 아까 만들었던 VM 인스턴스로 선택하고 예약 버튼을 누른다.

방화벽 규칙 변경하기

VPC 네트워크의 방화벽 메뉴로 이동한다.

방화벽 설정을 하여 특정 프로토콜과 포트를 허용해준다. 외부망에서 GCP 로 접속하는 Inbound는 TCP/UDP/ICMP 프로토콜과 80/443/22/3389 포트만 허용하고 있다. 포트가 허용되지 않으면, 나중에 배포 후 테스트 할 떄 접속되지 않을 수 있으니 8080 포트와 3306 포트를 열어주도록 한다.

3) Cloud SQL 생성 및 사용

메뉴탭에서 SQL 을 클릭하고 인스턴스 만들기 를 클릭한다.

다음으로 MySQL 을 선택하고 다음을 설정한다.

  • 인스턴스 ID(root), 비밀번호를 설정한다.
  • Cloud SQL 버전은 저렴한 Enterprise 의 샌드박스를 선택한다.
  • 리전은 오리건(VM 인스턴스와 연동을 하기 위해서 같은 리전을 선택해야 함), 영역 가용성은 단일 영역을 선택한다.

4) 로컬에서 Cloud SQL 접속 테스트

데이터베이스 생성하기

위에서 생성한 MySQL 의 데이터베이스를 새로 추가한다. (ex. ecology_map)

인스턴스 연결 설정

외부에서 접속하기

인스턴스가 생성되었다면 공개 IP 주소를 이용해 RDS 에 접속할 수 있다. 로컬의 springboot 프로젝트에서 테스트로 Cloud SQL 에 접속해 보겠다.

1) application.properties 작성 후 프로젝트 실행

# application.properties

spring.datasource.url=jdbc:mysql://{공개 IP 주소}/ecology_map?useSSL=false&characterEncoding=UTF-8&serverTimezone=UTC # ecology_map 이라는 database 에 연결
spring.datasource.username=root # Cloud SQL 에서 생성한 MySQL 의 인스턴스 ID
spring.datasource.password=  # Cloud SQL 에서 생성한 MySQL 의 password
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.hibernate.ddl-auto=update

2) DBeaver 연동하여 DB 확인

  • 이때 로컬 클라이언트 설정 : mysql 위치 (/opt/homebrew/bin)

클라우드 쉘을 통해 내부에서 DB 접속하기

인스턴스 ID 를 클릭해 개요에 들어가면 인스턴스에 연결 에 보면 Cloud shell 열기가 보인다. 열기를 클릭하고 다음과 같이

클라우드 쉘을 통해 GCP 서버에 접속하는 것이 아닌 터미널 ssh 연결을 통해 접속하는 방법이 아래 포스팅 되어있다.
[SpringBoot] M1 Mac GCP 인스턴스 ssh 접속방법

참고
https://choo.oopy.io/5c999170-dde5-4418-addc-00a0d263287c#992bc387-6591-4ba6-88fd-f30aa5edee59

profile
꾸준히 기록하는 사람

2개의 댓글

comment-user-thumbnail
2024년 7월 15일

오늘 하루종일 헤맨거 덕분에 해결했습니다.....감사합니다 ㅠㅠ

1개의 답글