본문 바로가기
Node.js/express

[Node.js] sequelize 사용하기 2

by kiwi_wiki 2021. 3. 22.

모델을 정의하는 것은 내가 직접 작성해도 되지만 아까 설치한 sequelize-cli 를 통해 간단한 명령어로 정의할 수 있다.

sequelize-cli란 sequelize command line interface의 줄임말이다.
즉 터미널에서 명령어를 사용해 데이터베이스 작업을 할 수 있게 만들어주는 툴이다.

 

모델을 생성하는 명령어의 문법이다.

sequelize model:create --name TABLE_NAME --attributes "COLUMN1:type, COLUMN2:type, COLUMN3:type"

 

간단하게 music 테이블을 만든다고 해보자. 생성할 컬럼은 노래 이름, 가수, 앨범 이름 정도로 간단하게 만들어보자

 $ sequelize model:generate --name music --attributes name:string,singer:string,albumName:string

models 폴더와 migrations 폴더에 뭔가 생성됐을 것이다.

models 폴더에 생성된 music.js 를 먼저 살펴보자

'use strict';
const {
  Model
} = require('sequelize');
module.exports = (sequelize, DataTypes) => {
  class music extends Model {
    /**
     * Helper method for defining associations.
     * This method is not a part of Sequelize lifecycle.
     * The `models/index` file will call this method automatically.
     */
    static associate(models) {
      // define association here
    }
  };
  music.init({
    name: DataTypes.STRING,
    singer: DataTypes.STRING,
    albumName: DataTypes.STRING
  }, {
    sequelize,
    modelName: 'music',
  });
  return music;
};

music.init()을 통해 명령어에서 입력했던 칼럼을 정의해주고 modelName 옵션으로 모델 이름을 정의해주고 있다.

 

그리고 sequelize의 특징이라고 할 수 있는 migrations 폴더를 살펴보자

'use strict';
module.exports = {
  up: async (queryInterface, Sequelize) => {
    await queryInterface.createTable('music', {
      id: {
        allowNull: false,
        autoIncrement: true,
        primaryKey: true,
        type: Sequelize.INTEGER
      },
      name: {
        type: Sequelize.STRING
      },
      singer: {
        type: Sequelize.STRING
      },
      albumName: {
        type: Sequelize.STRING
      },
      createdAt: {
        allowNull: false,
        type: Sequelize.DATE
      },
      updatedAt: {
        allowNull: false,
        type: Sequelize.DATE
      }
    });
  },
  down: async (queryInterface, Sequelize) => {
    await queryInterface.dropTable('music');
  }
};

 

실제로 지금 model 은 정의되어있지만 테이블을 생성해주기 위해서는 이 migration을 실행해 줘야 한다.

up 부분을 살펴보면 createTable('tableName', { attributes }) 를 통해 명령어에 입력했던 테이블 정의를 볼 수 있는데 자동으로 id 칼럼과 createaAt, updateAt 칼럼이 생성된 것을 확인할 수 있다. createAt, updateAt 컬럼이 자동으로 생성되는 것이 싫다면 

 

간단하게 명시되어있는 칼럼의 옵션 값을 보면

 

allowNull : 널 허용

autoIncrement : 자동 증가

primaryKey : PK 설정 여부

type : 데이터 타입 설정

 

이라는 것을 확인할 수 있다. 그 외의 옵션들은 공식 사이트의 Document를 통해 확인 가능하다.

 

down 부분을 살펴보면 dropTable('tableName')을 통해 테이블 드롭을 하는 명령어임을 볼 수 있다.

migration 파일을 실행하는 명령어 >>

//up 부분 실행
sequelize db:migrate

//down 부분 실행
sequelize db:migrate:undo

 

해당 명령어를 터미널에서 실행해보자

up부분이 실행되면 테이블이 생성되는 것을 확인할 수 있고, down 부분이 실행되면 테이블이 삭제되는 것을 확인할 수 있다.

이렇게 간단하게 명령어를 통해 모델 정의와 동시에 테이블 생성/삭제도 가능하게 되었다.

 

sequelize 공식 사이트 >>

sequelize.org/

 

Sequelize

 

sequelize.org

 

728x90
반응형