NestJS · Configuration

환경 변수와 비밀 정보의 분리선

NestJS 설정 관리는 .env를 읽는 코드가 아니라, 공개 설정과 비밀값, 환경별 기본값, 검증 실패를 애플리케이션 시작 단계에서 통제하는 일이다.

01

설정 분류

포트, 기능 플래그, 외부 URL, 비밀키를 위험도별로 나눈다.

02

초기 검증

ConfigModule 로딩 시 schema로 누락과 타입 오류를 즉시 실패시킨다.

03

주입 경계

서비스는 process.env를 직접 읽지 않고 typed config provider를 통해 값을 받는다.

04

운영 교체

Secret Manager나 CI 변수로 배포 시점에 값을 주입하고 노출 로그를 차단한다.

PORT
공개 운영 설정 실행 환경마다 달라질 수 있지만 비밀은 아님
기본값 허용 가능
DATABASE_URL
민감 연결 문자열 사용자명, 비밀번호, host가 포함될 수 있음
로그 마스킹 대상
JWT_SECRET
서명 비밀 토큰 위조 방지의 핵심 값
짧거나 공유 저장소에 있으면 위험
FEATURE_FLAG
동작 분기 기능 공개와 롤백을 제어
타입과 기본값 명확화

직접 접근 · 시작 실패 · 로그 점검

직접 접근 도메인 서비스에서 process.env를 직접 읽지 않는다.
시작 실패 필수 비밀값이 없으면 요청을 받기 전에 종료된다.
로그 설정 출력에서 token, password, secret이 마스킹된다.
교체 비밀값 rotation 후 어떤 인스턴스를 재시작할지 정해져 있다.

설정 주입

@Injectable()
export class AuthConfig {
  constructor(private readonly config: ConfigService) {}
  jwtSecret() { return this.config.getOrThrow<string>('JWT_SECRET'); }
}