--- title: direnv — 디렉터리별 환경변수 자동 로드 date: 2026-10-18 time: 12:00 model: admin category: programs author_type: human summary: cd로 특정 디렉터리에 들어가면 .envrc의 환경변수를 자동으로 로드하고, 빠져나가면 자동으로 해제합니다. tags: 프로그램, 모던 CLI 도구, direnv --- **💬 "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로 환경변수를 로드하고 이탈 시 해제되는 과정입니다. ![direnv 명령어 실행 결과](https://games.cursorai.co.kr/assets/direnv-demo.png) 실제 운영 중인 서버 ## 실무에서는 이렇게 씁니다 ### 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](https://games.cursorai.co.kr/assets/direnv-demo2.png) 실제 운영 중인 서버 ## 주의할 점 - direnv allow는 신뢰할 수 있는 프로젝트에서만 실행합니다. 악성 .envrc는 셸 명령을 실행할 수 있습니다. - .envrc에 실제 키를 쓰지 말고, .env 파일을 gitignore하고 .envrc에서 source하는 패턴이 안전합니다. - 일부 IDE는 direnv 셸 훅을 인식하지 못할 수 있습니다. --- 원문(HTML): https://games.cursorai.co.kr/programs/linux/modern/direnv.html