BackEnd/Nest.js

[Nest.js] ForRoot vs ForFeature

_PNO 2023. 9. 21. 22:56
게시글을 읽으시기 전에,
제 블로그의 정보가 정확하지 않을 수도 있다는 점 명심해 주세요.
혹시 틀린 부분을 발견하신다면 댓글로 알려주시면
적절한 조치를 취하도록 하겠습니다.

시작하며

오늘 Nest.js로 코딩을 하고있었는데 문득 이런 궁금증이 들었습니다. 

imports: [
    TypeOrmModule.forFeature([User]),
    JwtModule...(후략)
  ],
 imports: [
    TypeOrmModule.forRootAsync({
      imports: [ConfigModule],

      useFactory: async (config: ConfigService) => ({
        type: 'mysql',
        port: config.get<number>('DB_PORT'),
        ...(생략)
        timezone: config.get<string>('TZ'),
      }),
      inject: [ConfigService],
    }),
  ],

"잠깐 module을 import해올때 forRoot도 쓰고.. ForFeature도 쓰네? 차이점이 뭐야 이거?"
그래서 즉흥으로 공부해왔습니다. 바로 시작합시다.

ForRoot

동적 모듈을 하나 구성하고 그 구성으로 이루어진 모듈들을 여러 위치에서 재사용한다는 메서드입니다. 보통 ForRoot는 주로 root(app.module.ts) 사용된다는것을 봤을때. 즉, 프로젝트 전체적인 세팅을 담당한다는 것을 알 수 있습니다. 그러므로, 프로젝트의 전체적인 세팅을 하는 configModule이나 mongoDB같은 module에 사용하는것이 적합합니다.

 

파란색에서 보통 설정, 빨간 범위 안에서 사용

ForFeature

동적 모듈을 하나 구성하고 그 구성으로 이루어진 모듈들을 특정 모듈 안에서만 재사용하는것이 일반적입니다. 이러한 특성 때문에 주로 한 모듈당 그 모듈의 메인파일(user.module.ts)에서 초기화합니다. 이러한 특성 때문에 Entity를 설정하는 TypeORM같은 모듈의 초기화를 담당하는것이 바람직 합니다.

파란색에서 보통 설정, 빨간 범위 안에서 사용

마무리

갑자기 궁금해서 찾아보고 정리해봤습니다. 혹시 잘못된점이 있다면 언제든지 이야기 해주십쇼.

 

참고 자료 출처

[Nest.js] forRoot, forFeature 정의와 사용 예시