포스트

asdf - 다중 런타임 버전 관리자

asdf - 다중 런타임 버전 관리자

asdf란?

여러 버전을 다루다보면 항상 버전 관리 문제가 발생한다.

보통 이런 문제를 해결하기 위해 sdkman, nvm, pyenv 등의 버전 관리자를 사용하지만, 이런 도구들은 각각의 언어에 대한 버전 관리만 가능하며, 각 툴마다 사용법이 달라서 사용하기 불편하다.

이런 문제를 해결하기 위해 asdf가 등장했다.

asdf는 도구 버전 관리자로 여러 언어(Java, Node.js, Ruby, Python, Golang 등등)의 버전을 관리할 수 있다. asdf는 다른 버전 관리자와 달리 여러 언어를 한 번에 관리할 수 있어 편리하다.

asdf 설치

asdf는 여러 방법으로 설치될 수 있는데, Macos에서 Homebrew로 설치하는 방법밖에 해보지 않았으니 그 외의 방법은 공식 문서를 참고하자.

asdf 설치 문서 : https://asdf-vm.com/guide/getting-started.html#_1-install-asdf

Homebrew로 설치

1
brew install asdf

설치가 완료되면 .zshrc에 다음과 같이 추가해준다.

1
. "$(brew --prefix asdf)/libexec/asdf.sh"

asdf을 사용하여 버전 관리하기

asdf로 특정 언어의 버전을 관리하는 순서는 다음과 같다

  1. 원하는 언어의 플러그인을 설치
  2. 플러그인을 통해 원하는 언어의 버전을 설치
  3. 특정 버전을 사용하도록 설정

1. 원하는 언어의 플러그인을 설치`

플러그인을 설치하기 전에 어떤 플러그인이 있는지 확인해보자.

1
asdf plugin list all

위 명령어를 수행 시 아주 많은 플러그인들이 나올 것이다. 원하는 플러그인을 설치하는 명령어는 다음과 같다.

1
asdf plugin add <name>

2. 플러그인을 통해 원하는 언어의 버전을 설치

플러그인이 설치가 되었다면, 이제 플러그인을 통해 원하는 언어의 버전을 설치할 수 있다.

먼저 어떤 버전이 있는지 확인해보는 명령어는 다음과 같다

1
asdf list all <name>

역시나 많은 버전이 나올 것이다. 원하는 버전을 설치하는 명령어는 다음과 같다.

1
asdf install <name> <version>

3. 특정 버전을 사용하도록 설정

이제 설치는 완료되었다. 하지만 바로 사용할 수는 없다. 사용하고자 하는 버전을 설정해주어야 한다.

1
asdf set <name> <version>

위 명령어를 수행하면 asdf는 현재 디렉토리에 .tool-versions 파일을 생성하고, 해당 파일에 사용하고자 하는 버전을 기록한다.

그러면 현재 디렉토리에서 asdf가 사용하고자 하는 버전을 사용하게 된다.

만약 현재 디렉토리에 .tool-versions 파일이 없다면, 상위 디렉토리로 올라가서 다시 .tool-versions 파일을 찾는다. 이렇게 상위 디렉토리로 올라가면서 .tool-versions 파일을 찾아가는 방식을 사용하기 때문에, 프로젝트마다 다른 버전을 사용할 수 있다.

따라서 전역적으로 사용하고자 한다면 일반적으로 홈 디렉토리에 .tool-versions 파일을 생성하고 사용하고자 하는 버전을 기록하면 된다.

홈 디렉토리에 .tool-versions 파일을 생성하고 사용하고자 하는 버전을 기록하는 방법은 다음과 같다.

홈 디렉토리에서 asdf set <name> <version> 명령어를 수행해도 되지만, -u 옵션을 통해 홈 디렉토리에 .tool-versions 파일을 생성할 수 있다.

1
asdf set -u <name> <version>

위 명령어 사용 시 원하는 버전을 기록한 .tool-versions 파일이 홈 디렉토리에 생성 및 기록된다.

예시

asdf를 사용하여 Java를 설치하고 사용하는 예시를 보자.

1. Java 플러그인 설치

1
asdf plugin add java

2. Java 버전 확인 및 설치

버전 확인

1
asdf list all java

zulu-21.40.17 버전을 설치해보자

버전 설치

1
asdf install java zulu-21.40.17

3. Java 버전 사용

1
asdf set -u java zulu-21.40.17

위 과정까지 거쳤다면 java 명령어를 사용할 때 zulu-21.40.17 버전을 사용하게 된다.

자주 사용될 명령어 정리

1
2
3
4
5
6
7
8
9
10
11
12
asdf
├── plugin
│   ├── add <name> : 플러그인 추가
│   ├── list all : 모든 플러그인 리스트 확인
│   └── remove <name> : 플러그인 삭제
├── list all <name> : 플러그인의 모든 버전 리스트 확인
├── list <name> : 플러그인의 설치된 버전 리스트 확인
├── install <name> <version> : 플러그인의 특정 버전 설치
├── set <name> <version> : 현재 디렉토리에서 특정 버전 사용 (`./.tool-versions` 파일에 사용할 버전 기록)
├── set -u <name> <version> : 전역적으로 사용할 버전 설정 (`~/.tool-versions` 파일에 사용할 버전 기록)
├── current : 현재 사용중인 버전 확인
└── uninstall <name> <version> : 플러그인의 특정 버전 삭제
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.