sequelize를 사용해서 multi database 사용하기

2020년 4월 20일
2분 분량
요새는 admin.4cut.ai를 개발하고있다.
처음에는 툰을 대신 그려줍니다. 컨셉이 였다가.
이제는 또다른 형태로 변해 간다.
같은 탬플릿 많은 세미 포토샵?
여하튼 최근 미션은

1.로그인 후 이미지 업로드
2.로그인 후 이미 업로드한 이미지가 있다면 내려주기
현재 디비는 mariadb 를 사용하고 있다.
sql문을 너무 쓰기 싫어하는 스타일이라 sequelize 를 사용했다 문제는
기존에 사용하는 postgres db를 sequelize와 연결해서 사용하고있던 터라
멀티로 사용해야 하는 문제가 생겼다.
세팅해야될 것이 한 4가지 정도 되었다.
1. 멀티 config.json

mariadb.json 의 예시 처럼 psqldb도 만들어주었다.
{
"stage": {
"username": "아이디",
"password": "비밀번호",
"database": "디비이름",
"host": "mariadb stage 주소",
"dialect": "mariadb",
"operatorsAliases": false
},
"development": {
"username": "아이디",
"password": "비밀번호",
"database": "디비이름",
"host": "mariadb development 주소",
"dialect": "mariadb",
"operatorsAliases": false
},
"production": {
"username": "아이디",
"password": "비밀번호",
"database": "디비이름",
"host": "mariad production 주소",
"dialect": "mariadb",
"operatorsAliases": false
}
}
2.멀티 models

3.sequelize-cli를 위한 멀티 env

4.sequelize index.js 수정
'use strict';
const fs = require('fs');
const debug = require('debug')('sequelize:index');
const path = require('path');
const Sequelize = require('sequelize');
const basename = path.basename(__filename);
const env = process.env.NODE_ENV || 'development';
const config_dirs = fs.readdirSync(__dirname+'/../config');
let configs = []
const db = {};
config_dirs.forEach(dir=>{
configs.push(require(__dirname + '/../config/'+dir+'/config.json')[env]);
})
debug(configs);
configs.forEach((config)=>{
db[config.dialect] = new Sequelize(config.database, config.username, config.password, {...config, logging:(...msg)=> debug(msg)});
})
/**Add the Database Models**/
//Add models from database1 folder
fs
.readdirSync(__dirname + '/psqldb')
.filter(file => {
return (file.indexOf('.') !== 0) && (file !== basename) && (file.slice(-3) === '.js');
})
.forEach(file => {
const model = db.postgres.import(path.join(__dirname + '/psqldb', file));
db[model.name] = model;
});
fs
.readdirSync(__dirname + '/mariadb')
.filter(file => {
return (file.indexOf('.') !== 0) && (file !== basename) && (file.slice(-3) === '.js');
})
.forEach(file => {
const model = db.mariadb.import(path.join(__dirname + '/mariadb', file));
db[model.name] = model;
});
Object.keys(db).forEach(modelName => {
if (db[modelName].associate) {
db[modelName].associate(db);
}
});
db.Sequelize = Sequelize;
module.exports = db;
express의 app.js안에서 마리아 디비 authenticate()를 시도해 보았다
db.mariadb
.authenticate()
.then(() => {
debug('maraidb Connection has been established successfully.');
})
.catch(err => {
debug('mariadb Unable to connect to the database: %O', err);
});
성공~!


댓글