인프런 커뮤니티 질문&답변
Module.forRoot() 와 Module.forFeature()의 확실한 차이점을 알고싶습니다
작성
·
2.4K
답변 1
2
안녕하세요 김동완님!
@nestjs/config 의 ConfigModule에 한해서 답변 드리겠습니다.

ConfigModule.forRoot 의 경우, 여러가지 옵션을 설정할 수 있습니다.

여기서 isGlobabl: true 라고 설정하면,
(AppModule에 ConfigModule.forRoot({isGlobal : true})를 import 한다면,)
다른 모듈에서 다시 ConfigModule를 import 할 필요 없이 전역 변수 처럼 전역 모듈이 되어서 어디서든 import가 된 상태로 동작합니다. 즉, CatModule에서 따로 ConfigModule을 import하지 않아도 환경 변수를 사용할 수 있는 것이죠. 이처럼 여러가지 옵션을 forRoot에서 설정할 수 있습니다.
(후에 강의에서 관련 개념을 언급합니다.)
유용한 옵션은 cache: true인데, 이 경우에도 process.env를 캐싱하여 속도를 높일 수도 있습니다.
또한 process.env 말고 다른 파일 형식(json, yml 등)으로 환경 변수를 셋팅하는 옵션도 줄 수 있습니다.
이처럼 forRoot는 루트 모듈(AppModule)에서 ConfigModule을 import할때 설정을 해줄 수 있습니다.
이제, AppModule에서 ConfigModule을 import한 상태에서
forFeature에 대한 설명을 진행하겠습니다.
우선, 아래의 링크처럼 단순히 .env 에 환경변수를 사용하는 것이 아니라 user.json 혹은 user.yml 등 파일 형식으로 user 모듈만의 환경 변수를 .env 파일 포멧이 아닌 파일에서 환경변수를 설정한다고 가정하겠습니다.
https://docs.nestjs.kr/techniques/configuration#custom-configuration-files
이때, 별도의 스크립트를 사용해서 user.yml 파일을 파싱해야하는데, 파싱한 스크립트 파일을 configuration.user.js라고 하고 cat.yml 파일을 파싱한 스크립트 파일을 configuration.cat.js라고 하겠습니다.
CatModule에서는 cat.yml 파일을 환경변수로 사용하고, UserModule에서는 user.json 파일의 환경변수를 사용한다면 각각 다른 환경변수 파일을 사용하게 됩니다.
이때, UserModule에서는 쓸데없이 configuration.cat 환경변수 파일을 load할 필요가 없겠죠.
즉, 부분적으로 특정 옵션을 줘서 설정해야 합니다. 이때 사용하는 것이 forFeature인데,
UserModule에서 ConfigModule.forFeature(userConfigureationOption)으로 import해서 사용하는 것입니다. 아래의 링크를 참고하면 좋을 것 같습니다.
https://docs.nestjs.kr/techniques/configuration#partial-registration
추가적으로 궁금하신 것을 답글로 남겨주세요!
좋은 하루 보내세요~





.png?w=112)
상세한 답변 감사드립니다.
configmodule이외의 모듈들에서도 forRoot()와 forFeatures()가 비슷한 원리로 작동하는지 궁금했습니다.
답변 강사님 답변달리기 전에 nestjs 공식 discord에서 받은 답변도 다른분들 위해서 첨부합니다.