top of page

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

작성자 사진: tervancovan
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);
    });


성공~!

 
 
 

최근 게시물

전체 보기

댓글


bottom of page