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 기본 사용법
- 프로젝트 루트에
.env
파일 생성:
# .env
FOO=BAR
DATABASE_URL=postgresql://localhost:5432/mydb
- 디렉토리로
cd
했을 때 다음과 같은 메시지가 표시됩니다:
direnv: error /path/to/your_project/.env is blocked. Run `direnv allow` to approve its content
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 문서를 참조하세요.