피드로 돌아가기
Dev.toDevOps
원문 읽기
Zero-dependency 기반의 Strict Type Validation을 통한 Env 설정 오류 원천 차단
Stop trusting environment variables in your TypeScript apps
AI 요약
Context
TypeScript의 타입 시스템만으로는 런타임에 주입되는 외부 환경 변수의 유효성을 보장할 수 없는 한계 존재. 단순 Casting 방식의 타입 변환 시 'false' 문자열이 Boolean true로 해석되는 등 잘못된 설정값이 배포 단계까지 유입되는 위험성 상존.
Technical Solution
- Application Boundary에 엄격한 Validation Layer를 구축하여 런타임 진입 전 설정값 검증
- Type Casting 대신 Explicit Validation 로직을 적용하여 빈 문자열, 잘못된 URL 스킴(file:// 등)을 명시적으로 거부
- Vite의 VITE_ prefix 및 Next.js의 NEXT_PUBLIC_ prefix 체계와 결합한 Config Module 설계로 노출 범위와 유효성을 동시 제어
- REQUIRED, INVALID_URL 등 세분화된 Error Code 체계를 도입하여 CI/CD 파이프라인 및 CLI에서 프로그래밍 방식의 에러 처리 구현
- Zero-dependency 설계를 통해 런타임 오버헤드를 최소화하고 인프라 종속성 제거
Key Takeaway
환경 변수는 외부 입력값으로 간주하여 내부 로직에 도달하기 전 반드시 Validation 단계를 거쳐야 하며, '파싱 가능한 값'과 '유효한 값'을 엄격히 구분하는 설계 원칙이 필요함.
실천 포인트
1. process.env 직접 참조를 지양하고 별도의 Config Module을 통해 중앙 집중식 검증 수행
2. Boolean, Number 변환 시 JS 내장 함수 대신 엄격한 유효성 검사 라이브러리 도입 검토
3. Build 타임 또는 CI 단계에서 환경 변수 검증 스텝을 추가하여 잘못된 설정으로 인한 배포 실패 방지
4. Client-side에 노출되는 환경 변수와 Server-side 전용 변수를 물리적으로 분리한 모듈 구조 설계