18P by neo 5달전 | favorite | 댓글 2개
  • 2013년 7월에 dotenv 첫 번째 커밋후 11년 동안 전 세계적으로 가장 많이 의존하는 패키지 중 하나로 성장
  • TypeScript, ESLint와 같은 필수 소프트웨어와 유사한 위치에 도달

dotenv의 문제점

  • .env 파일 유출 위험
  • 멀티 환경을 관리하기 어려움
  • 플랫폼 간 일관성 부족

문제 해결책: dotenvx

  • 모든 플랫폼에서 동일하게 작동
  • 멀티 환경 지원
  • 환경 변수 파일 암호화

어디서나 실행 가능

  • 모든 언어, 프레임워크, 플랫폼에서 동일하게 작동
  • dotenvx run -- your-cmd로 런타임에 환경 변수 주입 가능
  • .env 파싱 엔진, 변수 확장, 명령어 대체 등이 동일하게 작동
  • npm, brew, curl, docker, windows 등 다양한 방식으로 설치 가능
    $ 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 플래그를 사용하여 다중 환경 구성 가능
    $ 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 없이는 해독 불가능
  • 오픈 소스 프로젝트에서 이전 비밀을 해독하지 않고도 새로운 설정 추가 가능
    $ dotenvx encrypt  
    ✔ encrypted (.env)  
    

1.0.0 버전 릴리스

  • dotenvx 1.0.0 버전 릴리스 발표
  • 차세대 설정 관리 도구로 많은 개발자들이 활용할 수 있을 것

GN⁺의 의견

  • dotenvx는 보안과 편의성을 동시에 제공함
  • 여러 환경을 쉽게 관리할 수 있어 개발자에게 유용함
  • 암호화 기능은 보안에 민감한 프로젝트에 특히 유용함
  • dotenvx의 기능은 다양한 언어와 플랫폼에서 일관성을 제공하여 개발 효율성을 높임

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

Hacker News 의견
  • 환경 변수로 비밀 정보를 전달하지 않는 것이 좋음. 환경 변수는 쉽게 유출될 수 있음. 대신, 프로세스 내부에서 vault나 파일 시스템에서 비밀 정보를 읽는 것이 좋음.

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

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

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

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

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

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

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

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