한 번 정의하고, 어디서든 신뢰하세요: CtroEnv 딥 다이브
CtroEnv 코어 API는 네 가지 validator factory를 사용합니다. 이를 통해 환경 변수를 간편하게 보호할 수 있습니다.
작동 방식은 다음과 같습니다:
• string() — 텍스트에 사용합니다. URL, 이메일, 포트 또는 특정 길이에 대한 규칙을 추가할 수 있습니다. 사용자 정의 패턴을 위한 regex를 지원합니다.
• number() — 숫자 값에 사용합니다. "3000"과 같은 문자열을 실제 숫자로 변환합니다. 정수, 양수 또는 특정 범위를 강제할 수 있습니다.
• boolean() — true/false 값에 사용합니다. "true"와 같은 문자열이나 "1"과 같은 숫자를 자동으로 처리합니다. 피처 플래그(feature flags)에 사용하기 완벽합니다.
• pick() — 값을 특정 목록으로 제한할 때 사용합니다. 리터럴 타입(literal types)을 생성하여 코드에서 허용되는 문자열이 무엇인지 정확히 알 수 있게 합니다. 오타가 발생하면 수정 사항을 제안하기도 합니다.
모든 validator를 위한 유용한 메서드:
- .default(value) — 변수가 누락된 경우 대체값(fallback)을 설정합니다.
- .optional() — 값이 undefined일 수 있도록 허용합니다.
- .describe(text) — 에러 메시지와 문서에 사용할 설명을 추가합니다.
- .secret() — 터미널 출력에서 민감한 값을 마스킹 처리합니다.
- .validate(fn) — 일회성 규칙을 위한 사용자 정의 로직을 작성할 수 있습니다.
CtroEnv는 다양한 환경에서 작동합니다:
- Node.js: nodeSource() 또는 loadEnv()를 사용하여 process.env 또는 .env 파일을 읽습니다.
- Vite: Vite 플러그인을 사용하여 변수가 유효하지 않을 경우 빌드를 실패하게 만듭니다.
- Next.js: 내장 지원 기능을 사용하여 서버와 클라이언트 변수를 분리합니다. 이를 통해 비밀 정보가 브라우저로 실수로 유출되는 것을 방지할 수 있습니다.
검증에 실패했을 때, CtroEnv는 단순히 멈추지 않습니다. 모든 에러를 수집하여 한꺼번에 보여줍니다. 키(key), 메시지, 그리고 수정 방법 제안까지 포함된 명확한 보고서를 받을 수 있습니다.
최종 출력물은 frozen object입니다. 즉, 구성(configuration)이 읽기 전용이며 런타임 중에 실수로 변경되는 것을 방지할 수 있습니다.
출처: https://dev.to/ctrotech/define-once-trust-everywhere-ctroenv-deep-dive-3bjl