들어가며
사이드 프로젝트에서 푸시 알림을 활용한 서비스를 개발하고 있습니다. 그 과정에서 생각하고 배웠던 점들을 하나씩 작성하고자 합니다. 먼저 푸시 알림에 필요한 로직을 테스트하기 위해서는 먼저 데이터베이스 세팅을 해야 합니다. 푸시 알림을 구성하기 위한 쿼리가 제대로 작성됐는지 확인하기 위해서는 데이터베이스에 대규모 데이터를 넣고, 쿼리 성능 테스트를 진행해야 하는데, 이때 데이터베이스에 대규모 데이터를 넣기 위해서는 seeding 작업이 필요합니다. 이 글은 데이터베이스의 Seeding에 대해 작성해 보겠습니다.
Seeding이란?
Seeding이란, seed라는 것이 씨앗이라는 뜻인데, 씨앗을 뿌리는 것이라고 생각하면 좋을 것 같습니다. 즉 데이터베이스에 일정 데이터를 넣을 수 있게 돕는 것입니다. TypeORM에서는 typeorm-seeding 라이브러리를 활용해서 seeding을 할 수 있습니다. 그럼 NestJS에 typeorm-seeding을 어떻게 활용할 수 있는지에 대해 알아보겠습니다.
먼저 typeorm-seeding을 활용하기 위해 라이브러리를 설치하겠습니다.
npm install typeorm-seeding
그 후 ormconfig.json에 다음과 같은 코드를 추가하겠습니다.
module.exports = {
...
seeds: ['src/database/seeds/**/*.seed.ts'], // seed파일들을 생성할 경로
factories: ['src/database/factories/**/*.factory.ts'],
}
여기서 factories와 seeds에 대해 알아보겠습니다.
// factory
import { define } from 'typeorm-seeding';
import { faker } from '@faker-js/faker';
import { User } from '../src/domain/user/User.entity';
define(User, () => {
const user = new User();
user.deviceId = faker.datatype.uuid();
user.firebaseToken = faker.datatype.uuid();
return user;
});
factories의 경우, 더미 데이터로 넣을 값들을 세팅하는 곳입니다. 저는 faker 라이브러리를 활용해서 값을 세팅했습니다. (여기서 예전 faker를 활용하지 마시고, 새로운 faker.js를 활용하셔야 합니다. 링크는 아래에 표기해 두었습니다.)
// seeds
import { Factory, Seeder } from 'typeorm-seeding';
import { Connection } from 'typeorm';
import { User } from '../src/domain/user/User.entity';
export class CreateUser implements Seeder {
async run(factory: Factory, connection: Connection): Promise<void> {
const user = await factory(User)().createMany(5);
await connection.getRepository(User).save(user);
}
}
그 후 seeds 파일에서는 위에서 생성한 Factory를 불러와서, 5개의 데이터를 생성해서 그 값을 user에 할당했고, User 레포지토리를 활용해서 값을 저장할 수 있도록 설정했습니다.
그 후 package.json의 스크립트를 활용해서 seeding을 할 수 있게 설정했습니다.
"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",
...
}
그 후 npm run seed:run을 입력하면 다음이 실행됩니다.
완료됐다는 문구가 뜨면, DB에 더미 데이터가 생성됩니다.
마치며
NestJS를 공부하면서 배운 내용들을 앞으로도 꾸준히 작성하고 싶습니다. 좋은 개발자가 되기 위해 꾸준히 공부하겠습니다.
출처
'Project > 서버 개발' 카테고리의 다른 글
[Project] 프로젝트 삽질기7 (feat ORM 비교) (4) | 2022.03.13 |
---|---|
[Project] 프로젝트 삽질기6 (feat PostgreSQL 버전) (0) | 2022.03.11 |
[Project] 프로젝트 삽질기4 (feat 마이그레이션) (0) | 2022.03.10 |
[Project] 프로젝트 삽질기3 (feat Docker, PostgreSQL) (0) | 2022.03.10 |
[Project] 프로젝트 삽질기2 (feat MySQL, PostgreSQL) (0) | 2022.03.10 |