여러 SDK 버전을 선택할 수 있는 mise

개발 환경을 갖출 때 필수 과정이 언어의 SDK 를 설치하는 것이다. 보통 환경 구축 시점의 최신 버전을 설치하거나 프로젝트에서 필요한 버전을 선택해 설치한다. 이 때 시스템에 각기 다른 버전의 SDK 를 충돌 없이 변경해 가며 사용하고 싶을 수 있다. 이럴 때 mise 같은 도구를 사용한다.

설치

# 직접 설치
curl https://mise.run | sh

# brew 로 설치
brew install mise

그 외 환경의 설치는 https://mise.jdx.dev/installing-mise.html 를 참고한다.

활성화

설치를 마쳤으면 mise exec 명령어를 통해 프로그램을 실행할 수 도 있지만 쉘에 자동으로 mise 를 활성화 하는 것이 더 편하다. 쉘이 뜰 때마다 activate 를 하도록 쉘 시동 스크립트에 활성화 명령어를 추가한다. 사용하는 쉘 별로 입력해야 할 명령어와 파일이 다르다.

# 직접 설치했다면
echo 'eval "$(~/.local/bin/mise activate zsh)"' >> ~/.zshrc

# brew 로 설치 했다면, 그리고 bash 쉘을 사용한다면
echo 'eval "$(mise activate bash)"' >> ~/.bashrc

실행

다음과 같은 시나리오를 예를 들어 보자.

  • elixir_latest: 현재 개발 환경. elixir 최신 버전. (현 시점 1.18.4)
  • elixir_beta: 앞으로 출시될 버전의 베타 버전. (현 시점 1.19.0-rc.0)

첫번째 개발 환경 부터 만든다.

% mkdir elixir_latest
% cd elixir_latest
% mise use erlang elixir

mise 2025.8.12 by @jdx – install ✓ installed                                    mise ~/elixir_latest/mise.toml tools: erlang@28.0.2, elixir@1.18.4-otp-28

% elixir -v

Erlang/OTP 28 [erts-16.0.2] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1] [jit]

Elixir 1.18.4 (compiled with Erlang/OTP 28)

폴더를 만들고 mise use 명령어를 이용해 필요한 SDK 를 선택한다. 이 때 버전을 명시하지 않으면 latest 버전이 선택된다.

% cat mise.toml 

[tools]
elixir = "latest"
erlang = "latest"

mise use 명령어를 실행하면 mise.toml 파일이 만들어 지는데 이 파일이 mise 문맥을 결정하는 것으로 보인다.

또 다른 개발 환경을 만들자.

% mkdir elixir_beta
% cd elixir_beta
% mise use erlang elixir@1.19.0-rc.0

mise 2025.8.12 by @jdx – install ✓ installed                                    mise ~/elixir_beta/mise.toml tools: erlang@28.0.2, elixir@1.19.0-rc.0

% elixir -v

Erlang/OTP 28 [erts-16.0.2] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1] [jit]

Elixir 1.19.0-rc.0 (2a9a4f2) (compiled with Erlang/OTP 26)

% cat mise.toml 

[tools]
elixir = "1.19.0-rc.0"
erlang = "latest"

이 폴더에서 실행되는 elixir 버전은 1.19.0-rc.0 버전이고 mise.toml 에 버전이 명시되어 있음을 확인할 수 있다.


mise 를 사용하면 개발 환경 및 SDK 버전 관리를 쉽게 할 수 있을 것 같다. 본문의 예는 매우 기초적인 사례지만 https://mise.jdx.dev/ 홈페이지를 살펴보면 개발 환경 별 환경변수 관리, lockfile 을 사용한 버전 고정 등 개발 환경 버저닝을 위한 다양한 기능을 제공하고 있으니 한번 살펴보면 좋을 것 같다.

댓글 남기기