Data/DBMS

[TypeORM] Seed (데이터베이스에 초기 데이터 생성하기)

닉네임없음ㅎ 2024. 6. 30. 00:15

[TypeORM] Seed (데이터베이스에 초기 데이터 생성하기)


Seed 파일은 초기 데이터를 데이터베이스에 삽입하는 역할을 한다. 

순서는 
1. 데이터 베이스 초기화
2. 초기 데이터 삽입
이다. 

typeorm-extension을 설치하면 Seeder를 사용할 수 있다. 

 npm i typeorm-extension



해당 명령어를 실행하면 된다. 
그럼 src/ 폴더에 seed.ts 파일을 만들어 보자. 


그리고 삽입할 시드들을 seed 폴더 아래에 파일을 생성한다. 
나는 UserSeeder, SettingSeeder 이런식으로 초기 데이터가 필요한 시드 파일들을 나눠 주었다. 

 

package.json 파일의 스크립트에 

'seed'가 생성된다. 

 

src/seed.ts

async function bootstrap(): Promise<void> {
  const configService = new ConfigService();
  ConfigModule.forRoot({
    envFilePath: '.env.dev',
  });

  const options: DataSourceOptions & SeederOptions = {
    type: 'mariadb',
    host: configService.get<string>('DB_HOST'),
    port: configService.get<number>('DB_PORT'),
    username: configService.get<string>('DB_USERNAME'),
    password: configService.get<string>('DB_PASSWORD'),
    database: configService.get<string>('DB_DATABASE'),
    entities: [
      User,
    ],
    seeds: [UserSeeder, SettingSeeder]
  };

  const dataSource: DataSource = new DataSource(options);
  dataSource.initialize().then(async () => {
    await dataSource.synchronize(true);
    await runSeeders(dataSource);
    process.exit();
  })
}
bootstrap()
  .then(() => {
    logger.verbose(`Database seed operation completed successfully. Initial data has been added.`);
  })
  .catch((error) => {
    logger.error(`Failed to seed the database. ${error.message()}`)
  });

연결할 데이터베이스 정보를 적고, 

실행할 시드도 입력해준다. 

 

시드를 실행할 때 무조건 데이터베이스를 한번 초기화 하고 

초기데이터를 삽입하게끔 하였다. 

 

 

src/seed/user.seeder.ts

import { Seeder } from "typeorm-extension";
import { DataSource, Repository } from "typeorm";
import { Role, User } from "../users/entities/users.entity";
import * as bcrypt from "bcrypt";

export class UserSeeder implements Seeder {
  async run(dataSource: DataSource): Promise<any> {
    const userRepository: Repository<User> = dataSource.getRepository(User);
    await userRepository.insert([
      {
        userId: 'admin',
        password: await bcrypt.hash('123', 3),
        name: '관리자',
        contact: '010-1111-1111',
        role: Role.Admin,
        department: '개발팀',
        position: '관리자'
      },
      {
        userId: 'user',
        password: await bcrypt.hash('123',3),
        name: '사용자',
        contact: '010-3333-3333',
        role: Role.User,
        department: '개발팀',
        position: '사원'
      },
    ])
  }
}

어떤 데이터를 삽입할지도 정의해 준다.

 

그리고 시드를 실행시켜보자 !

npm run seed

 

 

 

시드가 잘 실행되었다. 

 

포스트맨으로 확인해보니 

초기 사용자가 잘 등록된 것을 볼 수 있다!