본문 바로가기
Node.js/express

[Node.js] sequelize 사용하기 1

by kiwi_wiki 2021. 3. 22.

테이블 생성도 그렇고 쿼리 사용도 그렇고 직접 하는 방법도 좋지만 ORM을 활용해 편리하게 하고 싶어서 찾아보다가 sequelize를 많이 쓰는 것 같아 나도 사용해보기로 했다.

 

역시 우선적으로 해야 할 것은 sequelize 설치이다.

$ npm install sequelize --save

 

그리고 sequelize-cli 도 설치한다. 이것은 sequelize를 더 쉽게 조작하기 위한 것이다.

$ npm install -g sequelize-cli

-g 옵션을 통해 글로벌하게 사용할 수 있도록 설치해준다.

 

만약 아래와 같은 에러가 난다면 -g 옵션으로 설치하는데에 있어서 권한이 없는 문제이므로 명령어의 맨 앞에 sudo를 붙여주면 문제없이 설치할 수 있다. 

 $ sudo npm install -g sequelize-cli 

 

모두 설치가 완료되었으면 초기화 해주는 명령어를 입력한다.

$ sequelize init

 

그러면 여러 폴더들과 파일들이 생성된 것을 확인할 수 있다.

그중 /config/config.json 파일을 먼저 확인해보자.

{
  "development": {
    "username": "root",
    "password": null,
    "database": "database_development",
    "host": "127.0.0.1",
    "dialect": "mysql"
  },
  "test": {
    "username": "root",
    "password": null,
    "database": "database_test",
    "host": "127.0.0.1",
    "dialect": "mysql"
  },
  "production": {
    "username": "root",
    "password": null,
    "database": "database_production",
    "host": "127.0.0.1",
    "dialect": "mysql"
  }
}

 

해당 파일이 환경별 데이터베이스 접속 정보를 다루고 있는 것을 확인할 수 있다.

이전 글에서 index.js에 입력했던 접속 정보를 config.json 파일에서 development 환경 부분에 입력하자.

 

그리고 /models/index.js 파일을 살펴보자.

'use strict';

const fs = require('fs');
const path = require('path');
const Sequelize = require('sequelize');
const basename = path.basename(__filename);
const env = process.env.NODE_ENV || 'development';
const config = require(__dirname + '/../config/config.json')[env];
const db = {};

let sequelize;
if (config.use_env_variable) {
  sequelize = new Sequelize(process.env[config.use_env_variable], config);
} else {
  sequelize = new Sequelize(config.database, config.username, config.password, config);
}

fs
  .readdirSync(__dirname)
  .filter(file => {
    return (file.indexOf('.') !== 0) && (file !== basename) && (file.slice(-3) === '.js');
  })
  .forEach(file => {
    const model = require(path.join(__dirname, file))(sequelize, Sequelize.DataTypes);
    db[model.name] = model;
  });

Object.keys(db).forEach(modelName => {
  if (db[modelName].associate) {
    db[modelName].associate(db);
  }
});

db.sequelize = sequelize;
db.Sequelize = Sequelize;

module.exports = db;

간단하게 소스를 파악해보면 config.json을 통해 환경에 맞는 데이터 베이스에 연결하고 models 폴더 내에 있는 파일들을 읽고, 그것들을 모델로 정의해주고, models에 원하는 테이블 이름을 파일의 이름으로 js 파일로 만들어 준 후 모델을 정의하면 테이블이 만들어진다.

728x90
반응형