개발 일기

Sequelize-cli 간단한 사용방법 본문

서버/Node.js

Sequelize-cli 간단한 사용방법

이건욱

Sequelize

Sequelize는 여러 DB를 지원하는 Promise 패턴 기반의 Node.js ORM 입니다.

트랜잭션 , 관계 설정 , 즉시 로딩 , 읽기 전용 복제등을 포함해 많은 기능을 제공합니다.

 

ORM ?

ORM은 자동으로 DBMS의 데이터를 객체 형태로 변환하여 객체 지향적인 개발을 할수가 있습니다.

 

저는 Sequelize-cli을 통해서 만들어보도록 하겠습니다. ( 명령어를 통해서 데이터베이스 작업을 도와줄수 있습니다. )

npm i --save sequelize mysql2
npm i --global sequelize-cli
sequelize init

 

이런 작업을 진행을 하면 다음과 같이 4가지의 폴더가 생성이 됩니다. 

 

config - DB 연결 정보를 저장합니다.

migrations - migrations에 필요한 데이터가 저장됩니다.

models - DB Model 정의를 저장합니다.

seeders - Default 데이터를 정의할수가 있습니다.

Config

DB 연결 정보를 설정합니다.

{
  "development": {
    "username": "root", // DB 사용자명
    "password": "123456", // DB 패스워드
    "database": "test_database_dev", // DB 이름
    "host": "127.0.0.1", // DB 주소
    "dialect": "mysql", // DBMS
    "operatorsAliases": false // 연산자 (최신에는 1 OR 0 으로 표현)
  },
  "test": {
    "username": "root",
    "password": "123456",
    "database": "test_database_test",
    "host": "127.0.0.1",
    "dialect": "mysql",
    "operatorsAliases": false
  },
  "production": {
    "username": "root",
    "password": "123456",
    "database": "test_database_prod",
    "host": "127.0.0.1",
    "dialect": "mysql",
    "operatorsAliases": false
  }
}

Model

DB Model을 정의할수가 있습니다. (타입)

'use strict';
module.exports = (sequelize, DataTypes) => {
  const Post = sequelize.define('Post', {
    message: DataTypes.STRING,
    user_id  : DataTypes.INTEGER,
    profile_image : { 
          type: DataTypes.STRING(200), // 자료형
          allowNull: false, // Null 혀용 여부
          comment: '테스트 숫자', // 설명
      }
  }, {});
  Post.associate = function(models) {
    // associations can be defined here
  };
  return Post;
};

Migrations 

변경사항이나 관련된 정보를 기록해놓는 파일들입니다!.

ex) sequelize migration:generate --name [migrate file 명]

'use strict';

module.exports = {
  up: (queryInterface, Sequelize) => {
    return queryInterface.addColumn('Posts', 'user_id' , Sequelize.INTEGER);
  },

  down: (queryInterface, Sequelize) => {
    return queryInterface.removeColumn('Posts' , 'user_id');
  }
};

이런식으로 작성을 해서 sequelize db:migrate 통해서 실제 DB작업을 변경하였습니다.

seeders 

기본값들을 정의할수가 있습니다.

sequelize seed:generate --name [파일 이름]

---------------- [파일 이름] ---------------
'use strict';

module.exports = {
  up: (queryInterface, Sequelize) => {
    return queryInterface.bulkInsert('People', [{
      name: 'John Doe',
      isBetaMember: false
    }], {});
  },

  down: (queryInterface, Sequelize) => {
    return queryInterface.bulkDelete('People', null, {});
  }
};

[실습]

제일 먼저 디비를 생성하도록 하겠습니다.

sequelize db:create

 

이제 실제로 Model을 만들어 보도록 하겠습니다.

sequelize model:generate --name Post --attributes message:string,profile_img:string

성공을 하면 migrations 폴더와 models에 파일이 생성이 된걸 확인 할수가 있습니다.

이제 migration 파일을 적용하기 위해서는 sequelize db:migrate을 터미널에 입력하시면 됩니다.(up 실행)

 

만약에 되돌리고 싶은 경우에는 sequelize db:migrate:undo을 사용하시면 됩니다.

 

이제 ./models 폴더에 index.js에 해당 Model을 추가 시키도록 하겠습니다.

db.Post = require('./post')(sequelize, Sequelize);

만약에 Migration이 필요가 없는 경우에는 sequelize.sync({alter : true or force : ture}) 설정을 해서 좀더 편하게 진행을 할수가 있습니다. (db:migrate 을 할 필요가 없습니다.)

 

다만 force 같은 경우에는 DB를 다 삭제하고 다시 만듭니다.

alter 같은 경우에는 컬럼에 변경된 내용을 적용을 합니다. (Production 에서는 사용하지 말라고 권고 하고 있습니다.)

Create

await models.Post.create({message : "message" , user_id : 2 , profile_image : "image" })

GET

await models.Post.findAll({raw:true})

UPDATE

await models.Post.update({message: 'message2'}, {where: {user_id: 2 }})

DELETE

await models.Post.destroy({where: {user_id: 2}})

 

더 자세한 내용은 여기를 통해서 확인 할수가 있습니다.

'서버 > Node.js' 카테고리의 다른 글

JWT 사용자 인증 구현  (0) 2020.08.04
TypeGraphQL ?  (0) 2020.06.05
mongoose query builder ?  (0) 2020.05.28
mongoose ?  (0) 2020.05.27
AWS s3 Image Upload  (0) 2020.05.26
Comments