Nest.JS의 동적 모듈

ayboori·2024년 11월 28일

Nest.js

목록 보기
4/11

동적 모듈

  • 설정 값이나 동적으로 생성되는 의존성에 따라 모듈의 동작을 조정할 수 있다.

  • 사용 예시

  • 모듈에 외부의 값을 주입해야 하는 경우

  • 여러 설정 옵션을 지원해야 하는 재사용 가능한 모듈이 필요할 경우

  • 조건에 따라 모듈의 동작을 다르게 구성해야 하는 경우

  • 호출되는 메서드
    - 이름은 임의로 지을 수 있으나 보통 다음과 같이 사용한다. forRoot() register()
    - module 속성의 객체를 반환해야 한다.

  • 메소드 내의 인스턴스
    -

동적 모듈 정의 - 2

import { Module, DynamicModule } from '@nestjs/common';
import { createDatabaseProviders } from './database.providers';
import { Connection } from './connection.provider';

@Module({
  providers: [Connection], // default provider, 메서드 내에서 동적으로 제공 가능
})
export class DatabaseModule {  
  // 동기적 / 비동기적으로 동적 모듈을 반환한다.  
  // static으로 지정 > 클래스 인스턴스 생성하지 않고 메소드 사용 가능
  static forRoot(entities = [], options?): DynamicModule {
    const providers = createDatabaseProviders(options, entities);
    return {
      module: DatabaseModule,
      providers: providers,
      exports: providers,
    };
  }
}
  • 입력 받은 매개변수에 맞는 databaseProvider, Connection providers를 모두 내보낸다

동적 모듈 호출 - 2

import { Module } from '@nestjs/common';
import { DatabaseModule } from './database/database.module';
import { User } from './users/entities/user.entity';

@Module({
  imports: [DatabaseModule.forRoot([User])],
})
export class AppModule {}

동적 모듈의 메소드

https://cdragon.tistory.com/entry/NestJS-Module-%EC%95%8C%EC%95%84%EB%B3%B4%EA%B8%B0-%EB%8F%99%EC%A0%81-%EB%AA%A8%EB%93%88Dynamic-modules


## ConfigModule `dotenv` 대신 `Nest/config`로 환경 변수를 관리하는 방법이다.

환경 설정 용도의 파일
미리 .env를 삽입해두면 그 하위 모듈에서는 모두 process.env를 통해 값에 접근할 수 있다.

ConfigModule의 동적 호출 필요성

ConfigModule 설정

env 파일 설정 / forRoot 메소드 활용 /
https://choi-records.tistory.com/entry/NestJS-Nest-Config-%ED%99%98%EA%B2%BD-%EB%B3%80%EC%88%98-%EA%B4%80%EB%A6%AC

ConfigModule - register()


import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { ConfigModule } from './config/config.module';

@Module({
  imports: [ConfigModule.register({ folder: './config' })],
  // class instance가 아닌 register() 호출
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

참고
https://cdragon.tistory.com/entry/NestJS-Module-%EC%95%8C%EC%95%84%EB%B3%B4%EA%B8%B0-%EB%8F%99%EC%A0%81-%EB%AA%A8%EB%93%88Dynamic-modules
https://docs.nestjs.com/fundamentals/dynamic-modules

profile
프로 개발자가 되기 위해 뚜벅뚜벅.. 뚜벅초

0개의 댓글