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

CB S님의 프로필 이미지
CB S

작성한 질문수

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

ConfigModule 사용하기(dotenv 진화판)

.env 파일 추가 후 빈 화면이 뜹니다.

작성

·

360

0

ConfigModule 사용하기(dotenv 진화판) 부분에서 4분 쯤에 .env 추가하셔서 설정하시는 부분에서 막혔습니다.

 

@nestjs/config모듈은 설치된 상태입니다.

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

@Module({
  imports: [ConfigModule.forRoot()],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

app.controller.ts

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

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

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

.env

SECRET=안녕하세요

packge.json

{
  "name": "a-nest",
  "version": "0.0.1",
  "description": "",
  "author": "",
  "private": true,
  "license": "UNLICENSED",
  "scripts": {
    "build": "nest build",
    "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"",
    "start": "nest start",
    "start:dev-backup": "nest start --watch",
    "start:dev": "nest build --webpack --webpackPath webpack-hmr.config.js --watch",
    "start:debug": "nest start --debug --watch",
    "start:prod": "node dist/main",
    "lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix",
    "test": "jest",
    "test:watch": "jest --watch",
    "test:cov": "jest --coverage",
    "test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand",
    "test:e2e": "jest --config ./test/jest-e2e.json"
  },
  "dependencies": {
    "@nestjs/common": "^10.0.0",
    "@nestjs/config": "^3.1.1",
    "@nestjs/core": "^10.0.0",
    "@nestjs/platform-express": "^10.0.0",
    "reflect-metadata": "^0.1.13",
    "rxjs": "^7.8.1"
  },
  "devDependencies": {
    "@nestjs/cli": "^10.0.0",
    "@nestjs/schematics": "^10.0.0",
    "@nestjs/testing": "^10.0.0",
    "@types/express": "^4.17.17",
    "@types/jest": "^29.5.2",
    "@types/node": "^20.3.1",
    "@types/supertest": "^2.0.12",
    "@typescript-eslint/eslint-plugin": "^6.0.0",
    "@typescript-eslint/parser": "^6.0.0",
    "dotenv": "^16.3.1",
    "eslint": "^8.42.0",
    "eslint-config-prettier": "^9.0.0",
    "eslint-plugin-prettier": "^5.0.0",
    "jest": "^29.5.0",
    "prettier": "^3.0.0",
    "run-script-webpack-plugin": "^0.2.0",
    "source-map-support": "^0.5.21",
    "supertest": "^6.3.3",
    "ts-jest": "^29.1.0",
    "ts-loader": "^9.4.3",
    "ts-node": "^10.9.1",
    "tsconfig-paths": "^4.2.0",
    "typescript": "^5.1.3",
    "webpack": "^5.89.0",
    "webpack-node-externals": "^3.0.0"
  },
  "jest": {
    "moduleFileExtensions": [
      "js",
      "json",
      "ts"
    ],
    "rootDir": "src",
    "testRegex": ".*\\.spec\\.ts$",
    "transform": {
      "^.+\\.(t|j)s$": "ts-jest"
    },
    "collectCoverageFrom": [
      "**/*.(t|j)s"
    ],
    "coverageDirectory": "../coverage",
    "testEnvironment": "node"
  }
}

 

코드 작성 후 서버를 재실행 시켰고, 빈 하얀 화면이 출력되는 상태입니다.

 

제가 놓친 부분이 있을까요?

답변 3

0

CB S님의 프로필 이미지
CB S
질문자

방금 해결했습니다.

파일 생성 루트가 ./a-nest 안에 있어야 했는데

./sleact 안에 만들어서 그랬던 문제였습니다.

 

0

CB S님의 프로필 이미지
CB S
질문자

아.. 제가 실수로 콘솔을 올리지 않았네요.

[Nest] 16604  - 2023. 11. 15. 오후 12:53:02     LOG [InstanceLoader] ConfigHostModule dependencies initialized +3ms
[Nest] 16604  - 2023. 11. 15. 오후 12:53:02     LOG [InstanceLoader] AppModule dependencies initialized +0ms
[Nest] 16604  - 2023. 11. 15. 오후 12:53:02     LOG [InstanceLoader] ConfigModule dependencies initialized +1ms
[Nest] 16604  - 2023. 11. 15. 오후 12:53:02     LOG [RoutesResolver] AppController {/}: +0ms
[Nest] 16604  - 2023. 11. 15. 오후 12:53:02     LOG [RouterExplorer] Mapped {/, GET} route +0ms
[Nest] 16604  - 2023. 11. 15. 오후 12:53:02     LOG [NestApplication] Nest application successfully started +1ms
listening on port 3000

에러 로그는 없고, .env를 삭제 후

app.service.ts 부분을 아래와 같이 수정하면

@Injectable()
export class AppService {
  async getHello() {
    return '하이';
  }

  postHello(): string {
    return 'POST Success!';
  }
}

정상적으로 '하이'라는 단어가 출력됩니다.

 

.env 삭제 후 process.env.SECERET 로 두면 하얀 화면으로 뜨구요.

 

추가적으로 제 환경에서 process.env.SECERET 중에서 SECERET를 선택하면 globals.d.ts파일이 열립니다.

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

일단 SECRET의 오타인 건가요? SECERET이라고 하셔서요.

AppService를 수정하기 전에 코드는 뭐였나요?

CB S님의 프로필 이미지
CB S
질문자

SECRET의 오타입니다.
그리고 AppService를 수정하기 전에는

export class AppService {
  async getHello(): string {
    return 'Helloworld';
  }

  postHello(): string {
    return 'POST Success!';
  }
}

형태였습니다.

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

그냥 문자열만 수정하신 것이지 특별히 바뀐 게 없는데요? .env랑 AppService는 아무 상관이 없습니다.

CB S님의 프로필 이미지
CB S
질문자

맞습니다. 특별히 바뀐게 없는데 .env 데이터를 못불러와서 혹시 놓친게 있는지 여쭈어 보았습니다.

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

질문이 이해가 안 되는게, 현재 .env 를 불러오는 부분을 코드에 추가하신 적이 없습니다.

0

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

백엔드 서버 콘솔에서는 아무 에러 없나요? .env를 지우면 화면이 다시 뜨나요?

CB S님의 프로필 이미지
CB S

작성한 질문수

질문하기