크게 2가지 방식이 있다.
1. TCP/IP 연결방식
- GCP MySQL에 TCP/IP를 통해 접근할 수 있다.
- GCP 외부, 즉 당신이 사용하고 있는 개발PC에서 이 방식을 사용하려면 GCP의 가이드에 따라 Proxy 설정을 해야한다.(https://cloud.google.com/sql/docs/mysql/connect-external-app?hl=ko)
- Proxy 설정이 번거롭다면 [GCP console] - [좌측메뉴 SQL] - [인스턴스ID 클릭] - [좌측메뉴 연결] 공개IP에 개발PC의 IP주소를 추가한다.
var base = new Sequelize(config.database, config.user, config.password, {
host: config.host,
port: config.port,
dialect: 'mysql',
pool: {
max: 5,
min: 0,
acquire: 30000,
idle: 10000
},
define: {
engine: 'innodb',
freezeTableName: true,
timestamps: false,
},
});
2. domain socket 연결방식
- GCP 내부에서는 별도 인증없이 domain socket을 통해 연결할 수 있다. 단, 다른 프로젝트이거나 MySQL이 표준이 아니고 유연성이라면 설정이 필요하다. 나는 만난 문제가 아니니 이후에 공식문서를 열심히 봐보자.(https://cloud.google.com/sql/docs/mysql/connect-app-engine?hl=ko#standard)
- GCP 외부, 즉 당신이 사용하고 있는 개발PC에서 이 방식을 사용하려면 GCP의 가이드에 따라 Proxy 설정을 해야한다.
- Proxy 설정이 번거롭다면 [GCP console] - [좌측메뉴 SQL] - [인스턴스ID 클릭] - [좌측메뉴 연결] 공개IP에 개발PC의 IP주소를 추가한다.
var base = new Sequelize(config.database, config.user, config.password, {
host: `/cloudsql/${config.socketPath}`,
port: config.port,
dialect: 'mysql',
pool: {
max: 5,
min: 0,
acquire: 30000,
idle: 10000
},
dialectOptions: {
socketPath: `/cloudsql/${config.socketPath}`
},
define: {
engine: 'innodb',
freezeTableName: true,
timestamps: false,
},
});
3. 내가하는 방식
- 개발PC에 프록시 설정까지도 번거로워서 개발시에는 개발PC의 IP를 승인하고 TCP/IP 연결방식으로 작업한다. 그러고 실서버로 사용하고 있는 App Engine 내부에서는 domain socket으로 연결되도록 했다.
- global.js
// global config
var config = new Map();
// mysql
config.set("type","dev");
config.set('mysql', {
host: '12.34.56.789',
port: 3306,
user: 'root',
password: '123456789qwer',
database: 'databasename',
socketPath: 'INSTANCE_CONNECTION_NAME:asia-northeast3:INSTANCE_CONNECTION_NAME'
});
// merge config from local.js
// if local.js is existed and local.js defines the configuration is used to local's, otherwise use global's
// like array_merge function in php
var fs = require('fs');
if (fs.existsSync(__dirname + '/local.js')) {
var customer = require('./local');
customer.forEach(function (value, key) {
config.set(key, value);
});
}
module.exports = config;
- base.js
// load
var type = require('../config/global').get('type');
var config = require('../config/global').get('mysql');
var Sequelize = require('sequelize');
// ORM Instance create
console.log("TYPE : ", type);
if(type == "dev"){
var base = new Sequelize(config.database, config.user, config.password, {
host: config.host,
port: config.port,
dialect: 'mysql',
pool: {
max: 5,
min: 0,
acquire: 30000,
idle: 10000
},
define: {
engine: 'innodb',
freezeTableName: true,
timestamps: false,
},
// timezone: '+09:00'
});
}
if(type == "pdct"){
var base = new Sequelize(config.database, config.user, config.password, {
host: `/cloudsql/${config.socketPath}`,
port: config.port,
dialect: 'mysql',
pool: {
max: 5,
min: 0,
acquire: 30000,
idle: 10000
},
dialectOptions: {
socketPath: `/cloudsql/${config.socketPath}`
},
define: {
engine: 'innodb',
freezeTableName: true,
timestamps: false,
},
// timezone: '+09:00'
});
}
console.log('Create ORM Object!');
module.exports = base;
'Javascript > Node.js' 카테고리의 다른 글
[Notion]노션에 HTML 페이지 embed하기 (0) | 2022.07.02 |
---|---|
mocha 설치 및 기본 사용 방법 (0) | 2021.06.24 |
[GCP][AppEngine][NodeJS] node-schedule 문제 스케쥴러 인스턴스 문제, GAE cron (0) | 2020.07.09 |
[Nodejs][ejs] HTML 이스케이프 문자 파싱, HTML 태그 적용 (2) | 2019.07.24 |
[Node.js][pm2] pm2 설치, 명령어 (1) | 2019.07.24 |