# dotenv 에서 dotenvx 로 - 차세대 Config 관리자

> Clean Markdown view of GeekNews topic #15535. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=15535](https://news.hada.io/topic?id=15535)
- GeekNews Markdown: [https://news.hada.io/topic/15535.md](https://news.hada.io/topic/15535.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2024-06-26T22:33:13+09:00
- Updated: 2024-06-26T22:33:13+09:00
- Original source: [dotenvx.com](https://dotenvx.com/blog/2024/06/24/dotenvx-next-generation-config-management.html)
- Points: 18
- Comments: 2

## Summary

`dotenvx`는 기존 `dotenv` 대비 보안과 편의성을 동시에 제공하며, 여러 환경을 쉽게 관리할 수 있어 개발자에게 유용합니다. 특히 환경 변수 파일 암호화 기능은 보안에 민감한 프로젝트에 큰 도움이 됩니다. 현재 dotenv를 사용중이시라면 변경을 고려해보세요.

## Topic Body

- 2013년 7월에 dotenv 첫 번째 커밋후 11년 동안 전 세계적으로 가장 많이 의존하는 패키지 중 하나로 성장  
- TypeScript, ESLint와 같은 필수 소프트웨어와 유사한 위치에 도달  
#### dotenv의 문제점  
- .env 파일 유출 위험  
- 멀티 환경을 관리하기 어려움  
- 플랫폼 간 일관성 부족  
  
#### 문제 해결책: dotenvx  
- 모든 플랫폼에서 동일하게 작동   
- 멀티 환경 지원  
- 환경 변수 파일 암호화  
  
#### 어디서나 실행 가능  
- 모든 언어, 프레임워크, 플랫폼에서 동일하게 작동  
- `dotenvx run -- your-cmd`로 런타임에 환경 변수 주입 가능  
- .env 파싱 엔진, 변수 확장, 명령어 대체 등이 동일하게 작동  
- npm, brew, curl, docker, windows 등 다양한 방식으로 설치 가능  
  ```bash  
  $ echo "HELLO=World" > .env  
  $ echo "console.log('Hello ' + process.env.HELLO)" > index.js  
  $ node index.js  # dotenvx 없이  
  Hello undefined  
  $ dotenvx run -- node index.js  # dotenvx 사용  
  Hello World  
  ```  
  
#### 다중 환경 지원  
- `.env.production` 파일 생성 후 `-f` 옵션으로 로드  
- 여러 `-f` 플래그를 사용하여 다중 환경 구성 가능  
  ```bash  
  $ echo "HELLO=production" > .env.production  
  $ dotenvx run -f .env.production -- node index.js  
  [dotenvx][info] loading env (1) from .env.production  
  Hello production  
  ```  
  
#### 암호화  
- `dotenvx encrypt` 명령어로 .env 파일에 암호화 추가  
- 공개 키 암호화 방식 사용  
- .env 파일이 유출되어도 `DOTENV_PRIVATE_KEY` 없이는 해독 불가능  
- 오픈 소스 프로젝트에서 이전 비밀을 해독하지 않고도 새로운 설정 추가 가능  
  ```bash  
  $ dotenvx encrypt  
  ✔ encrypted (.env)  
  ```  
  
#### 1.0.0 버전 릴리스  
- dotenvx 1.0.0 버전 릴리스 발표  
- 차세대 설정 관리 도구로 많은 개발자들이 활용할 수 있을 것  
  
---  
  
### GN⁺의 의견  
  
- `dotenvx`는 보안과 편의성을 동시에 제공함  
- 여러 환경을 쉽게 관리할 수 있어 개발자에게 유용함  
- 암호화 기능은 보안에 민감한 프로젝트에 특히 유용함  
- `dotenvx`의 기능은 다양한 언어와 플랫폼에서 일관성을 제공하여 개발 효율성을 높임

## Comments



### Comment 26996

- Author: yangeok
- Created: 2024-07-05T22:40:32+09:00
- Points: 1

프로그램 안에서 제품모드, 개발모드 안나누고, 실행 스크립트에서 바로 선언이 가능하군용

### Comment 26636

- Author: neo
- Created: 2024-06-26T22:33:14+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=40789353) 
- 환경 변수로 비밀 정보를 전달하지 않는 것이 좋음. 환경 변수는 쉽게 유출될 수 있음. 대신, 프로세스 내부에서 vault나 파일 시스템에서 비밀 정보를 읽는 것이 좋음.

- `.env` 파일을 사용하는 이유는 간단하고 명확하기 때문임. 더 안전하고 강력한 설정 방식을 사용하려면 문서를 읽어야 함.

- 작업에서 Mise를 사용하기 시작했음. 아직 많이 사용해보진 않았지만 유망해 보임. 로컬 테스트 DB 초기화, 린팅 스크립트 실행 등 작업을 처리하며, 환경 변수와 가상 환경도 관리함.

- 비밀 정보 유출이 큰 문제이므로, dotenvx를 사용할 때 비밀 정보를 암호화하는 것이 현명함. 암호화되지 않은 비밀 정보를 지원하지 않는 도구가 더 안전함.

- Sops와 비슷하지만 기본적으로 암호화된 기능이 없음. Sops는 AWS와 기존 키 관리 솔루션과 쉽게 통합되며, 5년 동안 두 개의 직장에서 사용해본 결과 매우 좋았음.

- 비밀 정보를 암호화하고 커밋하는 것이 편리하지만, 암호화 키에 접근하면 모든 비밀 정보가 노출될 수 있음. 클라우드 환경의 비밀 관리자에 설정하고 다시 만지지 않는 것이 더 안전함.

- 환경 변수는 과도하게 공유되고 파일은 로컬 권한에 의존함. 프로세스 간 비밀 정보를 전송하는 새로운 방법이 필요함. 예를 들어, Unix 소켓을 통해 한 번만 읽을 수 있는 방식으로 비밀 정보를 전달하는 것.

- .env 파일을 vault에 올바르게 넣는 방법에 대한 문서가 필요함. vault가 비밀번호로 보호된다면, 애플리케이션이 vault 비밀번호를 읽을 수 있도록 명확한 텍스트로 작성해야 하는 문제가 있음.

- 모든 환경 변수를 단일 파일에서 TOML 형식으로 관리하고 싶음. 이렇게 하면 업데이트, 비교, 공유가 쉬워짐. 하지만 환경 이름 일관성을 유지하는 것이 어려움. 이는 종종 빠른 결정이나 필요에 의해 발생하며, 수정하기 두려워함.
