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 또는 사내 공유 문서로 관리하면 된다.
'백엔드 개발' 카테고리의 다른 글
#052. 쿼리 개선: subquery가 원하는 인덱스를 타지 않는 경우 🚗 (1) | 2023.07.20 |
---|---|
#051. 자동화: cloudflare worker+ sentry + discord 웹훅으로 알림 시스템 (0) | 2023.07.19 |
#049. 코프링: 코틀린으로 커뮤니티 신고기능 구현하기 (0) | 2023.07.17 |
#048. 스프링: 스프링 빈 이해하기(DI, IOC, 등록과 주입) (0) | 2023.07.13 |
#047. 코프링: ktlint 적용하기 & pre-commit 룰 만들기 (0) | 2023.07.09 |