백앤드(Back-End)/Node.JS

[Node.js] Sequelize Seeders 사용법

RyanSin 2021. 2. 13. 02:09
반응형

- 개요

안녕하세요. 이번 시간에는 Sequelize에 Seeders라는 기술에 대해 알아보겠습니다.

 

우리는 어떤 기능 개발을 하다 보면 테스트 데이터가 필요할 때가 있습니다. 필요할 때마다 우리는 데이터 하나하나를 DB에 직접 넣는 수고를 겪을 수 있습니다.

 

이번 시간에 알아볼 Seeders난 기술은 이런 수고를 덜어줍니다. :)

 

- 사용법

Sequelize-cli 명령어를 통해 초기 세팅을 해줍니다.

 

sequelize init:seeders // seeders 폴더 생성
sequelize seed:generate --name Test // seeders 폴더 안에 새로운 Test.js 파일 생성

 

위 명령어를 실행하면 우리가 처음 sequelize init을 통해 만든 seeders 폴더 안에 새로운 파일이 생성됩니다.

 

 

Test.js 파일 구조

'use strict';

module.exports = {
  up: async (queryInterface, Sequelize) => {
    /**
     * Add seed commands here.
     *
     * Example:
     * await queryInterface.bulkInsert('People', [{
     *   name: 'John Doe',
     *   isBetaMember: false
     * }], {});
    */
  },

  down: async (queryInterface, Sequelize) => {
    /**
     * Add commands to revert seed here.
     *
     * Example:
     * await queryInterface.bulkDelete('People', null, {});
     */
  }
};

 

  • up 속성
    • seeders를 통해 생성할 데이터 만드는 소스코드 로직
  • down 속성
    • seeders를 되돌릴 때 수행되는 로직

 

- 테스트 데이터 생성

const { uuid } = require('uuidv4');

const userId1 = uuid();
const userId2 = uuid();
const userId3 = uuid();

module.exports = {
  up: async (queryInterface, Sequelize) => {
    /**
     * Add seed commands here.
     *
     * Example:
     * await queryInterface.bulkInsert('People', [{
     *   name: 'John Doe',
     *   isBetaMember: false
     * }], {});
    */

    //유저 생성
    await queryInterface.bulkInsert('Users',[
      {
        id: userId1,
        email: "ryan@gmail.com",
        password: "123456",
        name: "Ryan1",
        phone: "010-0000-0000",
        createdAt: new Date,
        updatedAt: new Date
      },
      {
        id: userId2,
        email: "ryan@gmail.com",
        password: "123456",
        name: "Ryan2",
        phone: "010-0000-0000",
        createdAt: new Date,
        updatedAt: new Date
      },
      {
        id: userId3,
        email: "ryan@gmail.com",
        password: "123456",
        name: "Ryan3",
        phone: "010-0000-0000",
        createdAt: new Date,
        updatedAt: new Date
      },
    ])
  },

  down: async (queryInterface, Sequelize) => {
    /**
     * Add commands to revert seed here.
     *
     * Example:
     * await queryInterface.bulkDelete('People', null, {});
     */
    //유저 데이터 삭제
    return queryInterface.bulkDelete('Users', null, {});
  }
};

소스코드를 확인하면 bulkInsert와 bulkDelete 메서드를 확인할 수 있습니다.

 

bulkInsert는 기존에 우리가 알던 create 메서드랑 비슷하지만, DB에 한번 요청에 데이터를 여러 개를 저장할 수 있다는 부분은 다릅니다.

bulkDelete도 마찬가지입니다.

 

저의 전 글들을 읽어 오셨다면 위 코드가 잘 실행될 겁니다. 못 하신 분들은 아래 링크를 통해 확인하고 오세요:)

any-ting.tistory.com/51

 

[Node.js] Sequelize 관계성 정의 테이블간에 관계정의

- 지난 시간 안녕하세요. 지난 시간에는 모델을 정의하고 생성하는 부분에 대해 알아봤습니다. 혹시 놓치고 오신 분들은 아래 링크를 통해 학습하고 오시는 걸 추천드리겠습니다. any-ting.tistory.co

any-ting.tistory.com

- Seeders 실행

sequelize db:seed:all

실행 결과

데이터가 추가 된 것을 확인할 수 있습니다.

 

- Seeders 되돌리기

sequelize db:seed:undo:all //모든 Seed를 되돌린다.
sequelize db:seed:undo // 가장 최근 Seed를 되돌린다.
sequelize db:seed:undo --seed name-of-seed-as-in-data 특정 Seed를 되돌린다.

실행 결과

 

기존에 있던 데이터가 삭제된 부분을 확인할 수 있습니다.

 

주의 사항

Seeders 되돌리기시 기존에 있는 데이터가 삭제되는 부분이 있기 때문에, 이 부분은 인지해야 됩니다. :)