본문 바로가기
기술의기록

.env 환경변수 관리 가이드 | AWS SSM부터 Vault까지

by Jeremy Winchester 2026. 2. 11.
반응형

💬 API 키가 또 GitHub에 올라갔다고요?

개발하다가 실수로 .env 파일을 GitHub에 푸시해본 경험, 한 번쯤은 있으시죠? 그 순간의 식은땀... 😰 데이터베이스 비밀번호, API 키, Secret Key 같은 민감한 정보들이 외부에 노출되는 순간, 보안 사고로 이어질 수 있습니다.

특히 팀 프로젝트나 운영 서비스에서 환경변수를 잘못 관리하면 개발 생산성도 떨어지고, 협업할 때마다 서로 환경변수 버전이 달라 "어? 나는 되는데?" 하는 상황이 발생하기도 하죠.

오늘은 .env 파일을 안전하고 효율적으로 관리하는 다양한 방법들을 소개해드릴게요. 기본 dotenv부터 AWS SSM, HashiCorp Vault, Doppler, Infisical까지 실무에서 많이 쓰이는 솔루션들을 하나씩 살펴보겠습니다! 🚀


📌 환경변수란? 왜 중요할까?

환경변수의 핵심 역할

환경변수(Environment Variable)는 키=값 형태로 저장되는 설정 정보입니다. 애플리케이션이 실행되는 환경(개발/테스트/운영)에 따라 다른 값을 사용해야 할 때 매우 유용하죠.

대표적인 환경변수 사용 사례:

  • 데이터베이스 접속 정보 (호스트, 포트, 계정, 비밀번호)
  • API 키 및 Secret Key
  • 서드파티 서비스 인증 정보
  • 서버 도메인 및 엔드포인트 URL
  • 암호화 키 및 토큰

.env 파일의 장점과 한계

장점:

  • 코드와 설정 분리로 보안 강화
  • 환경별로 다른 설정 쉽게 적용
  • .gitignore로 GitHub 노출 방지

한계:

  • 팀원 간 환경변수 동기화 어려움
  • 파일 유출 시 보안 위험
  • 버전 관리 및 이력 추적 불가
  • 여러 서비스 관리 시 복잡도 증가

이제 이런 문제들을 해결하는 다양한 방법들을 살펴볼까요? 💡


🔧 1단계: dotenv로 시작하기 (기본편)

Node.js에서 dotenv 사용하기

가장 기본적이면서도 많이 사용되는 방법입니다. dotenv 라이브러리를 사용하면 .env 파일의 환경변수를 손쉽게 불러올 수 있어요.

npm install dotenv

.env 파일 작성:

DB_HOST=localhost
DB_USER=myuser
DB_PASSWORD=secret123
API_KEY=abc123xyz

코드에서 사용:

import dotenv from 'dotenv';
dotenv.config();

console.log(process.env.DB_HOST); // localhost
console.log(process.env.API_KEY); // abc123xyz

환경별 파일 분리

프로젝트가 커지면 환경별로 파일을 나누는 것이 좋습니다:

.env                 # 공통 설정
.env.local          # 로컬 개발용 (Git 제외)
.env.development    # 개발 환경
.env.staging        # 스테이징 환경
.env.production     # 운영 환경

중요: .env 파일은 반드시 .gitignore에 추가하세요!

# .gitignore
.env
.env.local
.env.*.local

☁️ 2단계: AWS 클라우드 서비스 활용하기

AWS SSM Parameter Store - 가성비 최고 📊

AWS Systems Manager Parameter Store는 설정 데이터와 암호를 안전하게 저장하고 관리할 수 있는 서비스입니다. 무료 티어도 제공되어 가성비가 매우 좋아요!

주요 특징:

  • 무료 티어: 표준 파라미터 10,000개까지 무료
  • 계층형 구조: /dev/db/password 같은 경로로 체계적 관리
  • KMS 암호화: AWS KMS와 연동한 보안 강화
  • 버전 관리: 변경 이력 자동 추적
  • IAM 권한 관리: 세밀한 접근 제어

Parameter Store 사용 방법:

  1. AWS CLI로 파라미터 생성:
aws ssm put-parameter \
  --name "/production/db/password" \
  --value "mySecretPassword" \
  --type "SecureString"
  1. Node.js에서 불러오기:
import { SSMClient, GetParameterCommand } from "@aws-sdk/client-ssm";

const client = new SSMClient({ region: "ap-northeast-2" });

async function getParameter(name) {
  const command = new GetParameterCommand({
    Name: name,
    WithDecryption: true
  });
  
  const response = await client.send(command);
  return response.Parameter.Value;
}

const dbPassword = await getParameter("/production/db/password");

요금 정보:

  • Standard 파라미터: 무료
  • Advanced 파라미터: $0.05/개/월
  • API 호출: 표준 처리량까지 무료

AWS Secrets Manager - 고급 기능 제공 🔐

AWS Secrets Manager는 Parameter Store보다 더 많은 고급 기능을 제공합니다.

Parameter Store vs Secrets Manager 비교:

기능 Parameter Store Secrets Manager

가격 무료/저렴 $0.40/secret/월
저장 용량 4KB (Advanced: 8KB) 64KB
자동 로테이션 미지원 지원 ✅
RDS 통합 수동 자동 ✅
JSON 지원 제한적 완벽 지원 ✅

언제 Secrets Manager를 사용할까?

  • 데이터베이스 비밀번호 자동 로테이션 필요
  • 여러 환경변수를 JSON으로 한번에 관리
  • RDS, DocumentDB 등과 긴밀한 통합 필요
  • 규제 준수가 엄격한 프로젝트

실무 활용 팁: 많은 회사들이 하이브리드 방식을 사용합니다:

  • Secrets Manager: DB 비밀번호, API 키 등 고정 민감 정보
  • Parameter Store: 환경별 URL, 설정값 등 가변 정보

🏢 3단계: 오픈소스 & SaaS 솔루션

HashiCorp Vault - 엔터프라이즈급 보안 🛡️

HashiCorp Vault는 가장 강력한 오픈소스 비밀 관리 솔루션입니다.

핵심 기능:

  • 동적 시크릿: 요청마다 새로운 비밀번호 생성
  • 암호화 서비스: 데이터 암호화/복호화 API 제공
  • 다양한 인증: LDAP, OIDC, Kubernetes 등
  • 감사 로그: 모든 접근 기록 추적
  • 멀티 클라우드: AWS, GCP, Azure 모두 지원

사용 예시:

# Vault 시작 (개발 모드)
vault server -dev

# 시크릿 저장
vault kv put secret/myapp/config \
  db_password="supersecret" \
  api_key="abc123"

# 시크릿 읽기
vault kv get secret/myapp/config

장점:

  • 무료 오픈소스 (Enterprise는 유료)
  • 매우 강력한 보안 기능
  • 활발한 커뮤니티

단점:

  • 초기 설정이 복잡
  • 운영 및 관리 러닝커브
  • 고가용성 구성 필요

Doppler - 개발자 친화적 SaaS 💙

Doppler는 UI/UX가 뛰어난 상용 서비스입니다.

주요 특징:

  • 직관적인 웹 대시보드: 클릭 몇 번으로 환경변수 관리
  • 실시간 동기화: 변경사항 즉시 모든 환경에 반영
  • 다양한 통합: Vercel, GitHub Actions, Docker, Kubernetes
  • 팀 협업: 권한 관리, 변경 이력, 승인 워크플로우
  • CLI 제공: 로컬 개발 환경 지원

가격:

  • Free: 개인/소규모 프로젝트
  • Team: $7/사용자/월
  • Enterprise: 맞춤 가격

단점:

  • 완전 클로즈드 소스
  • 사용량 증가 시 비용 부담
  • 환경변수만 지원 (SDK 없음)

Infisical - 오픈소스 대안 🌟

Infisical은 Doppler의 오픈소스 대안으로 급성장 중입니다.

차별화 포인트:

  • 100% 오픈소스: 투명성 보장
  • 셀프 호스팅 가능: 완전한 데이터 통제
  • end-to-end 암호화: 클라이언트 측 암호화
  • 무료 플랜 관대: 소규모 팀에 유리
  • SDK 제공: Node.js, Python, Java 등

가격:

  • Free: 무제한 프로젝트
  • Pro: $9/월 (사용자별 아님!)
  • Enterprise: 맞춤 가격

실무 사용 예시:

# Infisical CLI 설치
npm install -g @infisical/cli

# 로그인
infisical login

# 시크릿 불러오기
infisical run --env=production -- npm start

🎯 4단계: dotenv-vault로 간편하게

dotenv-vault 소개

dotenv-vault는 기존 dotenv의 확장판으로, Git처럼 환경변수를 관리할 수 있습니다.

핵심 개념:

  • .env 파일 하나로 모든 환경 관리
  • git push/pull 느낌으로 환경변수 동기화
  • 암호화된 .env.vault 파일을 안전하게 공유
  • 환경변수 버전 관리 및 이력 추적

사용 방법:

# dotenv-vault 설치
npm install dotenv-vault-core

# 로그인 및 초기화
npx dotenv-vault login
npx dotenv-vault push

# 다른 팀원은 pull
npx dotenv-vault pull

장점:

  • 기존 dotenv 워크플로우 유지
  • 학습 곡선 거의 없음
  • 합리적인 가격
  • Vercel, Slack 연동

📊 솔루션 비교표: 어떤 걸 선택할까?

솔루션 가격 난이도 보안 협업 추천 대상

dotenv 무료 ⭐⭐ 개인 프로젝트
AWS SSM 무료/저렴 ⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐ AWS 사용 팀
AWS Secrets Manager 중간 ⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐ DB 로테이션 필요
HashiCorp Vault 무료/고가 ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐ 대기업, 보안 중시
Doppler $7~/월 ⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐⭐⭐ 스타트업, 빠른 성장
Infisical $9/월 ⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐⭐ 오픈소스 선호 팀
dotenv-vault 합리적 ⭐⭐⭐ ⭐⭐⭐⭐ 소규모 팀

💡 상황별 선택 가이드

🎓 1인 개발자 / 개인 프로젝트

추천: dotenv + .gitignore

  • 비용: 무료
  • 충분히 안전하고 간단함
  • 프로젝트가 커지면 나중에 마이그레이션

👥 소규모 팀 (3-10명)

추천: dotenv-vault 또는 Infisical (셀프 호스팅)

  • 비용: $0-50/월
  • 팀 협업 기능 필요
  • 환경변수 동기화 중요

🏢 중규모 스타트업 (10-50명)

추천: Doppler 또는 AWS SSM

  • 비용: $100-500/월
  • 다양한 서비스 통합 필요
  • 빠른 온보딩과 사용 편의성

🏦 대기업 / 엔터프라이즈

추천: HashiCorp Vault 또는 AWS Secrets Manager

  • 비용: 협상 가능
  • 최고 수준의 보안 요구
  • 규제 준수 필수
  • 멀티 클라우드 환경

☁️ AWS 올인 프로젝트

추천: AWS SSM + Secrets Manager 하이브리드

  • AWS 생태계 최적화
  • RDS, Lambda 등과 완벽 통합
  • 비용 효율적

✅ 환경변수 관리 보안 체크리스트

환경변수를 관리할 때 꼭 확인해야 할 사항들입니다:

필수 보안 수칙:

  • [ ] .env 파일을 .gitignore에 추가했나요?
  • [ ] GitHub에 이미 푸시된 .env는 없나요?
  • [ ] 민감한 정보는 암호화되어 저장되나요?
  • [ ] 팀원별로 접근 권한이 제한되나요?
  • [ ] 환경변수 변경 이력이 추적되나요?
  • [ ] 운영 환경 비밀번호는 정기적으로 로테이션하나요?
  • [ ] API 키가 코드에 하드코딩되어 있지 않나요?
  • [ ] 로그에 민감 정보가 출력되지 않나요?

협업 효율성 체크:

  • [ ] 신규 팀원 온보딩이 10분 내에 가능한가요?
  • [ ] 환경변수 업데이트 시 모든 팀원에게 알림되나요?
  • [ ] 여러 환경(dev/staging/prod) 전환이 쉬운가요?
  • [ ] 환경변수 문서화가 되어있나요?

🚀 마치며

환경변수 관리는 보안의 시작이자 협업 효율성의 핵심입니다.

처음에는 간단한 dotenv로 시작하더라도, 프로젝트가 성장하면서 AWS SSM, Doppler, Vault 같은 전문 솔루션으로 자연스럽게 진화하게 됩니다. 중요한 건 지금 당장 .env 파일을 GitHub에 올리지 않는 것부터 시작하는 거예요! 😊

여러분의 프로젝트 규모와 예산, 보안 요구사항을 고려해서 가장 적합한 솔루션을 선택하시길 바랍니다.

반응형