woongsnote

Volta에서 mise로 전환하기

Volta의 유지보수 중단과 공식 mise 전환 권고를 계기로 Node.js 개발 환경을 이전한 과정과 시행착오를 정리했다.

12분 읽기
목차

개요

개인 프로젝트에서 Node.js 버전을 관리하기 위해 오랫동안 Volta를 사용해 왔다.

프로젝트별 Node.js 버전 관리가 편리했고, 사용하는 동안 특별히 불편한 점도 없었다.

그러던 중 Volta가 더 이상 유지보수되지 않으며, 유지보수 팀에서 mise로의 전환을 권장한다는 소식을 접했다.

당장 Volta를 사용할 수 없는 것은 아니지만, 앞으로 새로운 Node.js 버전이나 운영체제 변경에 대응하기 어려울 수 있다는 점이 신경 쓰였다.

마침 Node.js 26이 LTS로 전환되면서 개발 환경을 정리하기 좋은 시점이라고 판단했다.

이번 글에서는 Volta에서 mise로 전환하게 된 배경과 Windows 환경에서의 설치 과정, Node.js 26 적용 및 프로젝트 설정 변경을 정리한다.

Volta에서 mise로 전환한 이유

Volta의 유지보수 중단

2025년 11월 14일, Volta GitHub 저장소에 Volta is unmaintained; we recommend migrating to mise라는 Issue가 등록됐다.

Volta 유지보수 담당자는 대부분의 팀원이 이미 mise를 사용하고 있으며, Volta 사용자에게 mise로의 전환을 권장한다고 밝혔다.

이후 공식 README에도 다음 내용이 안내됐다.

  • Volta는 더 이상 유지보수되지 않는다.
  • 현재 정상적으로 작동한다면 즉시 전환할 필요는 없다.
  • 향후 운영체제나 개발 생태계의 변화로 발생하는 문제에 대응하기 어렵다.
  • 대체 도구로 mise를 권장한다.

즉, Volta가 갑자기 작동하지 않게 되는 것은 아니지만 장기적으로 다른 도구를 검토할 필요가 생긴 것이다.

개인 프로젝트를 계속 관리할 예정이므로 문제가 발생한 뒤 전환하기보다는 미리 개발 환경을 정리하는 편이 낫다고 판단했다.

왜 mise인가?

Node.js 버전 관리 도구에는 nvm, fnm, mise 등 여러 선택지가 있다.

Node.js만 관리한다면 fnm 같은 경량 도구도 충분한 대안이 될 수 있다.

하지만 이번에는 Volta 유지보수 팀이 직접 mise를 권장했다는 점이 가장 큰 선택 이유였다.

mise는 기존 Volta와 마찬가지로 프로젝트별 Node.js 버전 관리가 가능하며, 추가로 여러 개발 도구와 환경 설정까지 관리할 수 있다.

구분 Volta mise
Node.js 버전 관리 지원 지원
프로젝트별 버전 설정 package.json mise.toml
다양한 개발 도구 관리 JavaScript 중심 여러 언어 및 개발 도구
유지보수 현황 유지보수 중단 유지보수 진행
이번 선택 기존 사용 도구 전환 대상

Volta 자체에 불만이 있었던 것은 아니다.

기존의 사용 경험을 유지하면서 앞으로도 관리할 수 있는 도구로 이전하는 것이 이번 전환의 가장 큰 목적이었다.

mise 설치 및 설정

Windows에서 mise 설치

Windows에서는 winget을 이용해 mise를 설치할 수 있다.

mise 설치
winget install jdx.mise

설치 후 정상적으로 실행되는지 확인한다.

설치 확인
mise --version
mise doctor

PowerShell 활성화

프로젝트 디렉터리에서 설정된 Node.js 버전이 자동으로 적용되도록 PowerShell 프로필에 mise 활성화 명령을 등록한다.

PowerShell 프로필
(&mise activate pwsh) | Out-String | Invoke-Expression

프로필 수정 후 터미널을 다시 실행하면 된다.

mise doctor를 이용하면 활성화 상태와 실행 경로 등을 확인할 수 있다.

자동 업데이트 관련 시행착오

설치 과정에서 한 가지 문제가 있었다.

mise에서 자체 업데이트를 권장하는 안내가 표시돼 self-update를 실행했는데, 실행 파일의 버전과 winget에 등록된 버전이 서로 달랐다.

당시 확인한 버전은 다음과 같았다.

항목 버전
실제 실행되는 mise 2026.10.25
winget 설치 기록 2026.10.12

원인은 업데이트 관리 방식의 차이였다.

winget으로 설치한 프로그램은 winget으로 업데이트해야 하는데, mise 자체 업데이트 명령을 사용하면서 설치 기록과 실행 파일의 버전이 달라진 것이다.

나는 mise의 자체 자동 업데이트 기능을 사용하고 싶었기 때문에 winget 설치를 제거하고 공식 PowerShell 설치 방식으로 변경했다.

공식 설치
irm https://mise.run/powershell | iex

이후 자동 업데이트를 활성화했다.

자동 업데이트 설정
mise settings self_update.auto=true

이 설정은 mise 자체를 자동으로 업데이트하기 위한 것이다.

Node.js나 프로젝트 의존성을 자동으로 업그레이드하는 기능과는 구분된다.

이번 과정에서 설치 도구와 업데이트 도구를 혼용하지 않는 것이 중요하다는 점을 알게 됐다.

Node.js 26 LTS 적용

mise 전환과 함께 블로그에서 사용하던 Node.js 24를 26으로 업그레이드했다.

Node.js 26은 2026년 10월 28일 ’Lithium’이라는 코드명으로 LTS에 진입했다.

실제로 적용한 버전은 v26.13.0이다.

프로젝트 루트에서 다음 명령을 실행했다.

Node.js 26 적용
mise use node@26
node --version

프로젝트에는 mise.toml 파일이 생성된다.

mise.toml
[tools]
node = "26"

이 파일을 Git 저장소에 포함하면 프로젝트에서 사용하는 Node.js 버전을 함께 관리할 수 있다.

다른 개발 환경에서는 다음 명령으로 필요한 버전을 설치하면 된다.

프로젝트 환경 설치
mise install

참고로 node = "26"은 Node.js 26 계열을 지정하는 설정이다. 정확한 패치 버전을 고정하는 것은 아니므로 설치 시점에 따라 버전이 달라질 수 있다.

기존 프로젝트 설정 변경

package.json

기존 Volta 설정은 다음과 같았다.

기존 설정
{
  "engines": {
    "node": "24.x"
  },
  "volta": {
    "node": "24.19.0"
  }
}

mise 적용 후에는 Volta 설정을 제거하고 Node.js 엔진 버전만 변경했다.

변경 후
{
  "engines": {
    "node": "26.x"
  }
}

Node.js 버전 선택은 mise.toml에서 관리하고, engines는 프로젝트에서 요구하는 Node.js 버전 범위를 선언하도록 구분했다.

잠금 파일도 새로운 설정에 맞게 동기화했다.

잠금 파일 동기화
npm install --package-lock-only

GitHub Actions

로컬 환경만 변경하면 CI에서는 기존 Node.js 버전을 계속 사용할 수 있다.

따라서 GitHub Actions에서도 Node.js 26을 사용하도록 수정했다.

.github/workflows/validate.yml
- uses: actions/setup-node@v4
  with:
    node-version: 26
    cache: npm

이제 로컬과 CI에서 Node.js 26을 기준으로 검증할 수 있다.

README

README의 개발 환경 설치 안내에도 mise를 반영했다.

Local Development
git clone https://github.com/woongsnote/woongsnote-dev.git
cd woongsnote-dev

mise install
npm install
npm run dev

기존 npm 기반 개발 방식은 그대로 유지하고 Node.js 버전을 준비하는 단계만 추가했다.

빌드 및 배포 검증

개발 도구와 Node.js 버전을 변경한 뒤에는 기존 블로그가 정상적으로 작동하는지 확인했다.

의존성 설치
npm ci
npx playwright-core install chromium
프로젝트 검증
npm run validate

Woongsnote의 검증 스크립트는 다음 항목을 확인한다.

  1. 코드 포맷
  2. 콘텐츠 검사
  3. Astro 빌드
  4. 빌드 결과 검사
  5. 브라우저 테스트

GitHub Actions에서 검증이 통과하는 것을 확인하고, Vercel 배포 결과도 확인했다.

이번 작업은 Node.js 개발 환경 전환에 집중했으며 블로그 기능 자체는 변경하지 않았다.

마무리

이번 마이그레이션의 시작은 Volta의 유지보수 중단 소식이었다.

Volta는 지금도 사용할 수 있지만, 유지보수 팀이 공식적으로 mise로의 전환을 권장하는 상황에서 기존 환경을 계속 유지할 이유는 크지 않다고 판단했다.

Node.js 26 LTS 전환 시점과 맞물려 개발 환경을 정리했고, mise를 이용해 프로젝트별 버전을 관리하도록 변경했다.

설치 과정에서는 winget과 mise 자체 업데이트를 혼용하면서 잠깐 시행착오도 있었지만, 최종적으로 설치 방식과 버전 관리 기준을 통일할 수 있었다.

앞으로도 새로운 도구를 무조건 도입하기보다는 유지보수 상태와 실제 필요성을 기준으로 개발 환경을 관리하려고 한다.

이번 개발 환경 전환과 함께 Git 브랜치 전략도 정리했다. 기존 main과 dev 브랜치를 통합한 과정은 별도의 글에서 다룰 예정이다.


참고 자료