스키마를 구축하고 데이터베이스에 더미 데이터를 생성해서 테스트 해보는 것은 관련 쿼리문을 실행해 데이터가 맞게 날라오는지 등을 테스트 해볼 수 있기때문에 중요한 과정이라고 할 수 있겠다.
더미 데이터를 생성할 때, 직접 DB에서 추가해주거나, 일일이 쿼리문을 날려 생성하는 방법은 비효울적이다.
그래서 TypeOrm의 Seeding을 이용해 코드상으로 입력한 더미 데이터를 한번의 명령어 실행으로 DB에 반영해본다.
npm install --save typeorm-seeding
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을 하게 선배치 해주어야한다.