인프런 커뮤니티 질문&답변

최석우님의 프로필 이미지
최석우

작성한 질문수

Slack 클론 코딩[백엔드 with NestJS + TypeORM]

implements, injectable(DI) 알아보기

개발환경과 배포환경시 다른 의존성을 주입하는 예제

해결된 질문

작성

·

230

0

질문보다는 코드 리뷰에 가까운데
강의 내용중에 나온 테스트 코드와 실제 배포시 다르게 적용할 경우 예제를 작성해 보았습니다.
이해한 내용이 맞는지 또는 보안이나 수정할 만한 내용이 있는지 알려주시면 감사합니다.

//app.service.ts

import { Injectable } from '@nestjs/common';

export interface IAppService {
  getSecret(): string;
}

@Injectable()
export class AppService implements IAppService {
  getSecret(): string {
    return '실제 배포 환경';
  }
}

@Injectable()
export class Test_AppService implements IAppService {
  getSecret(): string {
    return '개발 테스트 환경';
  }
}
//app.module.ts

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

@Module({
  imports: [ConfigModule.forRoot({ isGlobal: true })],
  controllers: [AppController],
  providers: [
    {
      provide: 'AppService',
      useClass:
        process.env.NODE_ENV === 'production' ? AppService : Test_AppService,
    },
  ],
})
export class AppModule {}
//app.controller.ts

import { Controller, Get, Inject } from '@nestjs/common';
import { IAppService } from './app.service';

@Controller()
export class AppController {
  constructor(@Inject('AppService') private readonly appService: IAppService) {}

  @Get()
  getHello(): string {
    return this.appService.getSecret();
  }
}

답변 1

1

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

그렇게 하시면 됩니다.

하나 보완할 만한 것은 process.env.NODE_ENV도 configService를 inject하는 식으로 수정해서 configService.get('NODE_ENV')로 바꾸면 좋을 것 같습니다.

최석우님의 프로필 이미지
최석우

작성한 질문수

질문하기