여러 런타임 버전을 프로젝트 선언으로 관리해
mise와 asdf는 Python, Node, Ruby 같은 여러 도구의 버전을 프로젝트 설정에 묶어 선택하게 해. 언어별 관리자를 무조건 없애는 도구라기보다 지원하는 런타임의 선택 과정을 한 흐름으로 모으는 선택지야. 저장소에 이미 Conda, pyenv, nvm처럼 명시된 소유자가 있다면 두 번째 관리자를 겹치기 전에 기존 CI와 배포 계약부터 확인해.
mise를 설치하고 셸에 연결해
brew install mise
echo 'eval "$(mise activate zsh)"' >> ~/.zshrc
exec zsh
mise doctor활성화 코드는 디렉터리에 따라 PATH를 바꿀 수 있어. 새 셸에서 type -a mise와 진단 출력을 보고 어느 설치본과 설정 파일이 선택됐는지 확인해.
프로젝트별 버전을 고정해
mise use python@3.12 node@20 ruby@3.3
cat .mise.toml
mise current.mise.toml을 저장소의 런타임 선언으로 쓸 수 있어. 팀원이 디렉터리에 들어왔을 때 같은 버전 선택 의도를 공유하지만 설정 파일만으로 시스템 라이브러리, 패키지 lockfile과 가상 환경까지 같아지는 것은 아니야. 설치와 선택 결과를 버전 명령으로 검증해.
전역 기본값은 프로젝트 선언보다 넓게 작용해
mise use -g python@3.12 node@22
mise list
mise upgrade전역 기본값은 별도 프로젝트 선언이 없는 디렉터리에서 사용돼. upgrade가 어느 고정 값을 바꾸는지 확인하지 않고 실행하면 여러 프로젝트의 실행 결과가 동시에 달라질 수 있어. 변경 전후의 설정 diff와 실제 버전을 기록해.
mise와 asdf의 차이는 운영 계약으로 판단해
mise는 단일 실행 파일, 빠른 활성화와 환경 변수 기능을 제공하고 많은 asdf 플러그인과 호환돼. [env] 선언으로 프로젝트 환경 변수를 관리하고, 별도의 direnv를 설치하지 않아도 디렉터리 진입과 이탈에 맞춰 환경을 바꾸는 hook을 사용할 수 있어. 이미 안정적으로 운영되는 asdf 구성이 있다면 단지 새 도구라는 이유로 바꿀 필요는 없어. 지원 플러그인, 신뢰 모델, CI 설치 방식과 장애 복구 절차를 비교해 선택해.
프로젝트의 기존 런타임 소유자를 존중해
Conda, mise, pyenv와 Homebrew가 동시에 PATH를 바꾸면 셸 시작 순서에 따라 다른 실행 파일이 선택될 수 있어. 저장소 문서, 환경 선언과 서비스 설정 가운데 어느 계층이 런타임을 소유하는지 한 곳으로 정해. 새 관리자를 시험할 때는 기존 구성을 지우지 말고 격리된 환경에서 type -a와 버전 출력을 비교해.
버전 고정은 재현성의 한 층일 뿐이야
같은 Python이나 Node 버전을 골라도 의존성 lockfile, 네이티브 라이브러리, 환경 변수와 운영체제가 다르면 결과가 달라질 수 있어. 런타임 선택, 패키지 설치, 시스템 의존성과 애플리케이션 설정을 서로 다른 선언으로 관리하고 각 층의 검증 방법을 남겨.
자동 활성화는 신뢰 검토가 필요한 코드 실행이야
디렉터리에 들어가는 순간 설정을 읽고 PATH와 환경 변수를 바꾸는 기능은 편하지만, 믿지 않는 저장소의 선언을 자동 승인하면 예상하지 못한 실행 파일이 선택될 수 있어. 신뢰 승인 절차에서 설정 diff를 읽고, 활성화 뒤 command -v와 버전 명령으로 실제 결과를 확인해. 디렉터리를 나갔을 때 원래 환경으로 돌아오는지도 시험해.