업데이트됨

.env 파일을 Git에 커밋하지 않고 공유하는 방법

작성자

.env 파일을 공유하는 가장 안전한 방법은 암호화된 자기 파괴 링크를 사용하는 것이야 — Slack DM, 이메일, Git 커밋이 아니라. Vaulted 같은 도구는 브라우저에서 AES-256-GCM으로 환경 변수를 암호화한 다음 전송하고, 조회 후 링크가 자동으로 삭제돼.

GitGuardian의 2025 State of Secrets Sprawl 보고서에 따르면 2024년에 공개 GitHub 저장소에서 2,380만 개의 시크릿이 유출됐어 — 전년 대비 25% 증가한 수치야. 그리고 GitHub 자체 데이터에서도 2024년에 플랫폼 전체에서 3,900만 개의 시크릿이 감지됐다고 해. 이 중 많은 수가 실수로 커밋된 .env 파일 내용에서 비롯됐어.

.env 파일 공유의 문제점

환경 파일은 앱에 필요한 모든 시크릿을 한 곳에 집중시키기 때문에 특히 위험해: 데이터베이스 URL, API 키, 서명 시크릿, 서드파티 토큰. .env 파일 하나가 유출되면 애플리케이션이 연결된 모든 외부 서비스가 위험에 처할 수 있어.

팀에서 흔히 .env 파일을 공유하는 방법들 — 그리고 왜 문제가 되는지:

  • Slack/Discord DM — 검색 가능하고 백업되며, 직원 퇴사 후에도 남아 있음
  • 이메일 — 메일 서버에 평문으로 저장되고, 의도치 않게 전달되는 경우가 많음
  • Git 커밋 — 비공개 저장소라도 히스토리에 있는 시크릿은 완전히 제거하기가 거의 불가능함
  • 공유 드라이브 — 만료 없음, 접근 제어 없음, 감사 추적 없음
  • 1Password/Bitwarden 노트 — 양측 모두 같은 볼트에 계정이 있어야 함

더 나은 방법: 암호화된 자기 파괴 링크

파일 내용을 직접 보내는 대신, 먼저 암호화하고 조회 후 자동 삭제되는 링크를 공유해.

브라우저에서

  1. vaulted.fyi에 접속해
  2. .env 파일 내용을 붙여넣어
  3. 조회 제한(단일 수신자의 경우 1회 조회)과 만료 시간을 설정해
  4. 생성된 링크를 팀원에게 보내

내용은 무언가가 전송되기 전에 브라우저에서 AES-256-GCM으로 암호화돼. 복호화 키는 URL 프래그먼트에만 존재하고 — 서버는 평문을 절대 볼 수 없어.

터미널에서

커맨드라인을 선호한다면 Vaulted CLI로 동일하게 처리할 수 있어:

# Pipe directly from the file
cat .env.production | npx vaulted-cli --views 1

# Or pass the file path
npx vaulted-cli --file .env.local --views 1 --expires 1h

# Add a passphrase for extra security
cat .env | npx vaulted-cli -v 1 -e 24h -p "ask-me-on-call"

CLI는 웹 앱과 동일한 암호화를 사용해 — 동일한 알고리즘, 동일한 제로 지식 아키텍처, 동일한 자기 파괴 링크. 결과는 Slack이나 어디에든 붙여넣을 수 있는 단일 URL이고, 수신자가 조회하면 만료돼.

시크릿 매니저는 어떨까?

Doppler, Infisical, AWS Secrets Manager 같은 도구는 서비스가 시크릿을 프로그래밍 방식으로 읽는 프로덕션 환경에 적합해. 하지만 이 도구들은 다른 문제를 해결하는 거야 — 서비스가 자동으로 읽는 시크릿을 관리하는 것이지.

.env 공유 문제는 사람 간 인계에 관한 거야: 새 개발자 온보딩, 계약업체와 스테이징 설정 공유, 또는 로테이션 후 업데이트된 자격 증명 배포. 이 인계는 빠르고 안전하며 수신자 측에서 아무런 설정이 필요 없어야 해.

.env 파일 위생 모범 사례

  1. .env 파일을 절대 Git에 커밋하지 마 — 처음부터 .env*.gitignore에 추가해
  2. 공유 후 자격 증명을 교체해 — 모든 공유를 잠재적 노출로 취급해
  3. 조회 제한 링크를 사용해 — 수신자당 1회 조회, 짧은 만료 시간
  4. 프로덕션 설정에는 패스프레이즈를 추가해 — 패스프레이즈는 별도 채널로 공유해
  5. 어떤 변수가 필요한지 문서화해 — 저장소에 빈 값이 있는 .env.example을 유지해

환경 변수를 Slack에 붙여넣는 것을 그만해. Vaulted로 안전하게 공유해 — 브라우저나 터미널에서.


관련 항목