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. 원하는 언어의 플러그인을 설치`
플러그인을 설치하기 전에 어떤 플러그인이 있는지 확인해보자.
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> : 플러그인의 특정 버전 삭제