백앤드(Back-End)/Node.JS

[Node.js] Sequelize 개념 및 설치

RyanSin 2021. 2. 10. 14:00
반응형

- 개요

안녕하세요. 이번 시간에는 시퀄 라이즈(Sequelize)에 대해 알아보겠습니다.

 

시퀄 라이즈(Sequelize)란 무엇일까요? 시퀄 라이즈는 DB 작업을 쉽게 할 수 있도록 도와주는 ORM 라이브러리입니다.

ORM이란 무엇일까요? ORM(Object-Relational Mapping)에 약자입니다.

 

즉, ORM은 자바스크립트 객체와 관계형 데이터베이스를 서로 연결해주는 도구입니다.

 

- 설치

sequelize와 sequelize-cli 그리고 mysql2를 설치해주세요. (저는 MySQL 데이터베이스에서 사용을 해봤습니다.)

 

npm install sequelize sequelize-cli mysql2

 

sequelize-cli는 시퀄라이즈 명령어를 실행하기 위한 패키지 라이브러리입니다. Global 설치해도 상관이 없습니다. (저는 글로벌 설치를 통해 로컬 안에서 프로젝트마다 사용했습니다.)

 

mysql2는 MySQL과 연결해주는 드라이버입니다.

 

설치를 완료 후 sequelize init 명령어를 실행합니다.

sequelize init

해당 명령어를 실행하면 아래와 같이 디렉터리와 파일이 생성이 됩니다.

 

config/config.json

{
  "development": {
    "username": "root", //DB와 연결할 유저 "이름"
    "password": null, //DB와 연결할 유저 "비밀번호"
    "database": "Ryan", //사용할 Database 이름
    "host": "127.0.0.1", //DB 서버 호스트
    "dialect": "mysql" //DB 타입 설정 (mysql이 아니면 다른 DB 설정)
  },
  "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"
  }
}

 

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;

//config/config.js 파일에 있는 정보를 가져와 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);
}

// 우리가 작성한 Table파일을 찾아온다.
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;
  });

//DB에 모델이름을 연결한다.
Object.keys(db).forEach(modelName => {

  if (db[modelName].associate) {
    db[modelName].associate(db);
  }
});

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

module.exports = db;

migrations

migrations이란 우리가 데이터베이스에 테이블에 칼럼 정보가 변경되서나 이런 특수한 상황을 변경할 때 사용됩니다.

(migrations에 대한 내용은 다른 포스팅에서 하겠습니다.)

seeders

seeders 파일은 서버를 실행하거나 아니면 콘솔 창 명령어를 실행했을 때 sequelize를 통해 DB에 데이터를 생성할 때 사용됩니다.

(seeders에 대한 내용은 다른 포스팅에서 하겠습니다.)

 

- DB 생성

sequelize에서 DB를 생성하는 방법은 터미널에 명령어를 통해 사용 가능합니다.

 

sequelize db:create

위 명령어를 통해 config/config.json 파일을 읽은 후, develpment 모드에 작성되어 있는 Ryan DB가 생성이 됩니다.

 

실행 결과

 

MySQL 콘솔에서 DB 목록을 조회하면 해당 DB가 생성된 걸 확인할 수 있습니다.

 

- Model 생성

models/Users.js

module.exports = (sequelize, DataTypes) => {

    const Users = sequelize.define("Users", {
      id: {
        type: DataTypes.UUID,
        defaultValue: DataTypes.UUIDV4,
        primaryKey: true,
        comment: "고유번호 UUID",
      },
      email: {
        type: DataTypes.STRING(100),
        validate: {
          isEmail: true,
        },
        comment: "이메일",
      },
      password: {
        type: DataTypes.STRING(60),
        comment: "비밀번호",
      },
      name: {
        type: DataTypes.STRING(100),
        comment: "이름",
      },
      phone: {
        type: DataTypes.STRING(72),
        comment: "전화번호",
      },
    }, {
      charset: "utf8", // 한국어 설정
      collate: "utf8_general_ci", // 한국어 설정
      tableName: "Users", // 테이블 이름
      timestamps: true, // createAt & updateAt 활성화
      paranoid: true, // timestamps 가 활성화 되어야 사용 가능 > deleteAt 옵션 on
    });
  
    return Users;
  };

 

위 내용은 다른 포스팅을 통해 자세하게 설명하겠습니다. 해당 파일을 models 디렉터리 안에 Users.js 파일 이름으로 생성합니다.

 

- 연결

const { sequelize } = require('./models');

sequelize.sync({ force: false })
.then(() => {
    console.log('데이터베이스 연결 성공');
})
.catch((err) => {
    console.error(err);
});

index.js 파일, 즉, "서버를 실행하는 파일"에 해당 소스코드를 넣어 실행합니다.

 

실행 결과

 

복잡해 보이지만 DB 연결이 성공했으며, MySQL 콘솔에서 테이블을 조회해보면 아래와 같은 테이블이 생성됐습니다.

 

테이블 목록

 

Users 테이블 정보 조회

 

이번 시간에는 설치 및 시퀄라이즈에 대해 알아봤습니다. 감사합니다. :)