올해는 머신러닝이다.
NestJs + Seeder + Faker 조합 본문
NestJS에서 Seeder와 함께 Faker를 사용하면, 무작위 테스트 데이터를 쉽게 생성할 수 있습니다. Faker 라이브러리는 랜덤한 이름, 이메일, 주소 등을 자동으로 생성해주므로, 시드 데이터를 보다 현실적으로 만들 수 있습니다.
1. Faker 라이브러리 설치
먼저, @faker-js/faker를 설치합니다.
npm install @faker-js/faker
@faker-js/faker는 최신 버전의 Faker.js이며, 기존 faker 패키지는 유지보수되지 않으므로 사용하지 않는 것이 좋습니다.
2. TypeORM Seeder에서 Faker 적용하기
🔹 기본 TypeORM Seeder + Faker
src/database/seeds/seeder.ts 파일을 만들고, Faker를 활용하여 더미 데이터를 생성합니다.
import { DataSource } from 'typeorm';
import { User } from '../entities/user.entity';
import { faker } from '@faker-js/faker';
const dataSource = new DataSource({
type: 'mysql',
host: 'localhost',
port: 3306,
username: 'root',
password: 'password',
database: 'test_db',
entities: [User],
synchronize: true,
});
async function seed() {
await dataSource.initialize();
const userRepository = dataSource.getRepository(User);
const users = Array.from({ length: 50 }).map(() => ({
name: faker.person.fullName(),
email: faker.internet.email(),
}));
await userRepository.insert(users);
console.log('✅ Faker를 이용한 Seeder 완료');
await dataSource.destroy();
}
seed().catch((err) => {
console.error('❌ Seeder 실패', err);
process.exit(1);
});
📌 실행 명령어
npx ts-node src/database/seeds/seeder.ts
실행하면 50명의 랜덤한 사용자 데이터가 데이터베이스에 삽입됨.
3. Prisma Seeder에서 Faker 적용하기
🔹 Prisma Seeder + Faker
Prisma를 사용할 경우 prisma/seed.ts 파일을 생성하고 Faker를 연동할 수 있습니다.
import { PrismaClient } from '@prisma/client';
import { faker } from '@faker-js/faker';
const prisma = new PrismaClient();
async function main() {
const users = Array.from({ length: 50 }).map(() => ({
name: faker.person.fullName(),
email: faker.internet.email(),
}));
await prisma.user.createMany({ data: users });
console.log('✅ Prisma Faker Seeder 완료');
}
main()
.catch((e) => {
console.error('❌ Prisma Seeder 실패', e);
})
.finally(async () => {
await prisma.$disconnect();
});
📌 실행 명령어
npx prisma db seed
실행하면 50명의 랜덤한 사용자 데이터가 삽입됨.
4. Mongoose(MongoDB) Seeder에서 Faker 적용하기
MongoDB를 사용하는 경우, Mongoose 모델과 함께 Faker를 사용할 수 있습니다.
🔹 Mongoose Seeder + Faker
src/database/seeds/mongo-seeder.ts 파일을 만듭니다.
import { connect, Model } from 'mongoose';
import { User, UserSchema } from '../schemas/user.schema';
import { faker } from '@faker-js/faker';
async function seed() {
const connection = await connect('mongodb://localhost:27017/test_db');
const userModel: Model<User> = connection.model('User', UserSchema);
const users = Array.from({ length: 50 }).map(() => ({
name: faker.person.fullName(),
email: faker.internet.email(),
}));
await userModel.insertMany(users);
console.log('✅ MongoDB Faker Seeder 완료');
await connection.close();
}
seed().catch((err) => {
console.error('❌ Seeder 실패', err);
process.exit(1);
});
📌 실행 명령어
npx ts-node src/database/seeds/mongo-seeder.ts
실행하면 MongoDB에 50명의 랜덤 사용자 데이터가 삽입됨.
5. NestJS 커스텀 Seeder 서비스에서 Faker 적용
NestJS 내부에서 서비스 형태로 Seeder를 실행하려면 SeederService를 만들고, Faker를 연동할 수 있습니다.
🔹 Faker 적용된 Seeder 서비스
src/database/seeds/seeder.service.ts 파일을 생성합니다.
import { Injectable, OnModuleInit } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { User } from '../entities/user.entity';
import { faker } from '@faker-js/faker';
@Injectable()
export class SeederService implements OnModuleInit {
constructor(
@InjectRepository(User) private readonly userRepository: Repository<User>,
) {}
async onModuleInit() {
await this.seed();
}
async seed() {
const count = await this.userRepository.count();
if (count === 0) {
const users = Array.from({ length: 50 }).map(() => ({
name: faker.person.fullName(),
email: faker.internet.email(),
}));
await this.userRepository.insert(users);
console.log('✅ NestJS Faker Seeder 완료');
}
}
}
🔹 Seeder 모듈 등록
src/database/seeder.module.ts 파일:
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { User } from '../entities/user.entity';
import { SeederService } from './seeds/seeder.service';
@Module({
imports: [TypeOrmModule.forFeature([User])],
providers: [SeederService],
})
export class SeederModule {}
📌 실행 명령어
npx nest start
NestJS를 실행하면 SeederService가 자동으로 실행되면서 50명의 랜덤한 사용자 데이터가 삽입됩니다.
📌 결론
방식 장점 단점 추천 사용 사례
TypeORM + Faker | 간단하고 유지보수 용이 | 대량 데이터 성능 이슈 | NestJS + TypeORM 사용 시 |
Prisma + Faker | 타입 안전성, 간결한 코드 | Prisma 의존성 필요 | Prisma 사용 시 |
Mongoose + Faker | NoSQL과 자연스럽게 연동 | MongoDB 전용 | MongoDB 사용 시 |
NestJS CLI + Faker | 서비스 형태로 통합 가능 | 독립 실행이 어려움 | NestJS 내부에서 Seeder 관리할 때 |
💡 NestJS 프로젝트에서 Faker를 활용하여 Seeder를 구현하면, 개발 및 테스트 환경에서 손쉽게 더미 데이터를 생성할 수 있습니다. TypeORM, Prisma, Mongoose 등 사용하는 ORM에 따라 적절한 방식을 선택하세요! 🚀
'스터디 > NestJS' 카테고리의 다른 글
NestJS에서 Seeder(시드 데이터) 사용 방법 (0) | 2025.02.13 |
---|---|
NestJS에서 페이징을 구현 방법 2가지 (0) | 2025.02.13 |
NestJS와 MkDocs를 함께 사용하여 문서를 관리(Docker) (0) | 2025.02.13 |
NestJS에서 추천하는 아키텍처 패턴 (0) | 2025.02.13 |
NestJS 필수로 알아야 하는 개념 정리 (0) | 2025.02.13 |