[node js] sequelize 로 모델과 테이블 생성하기

iberis2·2024년 2월 11일
post-thumbnail

모델 생성하기

npx sequelize model:generate --name Member --attributes name:string,team:string,position:string,email:string,phoneNumber:string,admissionDate:date,birthday:date,profileImage:string

Member 라는 이름의 모델을 생성하는 명령어이다.
--attributes 다음에 Member 테이블에 들어갈 각 속성의 key와 타입을 적어준다.

모델 편집하기

위 명령어를 통해 /migrations 폴더 안에 아래와 같은 파일이 생성된다.

// /migrations/20240211093220-create-member.js
'use strict';
module.exports = {
  up: async (queryInterface, Sequelize) => {
    await queryInterface.createTable('Members', {
      id: {
        allowNull: false,
        autoIncrement: true,
        primaryKey: true,
        type: Sequelize.INTEGER
      },
      id: {
        type: Sequelize.INTEGER
      },
      name: {
        type: Sequelize.STRING
      },
      // ... 생략
      birthday: {
        type: Sequelize.DATE
      },
      profileImage: {
        type: Sequelize.STRING
      },
      createdAt: {
        allowNull: false,
        type: Sequelize.DATE,
        defaultValue: Sequelize.fn('now')
      },
      updatedAt: {
        allowNull: false,
        type: Sequelize.DATE,
        defaultValue: Sequelize.fn('now')
      }
    });
  },
  down: async (queryInterface, Sequelize) => {
    await queryInterface.dropTable('Members');
  }
};

각 프로퍼티에 설정했던 데이터 타입들이 데이터베이스의 테이블의 각 컬럼의 데이터 타입으로 적용되었다.

Sequelize 값타입 종류데이터베이스에서의 타입
Sequelize.STRING문자열 타입VARCHAR(255)
Sequelize.INTEGER정수형 타입INTEGER
Sequelize.FLOAT실수형 타입FLOAT
Sequelize.DATE날짜형 타입DATETIME

primary key

데이터베이스의 테이블에서 특정 row를 고유하게 식별할 수 있게 해주는 column 이다.

  • sequelize는 별도로 primary key 를 설정하지 않으면 자동으로 id 프로퍼티를 추가하고 primary key로 설정해준다.
    await queryInterface.createTable('Members', {
      id: {
        allowNull: false,
        autoIncrement: true,
        primaryKey: true,
        type: Sequelize.INTEGER,
      },
      //... 생략
    {

allowNull : 빈 값을 허용하지 않음
autoIncrement : 자동으로 이전 값보다 증가된 새로운 값을 추가해 줌

defaultValue

createdAt, updatedAt은 model 을 생성할 때 직접 추가하지 않은 값이지만 Sequelize 에서 기본적으로 추가된다.
defaultValue 를 추가해 table row를 생성할 때마다 값을 입력하지 않아도 기본 값으로 채워지도록 할 수 있다.

// /migrations/20240211093220-create-member.js
// ...      
      createdAt: {
        allowNull: false,
        type: Sequelize.DATE,
        defaultValue: Sequelize.fn('now')
      },
      updatedAt: {
        allowNull: false,
        type: Sequelize.DATE,
        defaultValue: Sequelize.fn('now')
      }
// ...

만약 테이블에 어떤 row를 새롭게 삽입할 때 특정 값을 설정해주지 않으면, defaultValue에 있는 값이 들어가게 된다.

  • Sequelize.fn('now') : MySQL 데이터베이스에서 사용할 수 있는 now라는 함수를 의미한다.
    • Sequelize ORM에서는 데이터베이스에서 지원하는 함수를 나타내기 위해 Sequelize.fn('함수 이름') 형식의 코드를 사용한다.

마이그레이션

migration : 데이터베이스에서 발생하는 각종 변경사항
테이블 생성, 컬럼 추가/삭제, 데이터 추가/삭제 등과 같은 작업 하나하나가 모두 마이그레이션이다.

/migrations 디렉토리에는 이런 마이그레이션 내용이 담긴 파일을 여러 개 둘 수 있다.

npx sequelize db:migrate

위의 명령을 실행하면 migrations 디렉토리 안에 있는 마이그레이션 파일들이 각각의 이름에 있는 날짜시간 순서대로 실행된다.

  • 만약 데이터베이스에 있던 데이터가 전부 삭제된다고 해도 그것들이 마이그레이션 파일들로 잘 보관되어 있기만 하면 복원이 가능하다.

마이그레이션 해제

npx sequelize db:migrate:undo

profile
자동화와 기록으로 더 효율적으로 일하는 으른 개발자가 되려고 합니다.

0개의 댓글