Devbox - 재현 가능한 개발 환경 치트시트
Devbox (Jetify)는 Docker나 가상 머신 없이 격리되고 재현 가능한 개발 환경을 만듭니다. Nix로 구동되지만 간단한 JSON 구성 (devbox.json)과 친숙한 CLI 뒤에 숨겨집니다 — Nix 유도를 작성하는 대신 devbox add nodejs@20을 실행합니다. 결과: 팀의 모든 사람 (및 CI)이 정확한 버전으로 고정된 동일한 도구 체인을 얻고, 호스트 시스템에서 격리됩니다.
설치
시작
| 명령어 | 설명 |
|---|
devbox init | 프로젝트에 devbox.json 생성 |
devbox add nodejs@20 python@3.12 | 패키지 추가 (고정된 버전) |
devbox rm python | 패키지 제거 |
devbox install | devbox.json의 모든 항목 설치 |
devbox shell | 격리된 환경에 입장 |
devbox run <script> | 환경 내 정의된 스크립트 실행 |
패키지 관리
| 명령어 | 설명 |
|---|
devbox add go@1.22 | 특정 버전 추가 |
devbox search postgresql | Nix 패키지 카탈로그 검색 |
devbox list | 설치된 패키지 나열 |
devbox update | 패키지를 허용된 최신으로 업데이트 |
devbox info nodejs | 패키지 세부정보 표시 |
버전은 Nixpkgs 카탈로그에 대해 해석되므로 nodejs@20은 어디서나 재현 가능합니다.
구성 (devbox.json)
{
"packages": ["nodejs@20", "python@3.12", "postgresql@16"],
"shell": {
"init_hook": ["echo 'Welcome to the project env'"],
"scripts": {
"dev": "npm run dev",
"test": "npm test",
"db": "pg_ctl start"
}
}
}
| 필드 | 목적 |
|---|
packages | 고정된 도구/언어 버전 |
shell.init_hook | 셸에 입장할 때 실행되는 명령어 |
shell.scripts | 이름 지정된 명령어 (devbox run dev) |
env | 프로젝트의 환경 변수 |
셸 및 스크립트
| 명령어 | 설명 |
|---|
devbox shell | 대화형 격리 셸 |
devbox run dev | dev 스크립트 실행 |
devbox run -- npm ci | 환경에서 임의의 명령어 실행 |
exit | Devbox 셸 떠나기 |
서비스 (프로세스 관리)
Devbox는 프로젝트를 위해 배경 서비스 (데이터베이스 등)를 관리할 수 있습니다.
| 명령어 | 설명 |
|---|
devbox services ls | 구성된 서비스 나열 |
devbox services up | 서비스 시작 |
devbox services stop | 서비스 중지 |
devbox add postgresql --start-services | 서비스 지원 패키지 추가 |
CI 및 컨테이너
| 사용 | 방식 |
|---|
| CI | Devbox 설치, devbox run test 실행 — 로컬과 동일한 환경 |
| Docker | devbox generate dockerfile은 재현 가능한 이미지 생성 |
| Devcontainer | VS Code용 devbox generate devcontainer |
| Direnv | cd에서 환경을 자동으로 입장하려면 devbox generate direnv |
일반적인 워크플로우
# 처음부터 재현 가능한 프로젝트 환경 구축
devbox init
devbox add nodejs@20 postgresql@16
devbox shell # 이제 node + postgres가 사용 가능하고 고정됨
# 로컬과 CI에서 동일한 방식으로 작업 실행
devbox run test
# 동일한 정의에서 Docker 이미지 생성
devbox generate dockerfile
Devbox vs 대체
| 측면 | Devbox | Dev Containers | Nix (원본) | mise |
|---|
| 백엔드 | Nix | Docker | Nix | 자체 레지스트리 |
| 구성 | JSON | devcontainer.json | Nix 언어 | .mise.toml |
| 격리 | 실제 (Nix 저장소) | 컨테이너 | 실제 | 도구 버전 |
| 학습 곡선 | 부드러움 | 중간 | 급격함 | 부드러움 |
| 최적 용도 | 재현 가능한 환경, 쉬움 | 컨테이너 기반 개발 | 전체 Nix 파워 | 버전 관리 |
기본 파워는 Nix를 참조하고, 컨테이너 기반 개발은 devcontainer를 참조하고, 도구 버전 관리는 mise를 참조하세요.
자료