마지막 수정일: 2025-02-09

Chapter 6. 동적모듈을 활용한 환경 변수 구성


https://github.com/SJ0826/nestjs-auth/commit/782c45b686338796c4bdefdcc90ddc4009428814

▪︎ env 파일 환경 설정

{
  "$schema": "<https://json.schemastore.org/nest-cli>",
  "collection": "@nestjs/schematics",
  "sourceRoot": "src",
  "compilerOptions": {
    "deleteOutDir": true,
    "assets": [
      {
        "include": "./config/env/*.env",
        "outDir": "./dist"
      }
    ]
  }
}

▪︎ App.module.ts 설정

@Module({
  imports: [
    UsersModule,
    EmailModule,
    ConfigModule.forRoot({
      envFilePath: [`${__dirname}/config/env/.${process.env.NODE_ENV}.env`],
      load: [emailConfig],
      isGlobal: true, // 전역모듈로 설정
      validationSchema, // joi를 이용해 유효성검사
    }),
  ],
  controllers: [],
  providers: [],
})
export class AppModule {}

  1. envFilePath: 현재 실행 환경에 따라 환경 변수 파일을 동적으로 로드

  2. load

    // email.config.ts
    export default registerAs('email', () => ({
      service: process.env.EMAIL_SERVICE,
      auth: {
        user: process.env.EMAIL_AUTH_USER,
        pass: process.env.EMAIL_AUTH_PASSWORD,
      },
      baseUrl: process.env.EMAIL_BASE_URL,
    }));
    
    

▪︎의존성 주입을 통해 Config 정보 사용

@Injectable()
export class EmailService {
  private transporter: Mail;

  constructor(
    @Inject(emailConfig.KEY) private config: ConfigType<typeof emailConfig>,
  ) {
    this.transporter = nodemailer.createTransport({
      // nodemailer에서 제공하는 Transporter 객체 생성
      service: config.service,
      auth: {
        user: config.auth.user,
        pass: config.auth.pass,
      },
    });
  }
  ...
  1. @Inject(emailConfig.KEY): ConfigModule로부터 이메일 설정 주입

🙋‍♀️ 질문 | 스크립트 명령어로 실행환경을 구분할 수 있는데 왜 ConfigModule를 사용할까?