🗝️ Envilder ☁️
<p align="center">
<img src="https://github.com/user-attachments/assets/8a7188ef-9d8d-45fb-8c37-3af718fb5103" alt="Envilder">
</p>
<p align="center">
<b>로컬 개발, CI/CD, 런타임에 사용할 단 하나의 비밀(secret) 매핑 방식.</b><br> <code>envilder.json</code> 파일에 비밀을 한 번 정의하고, AWS SSM 또는 Azure Key Vault에서 일관되게 해결합니다.<br> <a href="https://envilder.com/?utm_source=github&utm_medium=readme&utm_campaign=root"><strong role="text">Website & docs → envilder.com</strong></a>
</p>
npm version
npm downloads
CI Tests
Overall Coverage
OpenSSF Best Practices
MIT License
Context7
CodeRabbit Pull Request Reviews
Envilder를 사용해야 하는 이유?
새 개발자가 팀에 합류했습니다. 이들은 앱을 로컬에서 실행하기 위해 환경 변수가 필요합니다.
그 다음에는 무슨 일이 벌어질까요? 누군가 슬랙(Slack)으로 API 키를 보냅니다. 또 다른 사람은 오래된 자격 증명이 담긴 위키 페이지를 뒤지게 됩니다. 45분 후, 그들의 .env 파일은 "아마도 맞을 것이다"라는 상태가 됩니다.
<b>Envilder는 단 하나의 버전 관리되는 매핑 계약으로 이 문제를 해결합니다.</b>
변수 이름과 클라우드 비밀 경로 간의 JSON 매핑을 생성합니다. Envilder는 이를 AWS SSM 또는 Azure Key Vault에서 해결합니다. 동일한 매핑 파일이 로컬 개발(CLI), CI/CD(GitHub Action), 그리고 애플리케이션 시작(런타임 SDK)에 모두 사용됩니다.
SaaS 중간 관리자는 없습니다. 단 하나의 버전 관리되는 매핑 계약만 있습니다. 비밀은 클라우드에 안전하게 보관됩니다.
문제점
- 온보딩에 몇 시간이 걸리지만, 몇 초가 필요하지 않습니다. 모든 신규 개발자는 어떤 비밀값(secrets)이 어디에 위치하는지 설명해 줄 사람이 필요합니다. 키들은 Slack으로 공유되거나, 위키에서 붙여넣기 되거나, 동료의 컴퓨터에서 복사됩니다. 이는 느리고 오류가 발생하기 쉬우며, 보안상 취약합니다.
- 모든 환경은 자체 워크플로우를 가지고 있습니다. 로컬 개발(Local dev)에서는
.env 파일을 읽습니다. CI/CD는 볼트 통합(vault integrations)을 사용합니다. 프로덕션(Production)은 자신만의 방식을 가집니다. 같은 앱이라도 세 가지 다른 비밀값 워크플로우가 존재합니다.
- 단일 매핑 계약이 없습니다. 클라우드 제공업체(cloud provider)가 비밀값의 진실 공급원(source of truth)일 수 있지만, 각 환경은 여전히 애플리케이션 변수가 해당 비밀값과 어떻게 매핑되는지 알아야 합니다. 버전 관리된 계약(versioned contract) 없이는 개발(dev), 스테이징(staging), 프로덕션 구성이 서로 어긋나게 됩니다.
.env 파일은 리포지토리의 모든 것에서 읽을 수 있습니다. .gitignore는 커밋에서 이를 제외할 뿐, 도달 불가능하게 만들지는 못합니다. 에디터, 인덱서, 설치 스크립트, 그리고 AI 코딩 에이전트 모두 작업 트리(working tree)에 놓인 평문 값들을 읽을 수 있습니다.
Envilder가 해결하는 방법
- 📋 모든 것을 위한 하나의 매핑 계약. 단일
envilder.json 파일은 앱이 어떤 비밀값을 필요로 하고 그것들이 어디에 존재하는지 정의합니다. Git으로 버전 관리되며, PR 검토(PR-reviewable)가 가능하고 환경 전반에서 재사용됩니다.
- ⚡ 코드가 실행되는 모든 곳에서 작동합니다. 로컬 개발용 CLI, CI/CD용 GitHub Action, 애플리케이션 시작을 위한 런타임 SDK를 지원합니다. 같은 파일로 동일한 결과를 얻습니다.
- 🚫 필요하지 않을 때는
.env 파일을 사용하지 않습니다. envilder exec은 어떤 언어로든 비밀값을 환경에 설정하여 명령을 시작하며, 디스크에 아무것도 쓰지 않습니다.
- 🔄 설정 드리프트 없이 비밀값 로테이션(Rotate secrets). AWS SSM이나 Azure Key Vault에서 실제 비밀값 값을 로테이션하면서도 애플리케이션에 노출되는 변수 이름은 안정적으로 유지할 수 있습니다. 생성된
.env 파일은 Envilder가 다시 실행될 때만 업데이트되며, 런타임 소비자(runtime consumers)는 재시작하거나 다시 해결해야 합니다.
- 🛡️ 클라우드는 그대로 두고 인프라는 제로. 비밀값은 AWS SSM이나 Azure Key Vault에 머무릅니다. SaaS 프록시나 추가 서버가 필요 없습니다. 매핑 계약은 일관성을 유지하며, 제공업체 자격 증명(provider credentials) 및 비밀값 마이그레이션은 여전히 제공업체별 특성을 가집니다.
⚙️ 기능
| 기능 | 설명 |
|---|
| 📋 선언적 매핑(Declarative Mapping) | 하나의 JSON 파일로 애플리케이션 변수가 클라우드 시크릿에 어떻게 매핑되는지 정의합니다. Git 버전 관리, PR 검토 및 diff 비교가 가능합니다. |
| ... | |
🚀 빠른 시작
1. npx로 실행하기
또는 전역으로 설치하기:
필수 조건: Node.js v22.12 이상. AWS SSM 또는 Azure Key Vault 중 하나에 대한 자격 증명(credentials) 및 읽기 액세스 설정을 구성해야 합니다.
전체 필수 조건을 참조하세요.
2. 매핑 파일 생성 (envilder.json)
{
"$schema": "https://envilder.com/schema/map-file.v1.json",
"DB_PASSWORD": "/my-app/db/password",
...
3. .env 파일 생성하기
이것으로 끝입니다. 현재 디렉터리에 envilder.json이 있으면 플래그가 필요 없습니다. --map은 기본적으로 envilder.json을 사용하고, --envfile은 기본적으로 .env를 사용합니다. 시크릿은 AWS SSM에서 가져와 .env에 작성됩니다.
.gitignore 파일에 .env를 추가하세요. 매핑 파일은 버전 관리되며 PR에서 검토가 가능합니다.
💡 Azure Key Vault를 사용하는 경우? 매핑 파일에 $config 섹션을 추가하세요.
아래 매핑 파일 형식을 참조하세요.
4. 또는 .env 파일을 아예 건너뛰기
npx envilder exec -- npm run dev
envilder exec은 동일한 매핑을 해석하여 시크릿을 환경 변수로 설정하고 명령어를 시작합니다.
디스크에 아무것도 기록되지 않습니다. Envilder 옵션은 명령어 앞(또는 선택적 -- 앞)에 위치해야 하며, 그 이후의 모든 내용은 사용자의 명령어에 속합니다. 실행 모드는 실패 폐쇄형(fail-closed)입니다: 시크릿 중 하나라도 누락되면 명령어가 시작되지 않습니다.
샌드박스(sandbox)가 아닙니다: 사용자의 명령어와 그것이 시작하는 모든 것이 시크릿을 읽을 수 있습니다.
📖 종료 코드, 신호(signals), GitHub Actions 마스킹에 대한 내용은 Exec Command Guide를 참조하세요.
💡 실행 가능한 예시: envilder-examples (Python 및 TypeScript용 Testcontainers와 Aspire, AWS SSM 및 Azure Key Vault, 그리고 envilder exec 포함).
🎥 사용 사례 확인
1분도 안 되어 .env 관리를 자동화하는 것이 얼마나 쉬운지 확인해 보세요:
Watch the video
🗺️ 매핑 파일 형식
매핑 파일(envilder.json)은 Envilder의 핵심입니다. 이 파일은 앱이 어떤 비밀 정보(secrets)를 필요로 하고, 그것들이 클라우드 제공업체의 어디에 존재하는지를 정의하는 단일 모델 역할을 합니다. 동일한 파일을 CLI, GitHub Action, 런타임 SDK에서 사용합니다. 선택적으로 $config 섹션을 포함하여 사용할 제공업체와 설정을 선언할 수 있습니다.
IDE 자동 완성(autocomplete), 인라인 문서화 및 매핑 파일에 대한 유효성 검사를 활성화하려면 "$schema"를 추가하세요. 스키마는 다음에서 게시되었습니다:
envilder.com/schema/map-file.v1.json.
기본 형식 (AWS SSM, 기본값)
$config가 없을 경우, Envilder는 AWS SSM Parameter Store를 기본값으로 사용합니다:
{
"$schema": "https://envilder.com/schema/map-file.v1.json",
"API_KEY": "/myapp/prod/api-key",
...
}
값은 SSM 파라미터 경로입니다 (예: /myapp/prod/api-key).
$config 사용 시 (명시적 제공업체)
제공업체와 그 설정을 선언하기 위해 $config 키를 추가하세요. Envilder는 구성에 대해 $config를 읽고, 나머지 모든 키를 비밀 정보 매핑으로 사용합니다:
AWS SSM과 프로필:
{
"$schema": "https://envilder.com/schema/map-file.v1.json",
"$config": {
...
}
Azure Key Vault:
{
"$schema": "https://envilder.com/schema/map-file.v1.json",
"$config": {
...
}
Azure 명명 규칙: Key Vault 비밀 이름은 영숫자 문자(alphanumeric characters)와 하이픈(-)만 허용합니다.
Envilder는 이름을 자동으로 정규화합니다: 슬래시(/)와 언더스코어(_)는 하이픈(-)으로 변환됩니다 (예: /myapp/db/password → myapp-db-password).
$config 옵션
| Key | Type | Default | Description |
|---|
provider | ` | | |
이는 $config에서 기본 제공업체를 설정하고 호출별로 재정의할 수 있음을 의미합니다:
🧩 런타임 SDK (Runtime SDKs)
CLI와 GitHub Action 외에도, Envilder는 런타임 SDK를 제공하여 시동(startup) 시점에 비밀 정보(secrets)를 애플리케이션 메모리로 직접 해결합니다. 디스크에 .env 파일을 작성하지 않으며, 비밀 정보가 남아있지 않습니다. SDK는 CLI와 동일한 맵 파일 형식을 사용합니다.
.NET SDK
NuGet을 통해 설치합니다:
dotnet add package Envilder
IConfiguration에 비밀 정보를 로드하거나 프로세스 환경(process environment)에 주입할 수 있습니다:
var config = new ConfigurationBuilder()
.AddEnvilder("envilder.json")
...
📖 전체 .NET SDK 문서 · 💡 예시: Testcontainers · Aspire
Python SDK
uv (권장) 또는 pip을 통해 설치합니다:
uv add envilder
pip install envilder
단 한 줄로 애플리케이션에 비밀 정보를 로드합니다:
from envilder import Envilder
...
또는 환경별로 라우팅하여, 각 환경이 자체 맵 파일을 참조하도록 할 수 있습니다:
from envilder import Envilder
Envilder.load('production', {
...
📖 전체 Python SDK 문서 · 💡 예시: Testcontainers
Node.js SDK
npm을 통해 설치합니다:
npm install @envilder/sdk
단 한 줄로 애플리케이션에 비밀 정보를 로드합니다:
import { Envilder } from '@envilder/sdk';
...
또는 유려한 빌더(fluent builder)를 사용하여 전체 제어권을 가집니다:
import { Envilder, SecretProviderType } from '@envilder/sdk';
const secrets = await Envilder.fromMapFile('envilder.json')
...
📖 전체 Node.js SDK 문서 · 💡 예제: Testcontainers · Aspire
🤖 GitHub Action
게시된 macalbert/envilder/github-action@v0 태그를 직접 참조하세요. 이 액션에는 미리 빌드된 기능이 포함되어 있어, 사용자가 Envilder 빌드 단계를 별도로 수행할 필요가 없습니다.
AWS SSM (기본값):
- name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@v5
with:
...
Azure Key Vault:
- name: Azure Login
uses: azure/login@v2
with:
...
📖 전체 GitHub Action 문서
📚 더 많은 자료
🛠️ 작동 방식