우선 필요한 라이브러리들을 가져와준다.
npm install @nestjs/typeorm typeorm mysql2
그리고 AppModule에 우리가 사용할 데이터베이스의 연결정보를 추가해줘야 한다.
imports에 TypeOrmModule.forRoot()로 다음과 같이 추가해준다.
@Module({
imports: [TypeOrmModule.forRoot({
type: 'mysql',
host: 'localhost',
port: 3306,
username: 'root',
password: '1204',
database: 'usedCars',
entities: [__dirname + '/**/*.entity{.ts,.js}'],
synchronize: true
}), UsersModule, ReportsModule],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
mysql을 사용하기 때문에 type은 mysql이며, database로 스키마를 나타낸다.
synchronize를 사용하면 변경된 entity 정보가 데이터베이스의 스키마에도 반영된다.
개발 환경에서만 사용하고, 배포 환경에서는 사용하지 말도록 하자.
entities에 우리가 작성할 entity들을 넣어준다.
작성한 entity들을 하나하나 추가할 수 있지만, 많은 양의 entity를 작성하기 때문에 convention에 따라 .entity.ts로 끝나는 파일들을 모두 추가해주도록 path를 지정해주자.
이제 예시로 entity를 하나 만들어보자.
nest에서는 entity를 다음과 같은 과정으로 생성한다.
1번으로 UserEntity를 만들어보도록 하겠다.
@Entity('users')
@Unique(['email'])
export class Users{
@PrimaryGeneratedColumn()
id: number;
@Column()
email: string;
@Column()
password: string;
}
@Entity를 붙여 Entity임을 알려주고, 사용할 테이블의 이름을 적는다.
@Unique()에는 unique 속성을 가질 column 명을 적어준다.
@PrimaryGeneratedColumn을 사용하면 autoincrement의 int column이 생성된다.
그 다음에는 2번으로 UserModule에 UserEntity를 추가한다.
@Module({
imports: [TypeOrmModule.forFeature([Users])],
controllers: [UsersController],
providers: [UsersService]
})
export class UsersModule {}
3번도 해야하지만, 해당 path의 모든 entity를 등록했기에 우리는 할 필요가 없다.
일단 이렇게 해서 서버를 실행해보면, synchronize가 true이기 때문에 데이터베이스에 다음과 같이 테이블이 생성된 것을 볼 수 있다.
UserEntity는 성공적으로 작성 한 것 같다.
'Node > Nest' 카테고리의 다른 글
Nest에서 response json 커스텀하기 (0) | 2025.07.08 |
---|---|
Nest에서 repository를 이용해 CRUD 구현하기 (0) | 2025.07.07 |
Nest에서 멀티 모듈 생성하는 방법 (1) | 2025.07.06 |
Nest에서의 IOC/DI 알아보기 (0) | 2025.07.06 |
Nest에서 Service layer 구현하기 (0) | 2025.07.05 |