SHIN STORYSHIN STORY
홈포스트C#TypeScriptNext.jsNode.js시리즈
</>SHIN STORY

sdf

탐색

  • 홈
  • 모든 포스트
  • 시리즈
  • 검색

카테고리

  • C#
  • TypeScript
  • Next.js
  • Node.js
  • 알고리즘
  • 개발 도구

© 2025 Shin Blog. All rights reserved.

GitHubRSS
목록으로
Node.js#Node.js#Backend#Security

환경 변수 관리 — .env, dotenv, 그리고 검증

SHIN

2026년 4월 24일1분 읽기0
📚

Node.js 실전 팁 20선

20편
  1. 3Node.js Stream으로 대용량 파일 처리하기
  2. 4Worker Threads로 CPU 집약 작업 처리하기
  3. 5cluster 모듈로 멀티코어 CPU 100% 활용하기
  4. 6child_process로 외부 명령 실행하기
  5. 7fs/promises로 파일 시스템 다루기
  6. 20Node.js Event Loop 완전 정복
  7. 20Node.js path 모듈 완전 정복
  8. 환경 변수 관리 — .env, dotenv, 그리고 검증현재
  9. 20EventEmitter 패턴으로 느슨한 결합 구현하기
  10. 20Node.js crypto 모듈로 해싱과 암호화 구현하기
  11. 20Node.js 메모리 누수 찾고 수정하기
  12. 20Express 미들웨어 패턴과 에러 처리
  13. 20Node.js CJS vs ESM 모듈 시스템 완전 정리
  14. 20Node.js Buffer와 인코딩 완전 가이드
  15. 20PM2로 Node.js 프로세스 관리하기
  16. 20Node.js HTTP 서버 직접 구현하기
  17. 20Node.js 성능 프로파일링 실전 가이드
  18. 20Node.js npm 스크립트 완전 활용하기
  19. 20Node.js 보안 체크리스트 10가지
  20. 20Node.js 테스팅 전략 — 단위, 통합, E2E 테스트

환경 변수 관리 — .env, dotenv, 그리고 검증

환경 변수는 비밀 키, DB 연결 정보, 기능 플래그 등을 코드에서 분리하는 핵심 방법입니다.

dotenv 기본 설정

CODE
npm install dotenv
CODE
# .env (절대 git에 커밋하지 않음!)
DATABASE_URL=sqlite:./dev.db
JWT_SECRET=super-secret-key-change-in-production
PORT=3000
NODE_ENV=development
CODE
// 앱 진입점 최상단에서 한 번만 호출
import 'dotenv/config';
// 또는
require('dotenv').config();

console.log(process.env.PORT); // '3000'

Node.js 20.6+ 내장 --env-file

CODE
# dotenv 없이도 됩니다
node --env-file=.env app.js
node --env-file=.env --env-file=.env.local app.js

환경 변수 검증 (zod)

CODE
// config/env.ts
import { z } from 'zod';

const envSchema = z.object({
  NODE_ENV: z.enum(['development', 'test', 'production']),
  PORT: z.coerce.number().int().min(1).max(65535).default(3000),
  DATABASE_URL: z.string().url(),
  JWT_SECRET: z.string().min(32, 'JWT_SECRET은 최소 32자여야 합니다'),
  API_KEY: z.string().optional(),
});

export type Env = z.infer<typeof envSchema>;

const parsed = envSchema.safeParse(process.env);
if (!parsed.success) {
  console.error('환경 변수 오류:', parsed.error.format());
  process.exit(1);
}

export const env = parsed.data;

.env 파일 계층 구조

CODE
.env                 # 기본값 (git 커밋 가능, 비밀 없음)
.env.local           # 로컬 오버라이드 (git 제외)
.env.development     # 개발 환경
.env.production      # 프로덕션 환경
.env.test            # 테스트 환경
CODE
// 환경별 파일 로드
const env = process.env.NODE_ENV || 'development';
dotenv.config({ path: '.env' });
dotenv.config({ path: `.env.${env}`, override: true });
dotenv.config({ path: '.env.local', override: true });

.gitignore 설정

CODE
# 비밀 환경 변수 파일 제외
.env.local
.env.*.local
.env.production

타입 안전한 환경 변수 접근

CODE
// 검증된 env 객체만 사용
import { env } from '@/config/env';

const server = app.listen(env.PORT, () => {
  console.log(`서버 실행 중: http://localhost:${env.PORT}`);
});
// process.env.PORT 직접 접근 대신 env.PORT 사용

보안 규칙: 환경 변수는 절대 로그에 출력하지 말고, 비밀 파일은 항상 .gitignore에 추가하세요.

공유
S

SHIN

.NET 개발자입니다

GitHub
Node.js path 모듈 완전 정복

이전 포스트

Node.js path 모듈 완전 정복

다음 포스트

EventEmitter 패턴으로 느슨한 결합 구현하기

EventEmitter 패턴으로 느슨한 결합 구현하기

같은 카테고리 포스트

Node.js 테스팅 전략 — 단위, 통합, E2E 테스트

Node.js 테스팅 전략 — 단위, 통합, E2E 테스트

2026년 5월 6일· 2분
Node.js 보안 체크리스트 10가지

Node.js 보안 체크리스트 10가지

2026년 5월 5일· 2분
Node.js npm 스크립트 완전 활용하기

Node.js npm 스크립트 완전 활용하기

2026년 5월 4일· 1분

댓글