Posted on:January 4, 2023 at 07:00 AM

Direnv와 .env 파일 사용하기

Direnv와 .env 파일 사용하기

Direnv를 사용한 환경 변수 관리

Direnv는 현재 디렉토리에 따라 환경 변수를 자동으로 로드하고 언로드할 수 있는 강력한 환경 전환 도구입니다. v2.31.0부터 도입된 .env 파일 관리 기능은 가장 유용한 기능 중 하나입니다.

Direnv를 사용하는 이유

  • 보안: 민감한 환경 변수를 코드베이스에서 분리
  • 프로젝트 격리: 각 프로젝트별로 독립된 환경 설정 가능
  • 자동화: 디렉토리 진입 시 자동으로 변수 로드
  • 버전 관리: .env.example 파일은 커밋하고 실제 .env 파일은 로컬에 유지

1. 설치 가이드

1.1 Mac 설치

# 1단계: homebrew로 설치
brew install direnv

# 설치 확인
direnv --version  # 2.32.1 이상이어야 함

# 2단계: 쉘에 추가 (~/.zshrc에 추가)
eval "$(direnv hook zsh)"

# 3단계: direnv 설정
mkdir -p ~/.config/direnv/
cat << EOF > ~/.config/direnv/direnv.toml
[global]
load_dotenv = true
EOF

1.2 Ubuntu 설치

⚠️ 주의: apt를 통한 설치는 피하세요 (.env 지원이 없는 구버전 2.21.2가 설치됨)

# 1단계: 공식 스크립트로 설치
curl -sfL https://direnv.net/install.sh | bash

# 2단계: 쉘에 추가 (~/.bashrc에 추가)
eval "$(direnv hook bash)"
export PATH=~/.local/bin:$PATH

# 3단계: direnv 설정
mkdir -p ~/.config/direnv/
cat << EOF > ~/.config/direnv/direnv.toml
[global]
load_dotenv = true
EOF

2. 사용법과 모범 사례

2.1 기본 사용법

  1. 프로젝트 루트에 .env 파일 생성:
# .env
FOO=BAR
DATABASE_URL=postgresql://localhost:5432/mydb
  1. 디렉토리로 cd 했을 때 다음과 같은 메시지가 표시됩니다:
direnv: error /path/to/your_project/.env is blocked. Run `direnv allow` to approve its content
  1. direnv allow 실행하여 변수 승인

2.2 모범 사례

  • 템플릿 변수 공유를 위한 .env.example 파일 생성
  • .gitignore.env 추가
  • README에 필요한 환경 변수 문서화
  • 구체적인 변수명 사용 (예: DB_HOST 대신 POSTGRES_HOST 사용)

2.3 문제 해결

일반적인 문제와 해결방법:

  • 변수가 로드되지 않음: 쉘 설정에 direnv hook이 있는지 확인
  • 권한 오류: .env 파일 권한 확인 (600이어야 함)
  • 변경사항이 반영되지 않음: .env 수정 후 direnv reload 실행

3. 보안 고려사항

  • .env 파일을 버전 관리에 절대 커밋하지 않기
  • 민감한 인증 정보 정기적으로 변경
  • 개발 환경과 운영 환경에 서로 다른 값 사용
  • 운영 환경에서는 시크릿 매니저 사용 고려

자세한 내용은 공식 direnv 문서를 참조하세요.