«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
Archives
Today
Total
관리 메뉴

올해는 머신러닝이다.

NestJs + Seeder + Faker 조합 본문

스터디/NestJS

NestJs + Seeder + Faker 조합

행복한 수지아빠 2025. 2. 13. 14:26

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에 따라 적절한 방식을 선택하세요! 🚀