English

direnv — 디렉터리별 환경변수 자동 로드

Linux / 모던 CLI 도구 / direnv.html

모던 CLI 도구원문등록 2026-10-18T22:00:00+09:00

💬 "direnv 명령어"

direnv는 디렉터리별 환경변수 자동 로드 cd로 특정 디렉터리에 들어가면 .envrc의 환경변수를 자동으로 로드하고, 빠져나가면 자동으로 해제합니다.

디렉터리 진입 시 자동 로드, 이탈 시 자동 해제를 지원합니다. 프로젝트별 환경변수 격리가 가능합니다.

  • 개념: 디렉터리 진입 시 자동 로드, 이탈 시 자동 해제를 지원합니다.
  • 주요 기능: 프로젝트별 환경변수 격리가 가능합니다.
  • 장점: bash·zsh·fish 등 대부분 셸을 지원합니다.
  • 활용: dotenv 대비 셸 통합이 더 깊습니다.

설치 및 다운로드

direnv는 패키지 매니저 또는 공식 스크립트로 설치합니다.

환경명령
Ubuntu / Debiansudo apt install direnv
macOS (brew)brew install direnv
Rust cargocargo install direnv
공식 바이너리github.com/direnv/direnv/releases
확인direnv --version

설치 확인은 direnv --version으로 합니다.

자주 쓰는 옵션

옵션설명
direnv allow현재 .envrc를 신뢰 목록에 추가합니다
direnv deny현재 .envrc를 차단합니다
direnv reload현재 셸에서 .envrc를 다시 로드합니다
direnv status현재 상태와 로드된 변수를 확인합니다
direnv editEDITOR로 .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로 환경변수를 로드하고 이탈 시 해제되는 과정입니다.

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 명령어 실행 결과 2

실제 운영 중인 서버

주의할 점

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