나는 .env 파일을 생성할 때 .env.dev / .env.production .... 식으로 .env 뒤에 다른 것을 붙이는 편이다. NestJS를 주로 사용하다 보니 이런 방식을 써도 config에서 설정해주면 되니 큰 문제가 없었다. 문제는 NestJS가 아니라 일반 js를 실행할 때 발생했다.
환경변수 파일을 수정해도 수정 사항이 적용되지 않는 것이다. 환경변수를 console.log()로 찍어봐도 변경사항은 적용되지 않은 상태였고, 뭔가 잘 안될 때 전통적인 해결법인 껐다가 다시 켜기를 해봐도 소용이 없었다.
import 순서가 문제일까 싶어 확인해봐도 이미 최상단에 위치했고, 공식 홈페이지에서 소개하는 대로 import 'dotenv/config' 으로만 쓰는게 문제일까 싶어 import "dotenv/config.js"와 import dotenv from 'dotenv'도 시도해봤다. 다 통하지 않았다. 오히려 import dotenv from 'dotenv'는 에러가 발생하기까지 했다.
결론 부터 말하면 .env.dev 식으로 명명하던 버릇이 발목을 잡은 것이다. 스택 오버플로우에서 비슷한 케이스가 있나 찾아보다가 파일 이름이 .env이여야 한다는 글을 보았고, .env 파일을 만들어 테스트 해보니 바로 적용되더라. 그러면 환경변수 파일이 아예 적용되지 않았을 텐데 적용되던 값은 무엇일까? process.env.SOME || defaultValue 식으로 기본값 설정한 것이 그대로 들어가 있었다.
생각해보자면 당연한 일이다. .NestJS에서는 정확히 .env.dev라는 파일을 읽겠다 명시했었는데, 그냥 process.env로 쓸 때는 따로 명시한 것이 없었다. .env파일을 읽어야 하는데 파일이 없으니 당연히 적용이 안된 것이다. 실행환경 별로 파일을 분리한다는 생각에 정작 중요한 사실을 잊었다. 나름 의도를 가지고 한 일인데 오히려 좋지 않게 작용한 케이스다.
만약 NestJS와 일반 process.env를 둘 다 사용해야 하는 경우라면 .env파일로 통일하는게 좋을듯 하다.
'Node.js' 카테고리의 다른 글
자바스크립트의 비동기 처리에 대하여 (0) | 2023.11.15 |
---|---|
함수형 자바스크립트 - ES6와 이터러블 (0) | 2023.10.20 |
nvm을 이용한 node 버전 관리 (0) | 2023.09.10 |
NestJs configModule 적용 (0) | 2023.09.04 |
Promise.allSettled()과 Promise.all() (0) | 2023.08.20 |