개발 환경 오케스트레이터 — dva.yml 하나로 Docker Compose, Kubernetes, Helm, 로컬 프로세스 등을 통합 관리.
제품 특성: DVA는 동작을 코드가 아니라 설정으로 정하는 개발환경 구성 도구입니다. 실행 방식은 dva.yml에서 자유롭게 선언하고, 어떤 조합을 띄울지는 named plan으로 고릅니다 — 기본 실행과 hot-reload 실행처럼 서로 다른 실행 방식은 각각 엔트리로 선언한 뒤 plan이 선택합니다. 무엇이 개발용이고 무엇이 배포용인지는 도구가 아니라 설정이 결정합니다.
DVA는 Go toolchain에서 직접 설치하거나 로컬 빌드로 사용합니다.
# From source
go install github.com/ScriptonBasestar/dva/cmd/dva@latest
# Or build locally
make build
./bin/dva version프로젝트 루트에 dva.yml 생성:
version: "0.1.44"
stack:
compose:
default_runner: compose
runners:
compose:
files:
- docker-compose.yml
interaction:
shell:
description: "Open shell in app container"
service: app
command: /bin/bash
test:
description: "Run tests"
service: app
command: bundle exec rspecdva ls # 사용 가능한 커맨드 목록
dva shell # = dva run shell → docker compose run app /bin/bash
dva test # = dva run test → docker compose run app bundle exec rspec
dva up # stack 전체 시작 (compose up -d --wait 등)
dva down # stack 전체 중지
dva validate # dva.yml 스키마 검증
dva manifest # LLM용 전체 커맨드 매니페스트 출력# Lifecycle — 동사는 전부 plan 기준입니다
dva up local-dev # named plan 시작
dva down local-dev # named plan teardown
dva stop local-dev # 컨테이너 유지한 채 정지
dva restart local-dev # 재시작
dva build local-dev # plan 엔트리 빌드
dva logs local-dev # plan 엔트리 로그
dva status local-dev # named plan 상태
dva up # plan 인자를 생략하면 stack 전체
# 파괴적 teardown (확인 프롬프트, --force로 생략)
dva down local-dev -v # 볼륨까지 제거
dva down local-dev --purge # 볼륨 + 이미지 + provision 마커까지 제거
# Escape hatch
dva compose ps # raw Docker Compose passthrough
# Interaction
dva ls # 사용 가능한 커맨드 목록
dva shell # = dva run shell (run 생략 가능)
# Utilities
dva status # 워크스페이스 상태 확인
dva show # 설정 요약
dva validate # dva.yml 스키마 + 시맨틱 검증 (`dva config validate`도 지원)
dva provision # 프로비저닝 실행
dva config docs # AI 에이전트 가이드(CLAUDE.md) 생성
dva doctor # 환경 사전조건 진단전체 커맨드 레퍼런스: USAGE.md
dva.yml은 재사용 가능한 실행 대상과 사용자가 호출하는 명령을 선언합니다.
stack: 섹션은 실행 가능한 엔트리를 선언합니다. 무엇을 어떤 순서로 실행할지는
plans:가 정합니다:
stack:
compose:
default_runner: compose
runners:
compose:
files: [docker-compose.yml]
project_name: myapp
kubectl:
namespace: myapp-dev
my-staging:
default_runner: compose
runners:
compose:
files: [docker-compose.staging.yml]엔트리에
order:를 직접 다는 legacy 형식은 plan 경로에서 읽히지 않습니다. 실행되는 것은plans.*.entries[].order이며,dva config migrate가 변환합니다.
지원 플러그인: compose, kubectl, helm, kustomize, tilt, skaffold, podman-compose, process, script, docker, vagrant, sam, serverless, multipass
앱 프로세스도 stack 엔트리입니다 — native 러너를 쓰는 엔트리 하나가 앱 하나입니다.
전용 섹션이나 전용 명령은 없습니다:
stack:
api:
description: "REST API server"
default_runner: native
runners:
native:
dir: services/api
build: "cargo build --release -p api-server"
run: "cargo run --release -p api-server"
env:
RUST_LOG: debug
health_checks:
api:
type: http
url: "http://localhost:11200/health"엔트리는
run명령 하나를 선언합니다. hot-reload처럼 실행 방식이 다르면 별도 엔트리(api-watch등)로 선언하고 plan이 고릅니다 — 어느 쪽이 개발용인지는 도구가 아니라 plan이 정합니다.--dev플래그는 없습니다.
plans: 섹션이 stack 엔트리·환경·site를 묶어 이름을 붙입니다. 모든 lifecycle 동사는
이 이름을 받습니다:
plans:
local-dev:
environment: dev
entries:
- name: compose
order: 10
- name: api
order: 20dva up local-dev
dva logs local-dev api # 엔트리 하나만
dva down local-dev --purge- Modes (
--mode/-M): 런타임 전략 선택 — compose profiles + 서비스 필터 + 환경변수 + stack 엔트리 필터 (dev 전용 도구이며 stg/prd 환경 개념은 없습니다) - Environments (
--env/-E): 환경변수 프리셋 + stack 엔트리 필터 - Tags (
--tags/-T): 태그 기반 서비스/엔트리 그룹 필터링 (--tag별칭 지원) - Health Checks: 비-compose 서비스 상태 확인 및 자동 시작
- Subprojects: 모노레포 서브프로젝트 참조 (
dva api:test) - Modules:
.sb/dva/*.yml파일로 설정 분리 - Override:
dva.override.yml로 로컬 오버라이드 (필드 레벨 deep merge)
상세 설정 가이드: USAGE.md
am run dva-discover # 프로젝트 분석 및 옵션 탐색
am run dva-improve # AI로 dva.yml 자동 생성/개선
am run dva-diagnose # 에러 분석 및 설정 자동 수정
dva config docs # AI 에이전트 가이드(CLAUDE.md) 생성
dva manifest # 구조화된 커맨드 매니페스트
dva config show -f yaml # 스키마 키를 보존한 병합 최종 설정 출력 (JSON도 지원)AI 스킬은 skills/에 단일 소스로 두고 make generate(→ tools/skillgen)로 각 플랫폼에 투영합니다.
claude-plugin/: Claude Code 플러그인 (claude --plugin-dir ./claude-plugin)- Antigravity:
.agents/skills/dva/SKILL.md - OpenCode:
.opencode/skills/dva/SKILL.md - Cursor:
.cursor/rules/dva.mdc - Codex:
AGENTS.md(자동 생성skills:auto섹션)
- PRODUCT.md — 제품 가치, 대상 사용자, 현재 범위
- SOUL.md — 변하지 않는 설계 철학
- ARCHITECTURE.md — 시스템 경계와 데이터 흐름
- USAGE.md — 명령과 설정 레퍼런스
make build # Build → ./bin/dva
make test # Run tests
make lint # Run linters
make fmt # Format code
make clean # Clean build artifactsMIT