데이터베이스

Sequelize Model

realtrynna 2022. 5. 4. 10:04

Sequelize Model

MySQL 테이블이랑 대응된다.

- 테이블 생성은 CMD / IDE / 시퀄라이즈 모델을 통해 만드는 총 3가지 방법이 있다.

- 기본적으로 모델 이름은 앞 글자 대문자와 단수형으로 테이블 이름은 소문자와 복수형으로 만든다.

모델 생성

models 폴더에 user 파일을 생성한다.

 

const Sequelize = require("sequelize");

module.exports = class User extends Sequelize.Model {
  static init(sequelize) {
    return super.init({
      email: {
        type: Sequelize.STRING(100),
        allowNull: false,
        unique: true,
      },
      password: {
        type: Sequelize.STRING(200),
        allowNull: false,
      },
      name: {
        type: Sequelize.STRING(10),
        allowNull: false,
      },
      age: {
        type: Sequelize.INTEGER.UNSIGNED,
        allowNull: false,
      },
      introduce: {
        type: Sequelize.TEXT,
        allowNull: false,
      },
    }, {
      sequelize,
      timestamps: true,
      paranoid: true,
      underscored: false,
      modelName: "User",
      tableName: "users",
      charset: "utf8",
      collate: "utf8_general_ci",
    });
  }
}

models > user.js

 

  • User라는 모델을 만들고 외부에서 사용할 수 있게 exports 해준다.
  • 공식 문서에 소개한 Sequelize.Model이라는 클래스 문법을 사용한다.
  • static init은 처음 인수로 테이블 컬럼에 대한 설정이고 다음 인수가 테이블 자체에 대한 설정이다.
  • 시퀄라이즈는 알아서 id를 기본 키로 연결하므로 별도로 적어줄 필요는 없다.
  • 시퀄라이즈 자료형은 MySQL과 차이가 있다.

 

MySQL Sequelize
VARCHAR(100) STRING(100)
INT INTEGER
TINYINT BOOLEAN
DATETIME DATE
INT UNSIGNED INTEGER.UNSIGNED
NOT NULL allowNull: false
UNIQUE UNIQUE: true
DEFAULT NOW() defaultValue: Sequelize.NOW

MySQL과 Sequelize 자료형 비교

 

sequelize modles/index.js에서 연결하기 위해 db.sequelize 객체를 넣어야 한다.
timestamps true: 로우 추가 시 생성/업데이트 시간을 자동으로 기록해 준다.
paranoid true: 로우 삭제 시 지운 시각을 자동으로 기록해 준다.(soft delete)
underscored true: 스네이크 케이스 사용 여부(기본은  캐멀 케이스) 
modelName 노드에서 사용할 모델 이름 대문자 단수형으로 만든다.
tableName 데이터베이스의 테이블 이름 소문자 복수형으로 만든다.
charset 한글 입력 여부 utf8로 설정해 준다.
collate 한글 입력 여부 utf8_general_ci로 설정해 준다.

Sequelize 테이블 옵션

 

모델을 만들었으니 models 폴더 속 index.js를 수정한다.

 

const Sequelize = require("sequelize");

const User = require("./user");

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;
db.User = User;

User.init(sequelize);

module.exports = db;

models > index.js

 

  • User 모델을 불러와 db에 담아 db 객체를 require 하여 모델에 접근이 가능하다.
  • User.init으로 유저 모델의 static.init 메서드를 호출한다.
  • init이 실행되어야 테이블이 모델로 연결된다.

 

생성 한 모델이 테이블로 생성

 

서버가 재실행되면 쿼리문이 뜬다.

쿼리문이 보기 싫다면 config 폴더 속 config.json 파일을 수정한다.

logging 속성 추가 후 값을 false로 넣는다.

 

'데이터베이스' 카테고리의 다른 글

Sequelize N:M associate  (0) 2022.05.05
Sequelize 1:N associate  (0) 2022.05.05
Sequelize 1:1 associate  (0) 2022.05.05
Sequelize ORM  (0) 2022.05.03
MongoDB Mongoose  (0) 2022.01.24