이 문서의 과거 버전 (r1)을 보고 있습니다. 수정일: 2026.02.23 09:30
Node Version Manager는 유닉스 계열 운영 체제에서 Node.js의 여러 버전을 설치하고 관리하기 위한 명령 줄 인터페이스 도구이다. 개발자 Tim Caswell이 2010년에 최초로 출시했으며, Bash 스크립트 언어로 작성되어 있다. 이 도구는 MIT 라이선스 하에 공개된 오픈 소스 소프트웨어로, 공식 저장소는 GitHub에서 호스팅되고 있다.
주요 목적은 Node.js의 서로 다른 버전을 시스템에 병렬로 설치하고, 프로젝트나 세션에 따라 필요한 특정 버전을 손쉽게 전환할 수 있게 하는 것이다. 이를 통해 개발자는 하나의 시스템에서 여러 Node.js 프로젝트를 관리할 때 발생할 수 있는 버전 충돌 문제를 효과적으로 해결할 수 있다.
Node Version Manager는 단일 시스템에서 여러 Node.js 버전을 설치하고 관리할 수 있게 해주는 명령 줄 인터페이스 도구이다. 이 도구의 핵심 기능은 쉘 환경에서 명령어를 통해 다양한 Node.js 버전을 손쉽게 전환할 수 있도록 하는 것이다.
사용자는 nvm install 명령어를 통해 특정 버전의 Node.js를 다운로드하고 설치할 수 있으며, nvm use 명령어로 현재 쉘 세션에서 사용할 버전을 즉시 변경할 수 있다. 또한 nvm alias default 명령어를 사용하면 새로운 터미널 창이 열릴 때마다 자동으로 사용될 기본 버전을 설정할 수 있어 편의성을 높인다.
이 도구는 npm을 포함한 Node.js의 전체 환경을 각 버전별로 독립적으로 관리한다. 따라서 프로젝트마다 요구되는 서로 다른 Node.js 버전을 사용해야 하는 경우, 전역적으로 단일 버전만 설치하는 방식에서 발생하는 충돌 문제를 효과적으로 해결한다. 이는 특히 레거시 프로젝트를 유지보수하거나 여러 프로젝트를 동시에 진행하는 개발자에게 매우 유용하다.
또한 nvm ls 명령어를 통해 현재 시스템에 설치된 모든 Node.js 버전 목록을 확인하고, nvm uninstall 명령어로 더 이상 필요하지 않은 특정 버전을 삭제하는 등 버전 관리를 위한 포괄적인 기능을 제공한다.
Node Version Manager의 설치 방법은 운영 체제에 따라 다르다. 주로 유닉스 계열 운영 체제에서 사용되며, 공식 설치 스크립트를 통해 간편하게 설치할 수 있다.
설치를 위해서는 시스템에 cURL 또는 Wget과 같은 도구가 미리 설치되어 있어야 한다. 가장 일반적인 방법은 공식 GitHub 저장소에서 제공하는 설치 스크립트를 다운로드하여 실행하는 것이다. 터미널에서 특정 명령어를 입력하면 스크립트가 자동으로 최신 버전의 Node Version Manager를 다운로드하고 셸의 설정 파일(예: .bashrc, .zshrc)에 필요한 환경 변수를 추가한다. 설치 후에는 터미널을 재시작하거나 설정 파일을 다시 로드해야 명령어를 사용할 수 있다.
일부 리눅스 배포판이나 macOS에서는 패키지 관리자를 통한 설치도 가능하나, 공식 스크립트를 사용하는 방법이 가장 권장된다. Windows 운영 체제에서는 공식적으로 지원하지 않으며, Windows Subsystem for Linux 환경을 구성하거나 nvm-windows와 같은 별도의 포크 버전을 사용해야 한다.
nvm install 명령어를 사용하여 특정 Node.js 버전을 설치할 수 있다. 설치하고자 하는 버전의 번호를 인자로 전달하면 된다. 예를 들어, nvm install 18을 실행하면 Node.js의 18.x 시리즈 중 최신 안정판이 설치된다. 더 구체적인 버전을 지정하려면 nvm install 18.20.2와 같이 풀 버전 번호를 명시하면 된다.
사용 가능한 모든 Node.js 버전 목록을 확인하려면 nvm ls-remote 명령어를 사용한다. 이 명령은 공식 저장소에서 제공하는 모든 버전, 즉 안정판(LTS), 최신 기능판(Current), 개발판, 그리고 오래된 버전들의 목록을 보여준다. 특정 메이저 버전의 최신 LTS만 보고 싶다면 nvm ls-remote --lts를 사용할 수 있다.
설치 과정에서 Node.js와 함께 해당 버전에 맞는 npm(Node Package Manager)도 자동으로 설치된다. 설치가 완료되면 nvm ls 명령으로 현재 시스템에 로컬에 설치된 모든 Node.js 버전 목록을 확인할 수 있으며, 현재 사용 중인 버전 앞에는 화살표가 표시된다.
Node Version Manager를 사용하면 시스템에 설치된 여러 Node.js 버전 중 하나를 선택하여 현재 셸 세션에서 사용할 수 있다. nvm use 명령어 뒤에 원하는 버전 번호를 지정하면 된다. 예를 들어 nvm use 18.19.0을 실행하면 해당 셸 창에서는 Node.js 18.19.0 버전이 활성화된다.
사용 가능한 버전 목록을 확인하려면 nvm ls 명령어를 사용한다. 이 명령은 로컬에 설치된 모든 Node.js 버전을 보여주며, 현재 사용 중인 버전 앞에는 화살표가 표시된다. 또한 아직 설치되지 않은 LTS 버전이나 최신 릴리스 버전을 원격 저장소 목록에서 확인하려면 nvm ls-remote 명령을 사용할 수 있다.
버전 전환은 현재 셸 세션에만 적용되는 일시적인 조치이다. 새로운 터미널 창을 열면 이전에 설정해둔 기본 버전으로 돌아간다. 특정 프로젝트 디렉토리에서 자동으로 버전을 전환하도록 .nvmrc 파일을 활용할 수도 있다. 해당 파일에 버전 번호를 기록해두고 nvm use 명령을 실행하면 파일에 명시된 버전으로 전환된다.
Node Version Manager를 사용하면 시스템에 설치된 여러 Node.js 버전 중 하나를 기본 버전으로 설정할 수 있다. 이 설정은 새로운 셸 세션이 시작될 때마다 자동으로 사용될 버전을 지정하는 역할을 한다. nvm alias default 명령어를 통해 이 기본값을 관리한다.
기본 버전을 설정하려면 먼저 nvm ls 명령으로 현재 설치된 버전 목록을 확인한 후, nvm alias default <버전> 명령을 실행하면 된다. 예를 들어 nvm alias default 18.19.0을 입력하면, 이후 새로운 터미널 창을 열었을 때 자동으로 Node.js 18.19.0 버전이 활성화된다. 이 앨리어스는 $NVM_DIR/alias/default 파일에 저장되어 지속성을 유지한다.
이 기능은 개발 환경의 일관성을 유지하는 데 중요하다. 특정 프로젝트마다 다른 버전을 필요로 할 경우, 해당 프로젝트 디렉토리에서 .nvmrc 파일을 사용해 로컬 버전을 지정할 수 있지만, 별도의 설정이 없는 모든 경우에는 이렇게 지정한 기본 버전이 적용된다. 따라서 팀원들 간에 동일한 개발 환경을 구성하거나, CI/CD 파이프라인에서 특정 버전을 보장할 때 유용하게 사용된다.
기본 버전을 변경한 후에는 현재 셸 세션에 즉시 적용되지 않을 수 있다. 새로운 셸 세션을 시작하거나 nvm use default 명령을 실행하여 변경 사항을 확인할 수 있다. 또한 nvm current 명령으로 현재 활성화된 버전을, nvm which <버전> 명령으로 해당 버전의 실행 파일 경로를 확인할 수 있어 디버깅에 도움이 된다.
Node Version Manager는 Bash 스크립트를 통해 제공되는 다양한 명령어를 사용하여 Node.js 버전을 관리한다. 주요 명령어는 버전 설치, 전환, 제거, 목록 확인 등으로 구분된다.
가장 빈번하게 사용되는 명령어로는 nvm install이 있다. 이 명령어 뒤에 특정 버전 번호를 지정하면 해당 Node.js 버전을 다운로드하여 설치한다. 예를 들어 nvm install 18은 Node.js 18.x 시리즈의 최신 버전을 설치한다. 설치된 버전 목록을 확인하려면 nvm ls 명령어를 사용하며, 현재 사용 중인 버전은 별표(*)로 표시된다. 특정 버전을 사용하도록 전환할 때는 nvm use 명령어를 활용한다.
버전 관리와 관련된 다른 유용한 명령어도 존재한다. nvm alias default 명령어는 새로운 셸 세션이 시작될 때 기본으로 사용할 버전을 설정한다. 더 이상 필요하지 않은 버전은 nvm uninstall 명령어로 제거할 수 있다. 또한 nvm ls-remote 명령어를 실행하면 Node.js 공식 저장소에서 설치 가능한 모든 버전 목록을 확인할 수 있어 원하는 버전을 찾는 데 도움이 된다.
이러한 명령어들은 명령 줄 인터페이스에서 직관적으로 사용할 수 있도록 설계되어, 개발자가 프로젝트별로 서로 다른 Node.js 환경을 쉽게 구성하고 전환할 수 있게 해준다.
Node Version Manager는 하나의 시스템에서 여러 Node.js 버전을 손쉽게 관리할 수 있게 해주는 핵심적인 장점을 가진다. 이는 서로 다른 프로젝트가 서로 다른 Node.js 버전을 요구하는 개발 환경에서 특히 유용하다. 예를 들어, 레거시 프로젝트는 오래된 버전을 필요로 하고, 새로운 프로젝트는 최신 버전을 사용해야 할 수 있는데, nvm을 사용하면 명령어 하나로 버전 간 전환이 가능하다.
또한, nvm은 시스템 전역에 Node.js를 설치하는 방식과 달리 사용자 홈 디렉토리에 버전을 독립적으로 설치하고 관리한다. 이는 시스템 파일을 건드리지 않아 시스템을 깨끗하게 유지할 수 있으며, 권한 문제(예: sudo 명령어 사용) 없이도 자유롭게 패키지를 설치하거나 제거할 수 있게 한다. 이는 특히 리눅스나 macOS와 같은 유닉스 계열 운영 체제에서 보안과 편의성 측면에서 큰 이점이다.
사용법이 직관적이고 간단하다는 점도 주요 장점이다. 버전 설치, 목록 확인, 전환, 제거 등 대부분의 작업이 nvm install, nvm use, nvm ls와 같은 간결한 명령어로 수행된다. 이는 개발자가 프로젝트 환경 설정에 소모하는 시간을 크게 줄여준다. 또한, Bash 스크립트로 작성되어 쉘 환경과 자연스럽게 통합되며, MIT 라이선스로 자유롭게 사용하고 수정할 수 있다.
Node Version Manager는 Node.js 버전 관리를 단순화하는 강력한 도구이지만, 몇 가지 단점과 사용 시 주의해야 할 점이 존재한다.
가장 큰 단점은 기본적으로 유닉스 계열 운영 체제(macOS, Linux)에서만 공식적으로 지원된다는 점이다. 마이크로소프트 윈도우 사용자는 공식 nvm을 사용할 수 없으며, nvm-windows나 nvs와 같은 별도의 대안 도구를 찾아야 한다. 또한, nvm은 셸 스크립트로 작성되어 있어, 사용자의 셸 환경(Bash, Zsh 등)에 따라 설치 및 설정 과정에서 호환성 문제가 발생할 수 있다. 특히, 셸 초기화 스크립트(.bashrc, .zshrc 등)를 수정하기 때문에, 다른 도구와의 충돌이나 스크립트 오류로 인해 터미널이 제대로 실행되지 않는 상황이 가끔 발생한다.
사용 시 주의사항으로는, nvm을 통해 설치한 Node.js의 전역 모듈 관리가 있다. Node.js 버전을 전환할 때마다 해당 버전에 맞는 전역 모듈을 다시 설치해야 하는 경우가 많다. 이는 프로젝트별로 필요한 npm 패키지를 로컬에 설치하는 것이 일반적이지만, ESLint나 nodemon 같은 개발 도구를 전역으로 사용하는 경우에는 불편함을 초래할 수 있다. 또한, 시스템에 직접 설치된 Node.js와 nvm으로 관리되는 버전이 혼재되어 있을 경우, 예기치 않은 동작을 일으킬 수 있으므로, nvm 사용 시에는 가능한 시스템의 Node.js를 제거하고 통일하여 관리하는 것이 좋다.
Node Version Manager의 대표적인 대안 도구로는 fnm, n, asdf 등이 있다. 이들은 모두 Node.js의 여러 버전을 관리하는 공통 목적을 가지지만, 구현 방식, 성능, 지원 범위에서 차이를 보인다.
도구 이름 | 주요 특징 | 프로그래밍 언어 | 주요 지원 환경 |
|---|---|---|---|
fnm (Fast Node Manager) | 속도가 빠르다는 점을 강조하며, Rust로 작성되었다. Shell 스크립트를 로드하지 않아 시작 속도가 빠르다. | Rust | |
사용법이 매우 단순하고 직관적이다. 전역적으로 하나의 Node.js만 설치하고 필요 시 버전을 덮어쓰는 방식으로 동작한다. | Node.js (자체적으로) | ||
asdf (version manager) | 단일 도구로 Node.js, Ruby, Python, Java 등 수백 가지의 다양한 런타임과 도구의 버전을 통합 관리할 수 있다. 플러그인 아키텍처를 채택했다. |
이 외에도 Volta, nvs (Node Version Switcher), nodenv 등의 도구가 있다. 선택은 사용자의 주 작업 환경(운영 체제), 관리할 런타임의 종류(단일 vs. 다중), 성능에 대한 요구사항, 선호하는 사용자 경험에 따라 달라진다. 예를 들어, Node.js만 관리하면 충분하고 빠른 전환이 중요하다면 fnm을, 여러 언어의 생태계를 한꺼번에 관리해야 한다면 asdf를 고려할 수 있다.