sequelize

김영준·2022년 5월 12일
0

sequelize

목록 보기
1/1

Sequelize 란?

시퀄라이즈는 nodejs에서 데이터베이스를 쉽게 다룰 수 있도록 도와주는 라이브러리로, ORM(Object-relational Mapping)으로 분류된다.

ORM이란?

객체와 관계형 데이터베이스의 데이터를 자동으로 매핑(연결)해주는 것을 말한다.


Sequelize의 orm 구성방법은 아래 2가지가 있다.

sequelize-cli

데이터베이스가 구축되지않더라도, 프로젝트만 받아서 설정하고 서버실행만 하면 알아서 데이터베이스 테이블 생성해주는 라이브러리이다.
모델 코드 작성 → 자동 create문 변환 → RDB 테이블 생성

sequelize-auto

데이터베이스를 이미 구축한 상태라면, 쓸모있는 라이브러리다.
이미 구축된 데이터베이스 스키마를 바탕으로 orm 모델을 자동으로 생성해준다.
이미 짜여진 테이블을 기반으로 → 자동으로 모델 코드 생성


sequelize-cli 사용법

여기서 cli란?

Command line interface의 약어이다.
터미널 명령어로 추가할때 보통 n-cli모듈을 설치한다.

설치 및 초기화

$ npm i pg sequelize
$ npm i -g sequelize-cli

여기선 postgresql을 db예제로 사용한다.
이제 sequlize 명령어를 사용하여 초기화를 하자.

$ sequelize init

초기화를 진행하면 아래와 같은 폴더 및 파일들이 생긴다.

|-- config
|   -- config.json
|-- migrations     
|-- models
|   -- index.js   
|-- seeders  
|-- ........

config : 데이터베이스 설정 파일, 사용자 이름, DB 이름, 비밀번호 등의 정보 들어있다.

migrations : 데이터베이스 스키마에 변경이 필요할 때마다 마이그레이션 코드를 만들어서 진행하는 것이다. 아래 명령어를 실행하면 migrations 폴더에 타임스탬프가 찍힌 파일이 하나 생성될 것이다.

models : 데이터베이스 각 테이블의 정보 및 필드타입을 정의하고 하나의 객체로 모은다.

seeders : 테이블에 기본 데이터를 넣고 싶은 경우에 사용한다.

config.js

module.exports = {
  localhost: {
    username: "postgres",
    password: "postgres",
    database: "test_db",
    host: "localhost",
    dialect: "postgres",
  },
};

Model 생성

Model을 만드는 것도 아래의 예시 명령어와 같이 CLI로 가능하다.
Sequelize CLI를 통해 모델을 정의하고 마이그레이션을 통해 실제 데이터베이스에 반영이 가능

다음 예제는 name와 age를 가진 User 모델을 생성

$ sequelize model:generate --name User --attributes name:string,age:integer

이를 통해 아래와 같이 총 2개의 파일이 생성됨

  • models/user.js
"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) {
      // define association here
    }
  }
  User.init(
    {
      name: DataTypes.STRING,
      age: DataTypes.INTEGER,
    },
    {
      sequelize,
      modelName: "User",
    }
  );
  return User;
};
  • ```migrations/-create-user.js````
"use strict";
module.exports = {
  up: async (queryInterface, Sequelize) => {
    await queryInterface.createTable("Users", {
      id: {
        allowNull: false,
        autoIncrement: true,
        primaryKey: true,
        type: Sequelize.INTEGER,
      },
      name: {
        type: Sequelize.STRING,
      },
      age: {
        type: Sequelize.INTEGER,
      },
      createdAt: {
        allowNull: false,
        type: Sequelize.DATE,
      },
      updatedAt: {
        allowNull: false,
        type: Sequelize.DATE,
      },
    });
  },
  down: async (queryInterface, Sequelize) => {
    await queryInterface.dropTable("Users");
  },
};

id, createdAt, updatedAt 필드는 정의하지 않아도 자동으로 생성

그리고 up과 down으로 구분

up : 마이그레이션을 진행할 때 수행할 로직
down : 적용된 마이그레이션을 되돌릴 때 수행할 로직
실제 데이터베이스에 반영하기 위해 마이그레이션 진행

$ sequelize db:migrate

마이그레이션을 진행한 후 실제 데이터베이스를 살펴보면, 앞에서 정의한 필드와 함께 Users 테이블이 생성됨

마이그레이션을 취소할 때에는 명령어 뒤에 undo 삽입

$ sequelize db:migrate:undo
profile
Fitpet WMS & OMS Backend Developer

0개의 댓글