본문 바로가기
백엔드 개발

#050. 코프링: direnv로 로컬 환경변수 주입하기

by iamjoy 2023. 7. 18.

direnv란?

Direnv는 현재 디렉터리를 기반으로 환경 변수를 정의하고 로드할 수 있는 셸 확장 및 환경 변수 관리 툴이다. 보다 쉽게 프로젝트별로 환경 변수를 설정할 수 있다. .envrc 파일을 만들어서 환경변수를 정의하고 디렉터리로 이동하면 .envrc 파일에 정의된 변수가 자동으로 셸 환경으로 로드된다.

direnv 사용 장점:
- 프로젝트별 환경: 각 프로젝트마다 고유한 환경 변수를 가질 수 있어서 충돌 없이 프로젝트 간에 쉽게 전환할 수 있다.
- 보안: API 키와 같은 민감한 정보를 github에 올리지 않고 .envrc 파일에 저장할 수 있어 데이터를 보호할 수 있다.
- 자동화: Direnv는 스크립팅을 지원해 환경마다 그에 맞는 DB 마이그레이션이나 개발 서버 시작과 같은 작업을 자동화할 수 있다.

적용하기

적용방법은 아래 링크에 자세하게 나와있다. 여기에서는 springboot에 application.yaml로 정의된 환경 변수들을 .envrc로 옮겨 실행할 수 있도록 환경 설정을 하려고 한다.

direnv로 디렉토리(프로젝트) 별 개발환경 구축하기

direnv 설치: 위의 링크에서 나온대로 brew 로 direnv를 설치하고, ~/.zshrc를 수정했다.

환경설정을 하고 싶은 위치에 아래와 같이 .envrc 파일을 만들고 환경변수를 설정한다.

.envrc가 있는 위치에서 $direnv allow를 입력하면 아래와 같이 환경변수 값들이 loading 되는 것을 볼 수 있다

$env 를 입력해서 설정된 환경변수를 확인할 수 있다.

direnv는 디렉터리별로 환경변수가 설정되는 것이기 때문에 아래와 같이 디렉터리 위치를 이동시키면 환경변수가 unloading 되고, 다시 .envrc가 있는 곳으로 이동하면 환경변수가 loading 된다.

이 .envrc 파일은 중요한 환경변수 정보가 들어있으므로 github에 올리지 않도록 .gitignore 설정해줘야 한다.

이렇게 환경변수를 직접 하드 코딩하지 않고 서비스를 로컬에서 실행시킬 수 있다. 관련된 정보는 1password 또는 사내 공유 문서로 관리하면 된다.