Typeorm Seeding

이연중·2021년 10월 6일
0

NestJS

목록 보기
21/22

스키마를 구축하고 데이터베이스에 더미 데이터를 생성해서 테스트 해보는 것은 관련 쿼리문을 실행해 데이터가 맞게 날라오는지 등을 테스트 해볼 수 있기때문에 중요한 과정이라고 할 수 있겠다.

더미 데이터를 생성할 때, 직접 DB에서 추가해주거나, 일일이 쿼리문을 날려 생성하는 방법은 비효울적이다.
그래서 TypeOrm의 Seeding을 이용해 코드상으로 입력한 더미 데이터를 한번의 명령어 실행으로 DB에 반영해본다.

사용


  1. npm install --save typeorm-seeding
  2. pacakage.json에 script를 추가하고, database/seeds 디렉터리를 생성한다.
  3. 해당 디렉터리 안에 추가할 더미 데이터 관련 코드를 작성한다.

package.json

"script":{
    ...
    "seed:config": "ts-node ./node_modules/typeorm-seeding/dist/cli.js config",
    "seed:run": "ts-node ./node_modules/typeorm-seeding/dist/cli.js seed",
    ...
}

create-initial-user-data.ts

import { Connection } from 'typeorm';
import { Factory, Seeder } from 'typeorm-seeding';
import { User } from '../../entities/user.entity';

export class CreateInitialUserData implements Seeder {
  public async run(factory: Factory, connection: Connection): Promise<any> {
    await connection
      .createQueryBuilder()
      .insert()
      .into(User)
      .values([
        { id: 1, nick_name: '깨꺠오', provider: 'Kakao' },
        { id: 2, nick_name: '애뽀', provider: 'Apple' },
        { id: 3, nick_name: '해윙', provider: 'Kakao' },
        { id: 4, nick_name: '배윙', provider: 'Apple' },
      ])
      .execute();
  }
}

더미 데이터 생성


npm run seed:run

명령어를 실행하면 이렇게 DB에 더미 데이터가 생성된다.

테이블 간 관계를 맺고 있는 경우 foreign key constraint fail이 발생하는 경우가 있다. 이 경우는 부모 테이블에 없는 데이터가 자식 테이블에 들어갈 때(참조 무결성) 발생한다.
Seeding 시 Seeding 폴더 안 파일의 순서대로 적용된다.
그러므로 위같은 문제를 해결하기 위해서는 부모 테이블에 먼저 Seeding을 하게 선배치 해주어야한다.

profile
Always's Archives

0개의 댓글