Node.js Sequelize 연동

Eom Deokhyeon·2022년 9월 13일
1
post-thumbnail
post-custom-banner

Sequelize란?

  • 자바스크립트 객체와 데이터베이스의 릴레이션을 매핑해주는 도구다. 여러 가지 데이터베이스와 연결할 수 있으며 자바스크립트 구문을 알아서 SQL로 바꿔주기 때문에 자바스크립트만으로 데이터베이스를 조작할 수 있다.

1. 라이브러리 설치

$ npm install sequelize sequelize-cli mysql2
  • sequelize-cli : sequelize 명령어를 실행하기 위한 패키지
  • mysql2 : MySQL과 sequelize를 연동해주는 드라이버

$ npx sequelize init
  • 코드가 실행되면 config, models, migrations 등의 폴더가 생성된다.

2. Sequelize와 MySQL 연동

2-1. config.js 파일 설정

/// config/config.js

module.exports = {
  "development": {
    "username": "root",
    "password": "DB 비밀번호",
    "database": "DB 이름",
    "host": "127.0.0.1",
    "dialect": "mysql",
  },
  "test": {
    "username": "root",
    "password": "MySQL 비밀번호",
    "database": "DB 이름",
    "host": "127.0.0.1",
    "dialect": "mysql",
  },
  "production": {
    "username": "root",
    "password": "MySQL 비밀번호",
    "database": "DB 이름",
    "host": "127.0.0.1",
    "dialect": "mysql",
  }
}

2-2. Sequelize 초기화

// models/index.js

const Sequelize = require('sequelize');
const Example = require('./Example');

const env = process.env.NODE_ENV || 'development';
const config = require('../config/config')[env];
const db = {};

const sequelize = new Sequelize(config.database, config.username, config.password, config);

db.Example = Example;

Object.keys(db).forEach(modelName => {
  db[modelName].init(sequelize);
})

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

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

module.exports = db;

2-3. Model 정의

// models/model.js

const DataTypes = require('sequelize');
const { Model } = DataTypes;

module.exports = class Example extends Model {
  static init(sequelize) {
    return super.init({
      title: {
        type: DataTypes.STRING(50),
      },
      description: {
        type: DataTypes.STRING(200),
      },
    }, {
      modelName: 'Example',
      tableName: 'examples',
      charset: 'utf8mb4',
      collate: 'utf8mb4_general_ci',
      sequelize,
    })
  };
 
  static associate(db) {
    db.Example.belongsTo(db.Example2);
    db.Example.belongsTo(db.Example3);
  };	
 };

2-4. app.js 수정

// app.js

const db = require('./models');

db.sequelize.sync()
  .then(() => {
    console.log("DB Connection Success!")
  })
  .catch(console.error);
post-custom-banner

0개의 댓글