Sequelize

박한솔·2021년 1월 19일
0

SQL 문을 배우는 것은 매우 가치 있는 일이었습니다. 하지만 제가 주로 쓰는 것은 Javascript입니다. 저 이외에도 SQL문을 자바스크립트로 사용하고 싶은 사람이 있었을 것입니다.
그런 사람들을 위해서 Javascript에서 작성하면 자동으로 SQL문으로 바꿔주는 Sequelize 라이브러리가 나오게 된 것입니다.

설치

sequelize가 필요한 파일에 sequelize를 설치합니다.

npx npm install --save sequelize

sequelize를 설치하게 되면 model, migrations, config, seeders 파일이 생깁니다.

config/config.json의 파일은 다음과 같이 바꿔줍니다.

{
  "development": {
    "username": mysql 유저이름,
    "password": 내 비밀번호,
    "database": 내가 쓸 데이터베이스 이름,
    "host": 호스트주소,
    "dialect": "mysql"
  },
 ....
  }
}

sequelize-cli는 js에서 SQL문을 작성하고 업데이트 하게끔 도와주므로 설치해줍니다.

npm install --save-dev sequelize-cli

구성요소

Model

데이터베이스를 terminal 혹은 yarn에서 작성하게 되면 model의 형태로 저장이 됩니다. 이 model은 SQL의 테이블과 대응됩니다.

  • npx sequelize-cli --help
npx sequelize-cli model:generate --name User --attributes firstName:string,lastName:string,email:string

이 명령어를 사용하면 model과 migration이 생성됩니다.


//model

'use strict';
const {
  Model
} = require('sequelize');
module.exports = (sequelize, DataTypes) => {
  class User 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) {
     
    }
  };
  User.init({
    firstName: DataTypes.STRING,
    lastName: DataTypes.STRING,
    email: DataTypes.STRING
  }, {
    sequelize,
    modelName: 'User',
  });
  return User;
};
//migrations

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

migrations

model이 테이블의 기본 폼을 생성해준다면 migration은 여러 명령어를 통해서 테이블을 생성하거나 테이블을 제거하고 요소를 추가하는 등의 작업을 담당합니다.

module.exports = {
  up: async (queryInterface, Sequelize) => {
    await queryInterface.createTable('Users', {
      id: {
        allowNull: false,
        autoIncrement: true,
        primaryKey: true,
        type: Sequelize.INTEGER
      },
      firstName: {
        type: Sequelize.STRING
      },
      lastName: {
        type: Sequelize.STRING
      },
      email: {
        type: Sequelize.STRING
      },
      createdAt: {
        allowNull: false,
        type: Sequelize.DATE
      },
      updatedAt: {
        allowNull: false,
        type: Sequelize.DATE
      },
      
    });
  },
  down: async (queryInterface, Sequelize) => {
    await queryInterface.dropTable('Users');
  }
};

위에서 createtable은 테이블 생성, droptable은 테이블 제거입니다.

혹은 sequelize-cli를 통해 새로운 migration을 생성할 수 있습니다.

npx sequelize-cli migration generate --name test
module.exports = {
  up: async (queryInterface, Sequelize) =>{
    
  }
  ,
  down : async (queryInterface, Sequelize) => {
    
  }
}

up부분은 migration을 해줄 때의 명령을 넣어주는 것이고
down부분은 migration을 undo했을 때의 명령을 넣어줍니다.

이렇게 작성한 데이터는
sequelize-cli 명령을 통해 migration 문법이 SQL 문법으로 바뀌어서 mysql에 저장됩니다.

npx sequelize-cli db:migrate 

migration 에서 up 부분 실행 및 migrating 실행
npx sequelize-cli db:migrate:undo

migration에서 down부분 실행 및 최근 migration 취소

SQL문법을 사용하지 않더라도 vscode 안에서 js를 통해 데이터베이스를 사용할 수 있는 Sequelize에 대해 알아봤습니다. 혹시 틀린 부분이 있다면 적극적인 comment 부탁드립니다! 감사합니다.

profile
치열하게, 하지만 즐겁게

0개의 댓글