시퀄라이즈란?

시퀄라이즈는 ORM(Object-relational Mapping)으로 분류된다. ORM은 자바스크립트 객체와 데이터베이스의 릴레이션을 매핑해주는 도구이다.

시퀄라이즈는 MySQL, MariaDB, PostgreSQL, SQLite, MSSQL 등 데이터베이스에 쓸 수 있다. 문법이 어느정도 호환되므로 프로젝트를 다른 SQL 데이터베이스로 전환할 때도 편리하다.

사용하는 이유

자바스크립트 구문을 알아서 SQL로 바꿔주기 때문에 SQL 언어를 직접 사용하지 않아도 자바스크립트만으로 조작이 가능하다. 물론 SQL을 모르는 상태로 시퀄라이즈를 사용하는 것은 권장하진 않음.

설치 패키지

npm i sequelize sequelize-cli mysql2

sequelize-cli는 시퀄라이즈 명령어를 실행하기 위한 패키지 mysql2는 mysql과 시퀄라이즈를 이어주는 드라이버

예제 소스

minu_node/book-1/example/ch7/7.6/learn-sequelize at master · smw0807/minu_node

모델

const Sequelize = require('sequelize');

module.exports = class User extends Sequelize.Model {
  static init(sequelize) {
    return super.init({ //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) { //associate 메서드는 다른 모델과의 관계를 적는다.
    db.User.hasMany(db.Comment, { foreignKey: 'commenter', sourceKey: 'id' });
  }
};