sequelize를 사용해서 multi database 사용하기
- tervancovan
- 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);
});

성공~!
Comments