elfinlas / blog_utterances

0 stars 0 forks source link

nest_js/230213_nestjs_module_config_load/ #5

Open utterances-bot opened 1 year ago

utterances-bot commented 1 year ago

Nest.Js에서 @Module의 속성에서 process.env 사용하기 | MHLab blog

블로그용 작은 프로젝트를 만들다가… 이번에 Nest.Js에서 Jwt쓰기 주제로 포스팅을 준비중이다. 근데 처음부터 다시 설치해서 하려니까 몇 가지 막히는 부분이 있었다. 이런 코드가 있다. 근데 @Module 안에서 process.env로 설정파일에 접근하려 했다. 근데 아래와 같이 에러가

https://elfinlas.github.io/nest_js/230213_nestjs_module_config_load/

SeungYn commented 1 year ago

MongooseModule.forRoot(config().db.mongodbURI, { useNewUrlParser: true, useUnifiedTopology: true, }),

몽고모듈을 이용할때는 registerAsync를 사용안해줘도 env 파일에 있는 값을 잘 가져오는데 혹시 이유 아시나요??

elfinlas commented 1 year ago

@SeungYn

안녕하세요~ 먼저 nestjs에서 모듈을 가져올 때 forRoot와 registerAsync는 이름에서 알수 있는것처럼 동기적, 비동기적 모듈 설정을 해주는 역할을 합니다.

위에 언급을 해주신 코드 조각에서 forRoot() 안에 config()의 경우 프로젝트 내의 설정파일(보통은 .env)의 정보를 가져오게됩니다. 이 때 저 설정파일에 있는 값을 참고하여 process.env에 저장하게 됩니다. 그리고 저 모듈을 등록할 때 process.env를 참고하여 db.mongodbURI를 가져오게 됩니다.

이렇게 일반적으로 순차적인 로딩을 통해 가져온다면 동기 비동기로 모두 동작을 하게 됩니다.

다만 registerAsync로 모듈을 가져올 때.. 즉 비동기적으로 모듈을 로드할 때는 위 예제 코드에서 언급된 바와 같이

JwtModule.registerAsync({
      useFactory: async () => ({
        secret: process.env.JWT_KEY,
        signOptions: { expiresIn: '60s' },
      }),
    }),

useFactory를 통해 비동기적으로 설정을 가져오고 모듈을 로드합니다. 보통 registerAsync는 useFactory, inject, imports 등을 사용하여 모듈 로드 시 사용하게 됩니다.

덕분에 저도 다시한번 찾아보게 되네요 ^^ 질문 주셔서 감사하고 위 글이 답변이 되셨으면 합니다.

감사합니다