[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
시드가 잘 실행되었다.
포스트맨으로 확인해보니
초기 사용자가 잘 등록된 것을 볼 수 있다!