[공감병동 프로젝트] Fake Data

공감병동 프로젝트는 사용자들이 글을 작성해 주어야하는 SNS적 성격이 강한 웹사이트이기 때문에 seed data를 어떻게 넣을지 고민이 많았다. 특히 진료과별로 카테고리가 너무 많았어서 직접 작성해주기엔 한계가 너무 명확했다. 그러다 fake.js를 찾게 되었고, 이를 적용해 보기로 하였다.

fake.js

1. 설치 및 임포트

npm i faker

const faker = require("faker");

faker.locale = "ko"; // 한국어 설정

2. 적용

이번 프로젝트에서 Fake Data는 아래의 총 세 분야에서 사용하게 되었다.
1. 포스트 데이터
2. 진료과별 이야기 데이터
3. 응원하기 및 스크랩하기의 관계

3. 예시

fakeReply는 진료과별 이야기와 상세 게시글에서 모두 사용할 수 있도록 만들었다.

// fakeReply.js
const fakeReply = (count, label, num) => {
  const result = [];
  for (let i = 1; i <= count; i += 1) {
    const replyData = {
      users_id: Math.floor(Math.random() * 10) + 1,
      reply: faker.lorem.sentence(20),
      ...
    };
    replyData[label] = Math.floor(Math.random() * num) + 1;
    result.push(replyData);
  }
  return result;
};

module.exports = fakeReply;

변수

먼저 변수로 count, label, num을 받는다.
1. count : 총 몇개의 데이터를 넣을 것인지 결정
2. label : 진료과별 이야기일 경우 departments_id를, 상세 게시글일 경우 posts_id를 입력
3. num : 진료과별 이야기일 경우 departments_id의 개수를, 상세 게시글일 경우 posts_id의 개수를 입력

replyData

다음으로 replyData를 반복문을 통해 만들어 주었는데, 데이터베이스에 입력해주어야 할 컬럼은 users_idreply, label 3가지였다.
1. users_id와 label : Math.random()으로 랜덤한 수를 뽑아 각각 데이터가 존재하는 개수를 곱해 내림 처리를 하고, +1을 해주었다.(0부터 시작하기 때문)
2. reply : faker를 활용해 데이터를 넣었다.
*sentence() : 문장들을 생성, 괄호안의 값은 문장의 길이를 결정

// 20211214075901-demo-department-reply.js
const fakeReply = require("../fakeData/fakeReply");

module.exports = {
  up: async (queryInterface, Sequelize) => {
    await queryInterface.bulkInsert(
      "departments_replies",
      fakeReply(300, "departments_id", 42)
    );
  },

  down: async (queryInterface, Sequelize) => {
    return queryInterface.bulkDelete("departments_replies", null, {});
  },
};

fakeReply 함수를 이용해 seeder 파일을 생성해 주었다. 이렇게 한 결과 데이터베이스에 대량의 seed를 넣을 수 있게 되었다!

좋은 웹페이지 즐겨찾기