Notice
Recent Posts
Recent Comments
Today
Total
04-27 17:32
Archives
관리 메뉴

Jeongchul Kim

[Google Cloud Platform] Cloud SQL을 활용한 DB 구축 본문

Google Cloud Platform

[Google Cloud Platform] Cloud SQL을 활용한 DB 구축

김 정출 2022. 7. 31. 19:24

[Google Cloud Platform] Cloud SQL을 활용한 DB 구축

Cloud SQL은 Google Cloud에서 제공하는 완전 관리형 SQL 데이터베이스 서비스입니다.  PostgreSQL, MySQL, SQL Server가 있습니다.

사이드 메뉴에서 SQL을 선택하고, 인스턴스 만들기 버튼을 클릭합니다.

 

데이터베이스 엔진을 선택합니다. MySQL을 선택합니다.

 

인스턴스 정보를 입력합니다.

  • 인스턴스 ID: jckim-db
  • 비밀번호: 비밀번호-입력
  • DB 버전: MySQL 8.0
  • 리전: asia-northeast3(서울)
  • 용역 가용성: 테스트 용도로 단일 영역, 상용 운영은 여러 영역(고가용성)

 

 

DB 인스턴스가 생성됩니다.

 

Cloud SQL Admin API 사용 필요합니다. 

다음의 페이지에서 https://console.cloud.google.com/apis/library/ cloud sql을 검색합니다.

Cloud SQL Admin API의 사용 버튼을 클릭합니다.



DB 접속을 위해 Cloud Shell을 이용합니다.

$ gcloud sql connect jckim-db --user=root --quiet

 

MySQL DB 접속 후 DB를 생성합니다.

> CREATE DATABASE dev;

 

MySQL 유저를 생성합니다.

> CREATE USER 'dev'@'%' identified by 'jeongchul!@#';

> GRANT ALL PRIVILEGES ON dev.* TO dev@’%’;

  

 

> USE dev;

> CREATE TABLE `user` (
    `user_id` varchar(100) NOT NULL,
    `user_name` varchar(100) NOT NULL,
    `create_time` datetime NOT NULL DEFAULT current_timestamp,
    PRIMARY KEY (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

> INSERT INTO user VALUE (‘jckim’ jeongchul kim’, current_timestamp());

 

 

DB 작업은 완료가 되었습니다.

 

WAS 서버의 golang 에서 DB 커넥션 연결을 진행합니다.

https://jeongchul.tistory.com/694

 

GKE, Compute Engine의 VM과 연결을 위해 비공개 IP 설정을 통해 내부 VPC IP 주소를 할당합니다.

연결 > 비공개 IP를 선택하고, 연결된 네트워킹은 default로 선택합니다. 

비공개 서비스 액세스 연결 필요에서 연결 설정 버튼을 클릭합니다.

 

Service Networking API 사용 설정을 진행합니다.

 

자동으로 할당된 IP를 선택하고 연결 만들기 버튼을 클릭합니다.

 

 

저장 버튼을 클릭합니다.



해당 비공개 IP 주소를 통해 Compute Engine의 VM이나 GKE의 Pod 내부에서 연결합니다.




gorilla(https://github.com/gorilla)를 활용하여 DB 커넥션을 맺고 테이블을 조회하여 API를 제공하는 was 서버로 진행하겠습니다. 

 

해당 Github에 있는 코드를 참고하세요.

https://github.com/KimJeongChul/go-was-example/tree/main/api-db-server 

 

main.go에서 DB 정보를 전달합니다.

rdbHandler := database.RDBHandler{
	UserName:      "dev",
	Password:      "jeongchul!@#",
	ServerAddress: "[GOOGLE_CLOUD_SQL_INTERNAL_IP]", // Cloud SQL의 내부 주소를 입력하세요
	DbName:        "dev",
}

 

DB 커넥션을 맺는 부분은 database 패키지에 gorm을 활용하여 dbhandler.go에 있습니다. 

dsn := rdb.UserName + ":" + rdb.Password + "@tcp(" + rdb.ServerAddress + ")/" + rdb.DbName + "?charset=utf8mb4&parseTime=True&loc=Local"
log.Println("database::dsn:", dsn)

var err error
rdb.db, err = gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
	log.Println("database::Connect > Error:", err)
	return err
}

 

해당 코드로 Compute Engine의 VM에서 빌드합니다.

 

$ go build

$ sudo ./api-db-server

 

웹 브라우저에서 해당 Compute Engine VM의 공인 IP로 입력합니다.

 

 

이상으로 Cloud SQL을 활용해 DB 구축을 진행하였습니다. 

감사합니다.

 

Comments