기존의 환경변수 관리 방식은 env파일을 github에 공개하여 배포 자동화 수행 중 github action에서 Dockerfile을 통해 이미지를 빌드할 때 이 파일을 컨테이너 내부에 삽입하도록 관리해왔습니다.
하지만, github에 해당 env파일을 노출하는 것은 치명적인 보안취약점이므로 개선이 필요하여 하기의 작업을 수행했습니다.
환경변수는 빌드 시점이 아닌 런타임 중 주입 된다는 사실을 알게 되었습니다.
이에 따라, docker-compose.yml파일에 env파일을 참조하는 설정을 더해주었고, 간단하게 서버 상 docker-compose.yml파일과 같은 경로에 .env.production 복사본 파일을 붙여넣는 작업을 수행하여, production 모드로 nest 컨테이너를 구동하도록 설정된 docker-compose.yml이 해당 서버 내 환경변수 파일을 주입하도록 하였습니다.

[docker-compose에 의해 nest 컨테이너 실행 시, 동일경로 내 env.production 주입]

[동일 경로 내 env.production 생성]
app.module.ts: 환경변수를 TypeOrmModule.forRootAsync 루트 설정에서 configService를 주입하여 사용할 수 있도록 변경했습니다.
this.config.service.get('환경변수명')을 가져와 사용할 수 있습니다. (auth.service.ts 파일에 적용한 변경사항 참고)기존 dotenv를 통해 bootstrap() 이전에 서버환경을 출력하도록 했던 것을, configService 방식으로 통일함에 따라, main.ts에서 bootStrap 내 NestFactory 생성 평가 이후, configService를 통해 판별된 서버구동 환경 분기 로그 출력을 처리하도록 변경하였습니다.
configService 및 docker-compose를 통한 환경 변수 주입이 정상적으로 수행되는 것을 확인했다.
이는 nestjs에서 환경변수로 DB HOST가 결정되기에 아래처럼 docker-compose를 통한 nestjs의 모든 init동작이 정상 수행되는 것으로 알 수 있다.
