direnv — 디렉터리별 환경변수 자동 로드
Linux / 모던 CLI 도구 / direnv.html
💬 "direnv 명령어"
direnv는 디렉터리별 환경변수 자동 로드 cd로 특정 디렉터리에 들어가면 .envrc의 환경변수를 자동으로 로드하고, 빠져나가면 자동으로 해제합니다.
디렉터리 진입 시 자동 로드, 이탈 시 자동 해제를 지원합니다. 프로젝트별 환경변수 격리가 가능합니다.
- 개념: 디렉터리 진입 시 자동 로드, 이탈 시 자동 해제를 지원합니다.
- 주요 기능: 프로젝트별 환경변수 격리가 가능합니다.
- 장점: bash·zsh·fish 등 대부분 셸을 지원합니다.
- 활용: dotenv 대비 셸 통합이 더 깊습니다.
설치 및 다운로드
direnv는 패키지 매니저 또는 공식 스크립트로 설치합니다.
| 환경 | 명령 |
|---|---|
| Ubuntu / Debian | sudo apt install direnv |
| macOS (brew) | brew install direnv |
| Rust cargo | cargo install direnv |
| 공식 바이너리 | github.com/direnv/direnv/releases |
| 확인 | direnv --version |
설치 확인은 direnv --version으로 합니다.
자주 쓰는 옵션
| 옵션 | 설명 |
|---|---|
direnv allow | 현재 .envrc를 신뢰 목록에 추가합니다 |
direnv deny | 현재 .envrc를 차단합니다 |
direnv reload | 현재 셸에서 .envrc를 다시 로드합니다 |
direnv status | 현재 상태와 로드된 변수를 확인합니다 |
direnv edit | EDITOR로 .envrc를 엽니다 |
필수 명령어 조합 3가지
echo 'export API_KEY=abc' > .envrc && direnv allow— 새 환경변수 등록direnv status— 현재 로드된 변수 확인direnv deny— 프로젝트 이탈 시 자동 해제 확인
💬 "실제 서버에서 direnv를 사용하는 예시를 보여줘"
실제 운영 중인 서버에서 자주 만나는 상황을 순서대로 정리했습니다.
1단계 · 셸 훅 설정
셸에 direnv 훅을 추가합니다.
echo 'eval "$(direnv hook bash)"' >> ~/.bashrc && source ~/.bashrc
2단계 · .envrc 생성
환경변수 파일을 만듭니다.
cd /var/www/api && echo 'export API_KEY=abc' > .envrc && direnv allow
3단계 · 동작 확인
디렉터리 이동 시 자동 로드·해제를 확인합니다.
cd /var/www/api && echo $API_KEY
실제 실행 화면
direnv로 환경변수를 로드하고 이탈 시 해제되는 과정입니다.

실제 운영 중인 서버
실무에서는 이렇게 씁니다
1. 프로젝트별 키 격리
상황 — 프로젝트별로 다른 DATABASE_URL을 씁니다.
echo 'export DATABASE_URL=postgres://localhost/mydb' > .envrc
direnv allow
결과 — cd 시 DATABASE_URL이 자동으로 로드됩니다.
포인트 — 키가 셸 히스토리나 다른 프로젝트에 새지 않습니다.
2. 팀 온보딩
상황 — 팀원이 새 클론에서 바로 쓸 수 있게 합니다.
cp .envrc.example .envrc && direnv allow
결과 — 한 줄로 온보딩이 완료됩니다.
포인트 — .envrc.example을 git에 커밋합니다.
실제 실행 화면
direnv status로 현재 상태를 확인한 결과입니다.

실제 운영 중인 서버
주의할 점
- direnv allow는 신뢰할 수 있는 프로젝트에서만 실행합니다. 악성 .envrc는 셸 명령을 실행할 수 있습니다.
- .envrc에 실제 키를 쓰지 말고, .env 파일을 gitignore하고 .envrc에서 source하는 패턴이 안전합니다.
- 일부 IDE는 direnv 셸 훅을 인식하지 못할 수 있습니다.