Node.js Sequelize 사용하기

‍정진철·2022년 11월 27일

Sequelize ORM 이란

  • SQL 작업을 쉽게 할 수 있도록 도와주는 라이브러리
  • ORM : Object Relational Mapping : 객체와 데이터를 매핑 (1:1매핑)
  • MySQL 외에도 다른 RDB (MariaDB, Postgre, SQLite) 와도 호환됨
  • 자바스크립트 문법으로 데이터베이스 조작 가능.

  • mysql2 는 mysql와 같은 데이터베이스가 아닌 드라이버임.
  • 마우스를 본체에 꼽으면 마우스 드라이버가 마우스와 컴퓨터를 연결해줌
  • 그와 비슷한 원리
  • 노드와 mysql은 연결해주는 드라이버
  • sequelize-cli 는 시퀄라이즈 명령어 사용가능케 해주는 패키지

  • npx sequelize init 은 sequlize-cli 로부터 시퀄라이즈 명령어를 사용할 수 있도록 하는 것.
  • 설치 완료 시 models, migrations, seeders 폴더 생성됨.

models 폴더 내 index.js 수정

초기에 index.js 파일에 들어가보면 여러 코드가 찍혀져 나오는데 모두 지운후,

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

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

db.sequelize = sequelize;

module.exports= db;

config 폴더 내 cofing.json 수정

  • password 와 database 를 자신이 설정한 값을 넣어준다.

app.js 내 추가 코드

const morgan = require('morgan');
const nunjucks = require('nunjucks');

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

sequelize.sync({ force: true })
    .then(() => {
        console.log("데이터 베이스 연결 성공")
    })
    .catch((err) => {
        console.log(err);
    });
  • sequlize 를 models 폴더 에서 불러와 sync 함수를 통해 데이터베이스와연결 (노드 <-> mysql) 시켜준다.

연결 성공


시퀄라이즈 모델 만들기

  • 테이블을 만드는 방법은 크게 3가지
    1) CLI 창 ( create table ~)
    2) WorkBench 와 같은 데이터베이스 관리 툴
    3) 모델

  • 시퀄라이즈 사용하기 위한 공식 문서에서 제공하는 코드 입력

  • User는 모델 명 (시퀄라이즈에서의 모델이 MySQL에서는 테이블로 불림)

  • 문법 관련 해서는 mysql 에서는 INT , 시퀄라이즈에서는 INTEGER
    mysql 에서는 VARCHAR , 시퀄라이즈에서는 String
    mysql 에서는 boolean 처리 1 OR 0 , 시퀄라이즈에서는 true or false

  • created_at 은 mysql 에서는 DATETIME, 시퀄라이즈에서는 DATE

  • 또한 Id 는 자동으로 생성해주기 때문에 별도의 속성을 넣어주지 않아도 됨.

const Sequelize = require('sequelize');

module.exports = class User extends Sequelize.Model {
  static init(sequelize) {
    return super.init({
      name: {
        type: Sequelize.STRING(20),
        allowNull: false,
        unique: true,
      },
      age: {
        type: Sequelize.INTEGER.UNSIGNED,
        allowNull: false,
      },
      married: {
        type: Sequelize.BOOLEAN,
        allowNull: false,
      },
      comment: {
        type: Sequelize.TEXT,
        allowNull: true,
      },
      created_at: {
        type: Sequelize.DATE,
        allowNull: false,
        defaultValue: Sequelize.NOW,
      },
    }, {
      sequelize,
      timestamps: false,
      underscored: false,
      modelName: 'User',
      tableName: 'users',
      paranoid: false,
      charset: 'utf8',
      collate: 'utf8_general_ci',
    });
  }

  static associate(db) {
    db.User.hasMany(db.Comment, { foreignKey: 'commenter', sourceKey: 'id' });
  }
};
  • init의 super.init의 첫번째 인수가 컬럼 정의 였다면 두번째 인수는 모델에 대한 설정
  • 'modelName' 은 자바스크립트에서 쓰는 이름이고 , 'tableName'은 sql에서 사용하는 이름

sequelize 객체 연결하기

  • index.js 파일에 다음의 코드 입력
const User = require('./users');
User.init(sequelize);

위에서 sequelize 를 new 객체로 생성해줬는데 그것을 init 으로 받는다.
그렇게 되면 users.js 파일의 sequelize 객체로 인지되는 것이다.
즉 , 모델(mysql 로는 테이블) 이랑 연결 객체랑 연결한 것.


profile
WILL is ALL

0개의 댓글