셋팅

  1. npm i @nestjs/config joi
  2. src/config 디렉터리 생성
  3. config.ts 생성
import { registerAs } from '@nestjs/config';

export default registerAs('app', () => ({
  okky_id: process.env.OKKY_ID,
  okky_password: process.env.OKKY_PASSWORD,
}));

  1. validation.schema.ts 생성(env 파일 정합성 검사 파일)
import Joi from 'joi';

export const validationSchema = Joi.object({
  OKKY_ID: Joi.string().required(),
  OKKY_PASSWORD: Joi.string().required(),
});
  1. config.module.ts 생성
import { Module } from '@nestjs/common';
import appConfig from './confg';
import { validationSchema } from './validation.schema';
import { ConfigModule as NestConfigModule } from '@nestjs/config';
@Module({
  imports: [
    NestConfigModule.forRoot({
      envFilePath: process.env.NODE_ENV === 'development' ? '.env.dev' : '.env',
      load: [appConfig],
      isGlobal: true,
      validationSchema,
    }),
  ],
})
export class ConfigModule {}

사용

  1. 사용할 module에 import
import { Module } from '@nestjs/common';
import { AuthService } from './auth.service';
import { ConfigModule } from 'src/config/config.module';
@Module({
  imports: [ConfigModule],
  providers: [AuthService],
  exports: [AuthService],
})
export class AuthModule {}
  1. 사용할 service or controller 등에서 적용
import { Injectable, Logger } from '@nestjs/common';
import puppeteer from 'puppeteer';
import { OKKY_LOGIN_URL } from 'src/constants/url';
import { ConfigService } from '@nestjs/config';

@Injectable()
export class AuthService {
  private readonly logger = new Logger(AuthService.name);
  constructor(private readonly configService: ConfigService) {}

  async login() {
    try {
      console.log(this.configService.get('app.okky_id'));
      console.log(this.configService.get('app.okky_password'));
      const browser = await puppeteer.launch({ headless: false });
      const page = await browser.newPage();

      await page.goto(OKKY_LOGIN_URL);
      await page.type('#user-id', this.configService.get('app.okky_id'));
      await page.type('#password', this.configService.get('app.okky_password'));
      await page.click('submit');
      // await browser.close();
    } catch (e) {
      this.logger.error('로그인 중 에러 발생', e);
      throw e;
    }
  }
}

config.ts에서 이름을 app으로 지정했기 때문에 app.으로 시작함. 여러 종류로 만들 수 있음