디렉터리 경계에서 환경을 적용해
direnv는 디렉터리에 들어갈 때 승인한 .envrc를 셸 코드로 평가하고, 나갈 때 그 파일이 만든 환경 차이를 되돌려. 프로젝트가 선택한 런타임 관리자와 비밀이 아닌 설정을 연결하기에는 편하지만, 의존성 관리자나 비밀 저장소가 아니며 외부 부수 효과를 되돌려 주지도 않아.
셸 훅을 설치해
brew install direnv
echo 'eval "$(direnv hook zsh)"' >> ~/.zshrc
exec zsh
direnv status훅은 디렉터리가 바뀔 때마다 환경을 다시 계산해. direnv status로 현재 셸이 어느 파일과 승인 상태를 보고 있는지 확인해.
내용을 읽은 뒤 허용해
cat .envrc
git diff -- .envrc .gitignore
direnv allowallow는 알림을 닫는 버튼이 아니라, 검토한 셸 코드를 실행해도 된다는 승인이야. 브랜치를 바꾸거나 원격 변경을 받은 뒤, 또는 파일을 고친 뒤에는 diff를 다시 읽어. PATH_add 한 줄만 달라져도 이후 모든 명령이 고르는 실행 파일이 바뀔 수 있어.
연결 계약을 분명하게 남겨
PATH_add ./bin
source_env_if_exists .envrc.local
use mise
export APP_ENV=development공유 .envrc에는 검토한 비밀 아닌 프로젝트 설정을 둘 수 있어. 토큰과 비밀번호는 자격 증명 저장소나 git에서 제외하고 권한을 제한한 .envrc.local 같은 로컬 파일에 둬. 공유 계약은 커밋하고 로컬 비밀 파일은 무시해. 팀이 .envrc 전체를 로컬 전용으로 쓰기로 했다면 그 파일을 무시하고, 실제 비밀 대신 변수 이름과 검증 방법만 담은 .envrc.example을 커밋해.
되돌릴 수 있는 범위를 알아둬
direnv는 디렉터리를 나갈 때 셸 변수를 복원할 수 있어. 하지만 평가 중 만든 파일, 시작한 프로세스, 실행한 배포와 원격 상태 변경은 취소하지 못해. .envrc는 빠르고 반복 가능한 환경 설정에 집중하고, 상태를 바꾸는 작업은 별도 명령으로 분리해.
승인은 계속되는 검토 계약이야
허용한 뒤에도 direnv status, type -a, printenv로 실제 결과를 확인해. 필요 없어진 승인은 direnv deny로 거두고, 바뀐 내용을 다시 허용하기 전에는 새 diff를 검토해. 익숙한 저장소라는 사실이 새 변경에 대한 승인은 아니야.