0Pricing
TypeScript Academy · 강의

환경 변수에 타입 지정하기

process.env에 정밀하게 검증된 타입을 부여합니다.

환경 변수에 타입 지정하기은(는) CoddyKit의 무료 TypeScript Academy 강의입니다. 이것은 4개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 TypeScript Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. TypeScript Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

process.env의 문제

Node에서 process.env의 타입은 Record<string, string | undefined>입니다. 모든 변수가 없을 수 있고 모든 값이 문자열이므로, 원시 접근은 안전하지 않으며 타입도 지정되어 있지 않습니다.

타입이 지정된 Env 인터페이스 선언하기

먼저 앱에 실제로 필요한 구성을 정확한 인터페이스로 설명합니다. 올바른 타입과 필수 필드 및 선택적 필드를 명시합니다.

interface Env {
  PORT: number;
  NODE_ENV: "development" | "production";
  DATABASE_URL: string;
  DEBUG?: boolean; // optional
}

원시 값 읽기

모든 값은 문자열 또는 undefined로 들어옵니다. 키가 단순히 존재하지 않을 수 있으므로 방어적으로 읽어야 합니다.

const rawPort = process.env.PORT; // string | undefined
const rawEnv = process.env.NODE_ENV; // string | undefined

필수 변수와 선택적 변수

앱이 실행되려면 반드시 존재해야 하는 변수도 있고, 합리적인 대체값을 사용할 수 있는 변수도 있습니다. 필수 값을 위한 도우미는 값이 없을 때 명확한 오류를 발생시킵니다.

function required(name: string): string {
  const v = process.env[name];
  if (v === undefined) throw new Error("Missing env: " + name);
  return v;
}

숫자 파싱하기

숫자 변수는 변환과 검증이 필요합니다. parseInt가 NaN을 반환할 수 있기 때문입니다. 파싱을 감싸 잘못된 입력을 즉시 거부하도록 합니다.

function num(name: string): number {
  const n = Number(required(name));
  if (Number.isNaN(n)) throw new Error(name + " is not a number");
  return n;
}

불리언 파싱하기

불리언 값은 "true"와 같은 문자열로 들어옵니다. 비어 있지 않은 문자열의 참으로 평가되는 특성에 의존하지 말고 명시적으로 정규화해야 합니다.

function bool(name: string, def = false): boolean {
  const v = process.env[name];
  if (v === undefined) return def;
  return v === "true" || v === "1";
}

타입이 지정된 Config 만들기

파싱한 값을 Env 인터페이스와 일치하는 하나의 객체로 구성합니다. 이제부터 앱의 나머지 부분은 타입이 지정된 config를 사용하며, process.env에 직접 접근하지 않습니다.

const env: Env = {
  PORT: num("PORT"),
  NODE_ENV: required("NODE_ENV") as Env["NODE_ENV"],
  DATABASE_URL: required("DATABASE_URL"),
  DEBUG: bool("DEBUG"),
};

문자열 유니온 제한하기

허용된 값의 집합이 정해진 변수라면 해당 집합에 대해 검증해야 합니다. 그러면 예상하지 못한 값이 잘못된 리터럴 타입으로 통과할 수 없습니다.

function oneOf<T extends string>(name: string, allowed: readonly T[]): T {
  const v = required(name) as T;
  if (!allowed.includes(v)) throw new Error(name + " invalid");
  return v;
}

접근 중앙 집중화하기

하나의 모듈에서 단일 env 객체를 내보냅니다. 모든 사용처가 이 객체를 가져오므로 완전한 타입 정보와 파싱 로직을 변경할 수 있는 단일 지점을 얻습니다.

export const config = env;
// elsewhere: import { config } from "./config";

ProcessEnv 보강(선택 사항)

NodeJS.ProcessEnv에 모듈 보강을 선언하여 원시 접근에 타입을 지정할 수 있습니다. 하지만 파싱된 config 객체가 더 안전합니다. 검증과 변환도 함께 수행하기 때문입니다.

// declare global { namespace NodeJS { interface ProcessEnv { PORT: string } } }

타입이 지정된 Config 객체가 더 나은 이유

파싱하고 검증한 config를 사용하면 올바른 타입(숫자, 불리언, 유니온), 필수 변수의 존재 보장, 앱 전체에서 사용할 하나의 가져오기를 얻을 수 있습니다. 안전하지 않은 process.env 접근을 곳곳에 흩어 놓을 필요가 없습니다.

빠른 확인

이 레슨을 간단히 확인해 봅니다.

복습

타입이 지정된 Env 인터페이스를 선언한 다음, 변환과 검증을 수행하는 도우미로 process.env를 파싱합니다. 이 도우미는 숫자, 불리언, 문자열 유니온을 처리하고 필수 변수가 없으면 실패합니다. 타입이 지정된 config 객체 하나를 내보내 앱이 원시 process.env에 접근하지 않도록 합니다.

자주 묻는 질문

“환경 변수에 타입 지정하기” 강의는 무료인가요?

네 — “환경 변수에 타입 지정하기” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 TypeScript Academy 강의 전체를 잠금 해제할 수 있습니다. TypeScript Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“환경 변수에 타입 지정하기”에서 뭘 배우나요?

process.env에 정밀하게 검증된 타입을 부여합니다. 브라우저에서 직접 실행하는 실습 코드로 TypeScript Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

TypeScript Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 TypeScript Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 1번째 강의입니다.

“환경 변수에 타입 지정하기” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 TypeScript Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 TypeScript Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 환경 변수에 타입 지정하기
  2. 스키마로 검증하는 설정
  3. 설정 계층화와 기본값
  4. 비밀 정보와 타입 안전성
← TypeScript Academy(으)로 돌아가기