Nest 프로젝트에서 Module의 역할은 뭘까?
기본적으로 생성되는 메인 모듈인 app.module 뿐 아니라, 특정한 동작을 수행하는 모듈을 정의할 수도 있다.
- 모듈에는 controller, Entity, Providers, 그리고 코드들이 있다.
- Providers는 특정 역할을 수행하는 클래스, providers의 의존성은 nest에 의해서 자동적으로 주입된다.
- Providers는 다른 모듈로 export되어 사용될 수 있다.
- 각 모듈은 외부에서 접근할 수 없는 내부적인 요소들을 가진다.
nest generate module 모듈명
명령어로 모듈을 생성하게 되면, 새로운 폴더가 생성되고 그 안에 모듈 파일이 만들어진다.
해당 폴더 안에 관련된 파일들을 다 넣어놓는다.
기존 app.module에 있던 관련 기능들을 해당 모듈 안으로 옮긴다.
TypeOrmModule.forRoot()
- 모듈과 애플리케이션의 루트 모듈 간의 연결을 설정할 때 사용한다.
- 일반적으로 애플리케이션의 메인 모듈(AppModule)에 한 번만 사용된다.
- forRoot() 메서드는 TypeOrmModule의 루트 모듈에 사용되어 데이터베이스 연결 및 설정을 구성한다.
@Module({
imports: [
TypeOrmModule.forRoot({
type: 'postgres',
host: 'localhost',
port: 5432,
username: 'user',
password: 'password',
database: 'mydb',
autoLoadEntities: true,
synchronize: true,
}),
],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
이런 식으로 DB 연결 설정 등을 한다.
src/app.module.ts
@Module({
imports: [
TypeOrmModule.forRoot(ormConfig),
TypeOrmModule.forFeature([Event]),
EventsModule,
]
...
내 경우 postgre 연결 설정 config 파일을 따로 작성해서 ormConfig라는 이름으로 import하는 방식으로 작성했다.
TypeOrmModule.forFeature()
예를 들어, 이벤트 관련 기능을 수행하는 모듈인 EventsModule을 만든다고 해보자.
src/events.module.ts
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { EventsController } from './events.controller';
@Module({
imports: [TypeOrmModule.forFeature([Event])],
controllers: [EventsController],
})
export class EventsModule {}
(src/event.entity.ts 파일에서 정의한 Event 엔티티가 있다)
imports: [TypeOrmModule.forFeature([Event])]
forFeature() 메소드로 Event 엔티티와 EventsModule을 연결한다.
이렇게 되면, EventsController와 EventService에서 Event 엔티티를 사용할 수 있게 된다.
글이 많은 도움이 되었습니다, 감사합니다.