nestjs 실행했을 때, entity대로 테이블이 생성되지 않을 때(이슈)

김철준·2023년 12월 16일
0

기존에는 mysql과 nestjs를 연결하여 nestjs내에서 엔티티만 만들어준다면 엔티티를 토대로 자동으로 mysql 테이블을 만들어줬었다.

하지만 다른 컴퓨터에서 nestjs 애플리케이션을 실행시켜려했을 때, 설정해둔 엔티티 코드를 토대로 mysql 테이블을 생성해주지 못하는 이슈가 있었다.

이유는 다음과 같이 코드를 설정해놨었기 때문이다.

@Module({
  imports: [
    ConfigModule.forRoot(),
    TypeOrmModule.forRoot({
      type: 'mysql',
      host: process.env.DB_HOST,
      username: process.env.DB_USERNAME,
      password: process.env.DB_PASSWORD,
      database: process.env.DB_NAME,
      entities: [User],
      synchronize: false, // 이 코드 주목
      autoLoadEntities: true,
    }),
    UsersModule,
    CatsModule,
    AuthModule,
  ],
  controllers: [AppController, DogsController],
  providers: [
    AppService,
    {
      provide: 'APP_GUARD',
      useClass: AuthGuard,
    },
  ],
})
export class AppModule {
  constructor(private dataSource: DataSource) {}
}

위에 synchronize 코드를 주목하자.

indicates if database schema should be auto created on every application launch. Be careful with this option and don't use this in production - otherwise you can lose production data. This option is useful during debug and development. Alternative to it, you can use CLI and run schema:sync command.
Note that for MongoDB database it does not create schema, because MongoDB is schemaless. Instead, it syncs just by creating indices.

synchronize옵션은 애플리케이션을 실행할 때마다 디비 스키마를 자동으로 설정해주도록 하는 옵션이다.(true => 설정 ,false => 설정 x)

그리하여 코드상 위 옵션을 false로 설정해놨기 때문에 테이블이 자동으로 생성되지 않는 것이었다.

profile
FE DEVELOPER

0개의 댓글