문서의 각 단락이 어느 리비전에서 마지막으로 수정되었는지 확인할 수 있습니다. 왼쪽의 정보 칩을 통해 작성자와 수정 시점을 파악하세요.

Node Version Manager (NVM) | |
개발자 | Tim Caswell[1] Jordan Harband[2] |
최초 출시 | 2010년 |
주요 용도 | Node.js 버전 관리 |
운영 체제 | macOS Linux Windows[3] |
라이선스 | MIT 라이선스 |
상세 정보 | |
저장소 | GitHub (https://github.com/nvm-sh/nvm) |
주요 기능 | 단일 시스템에 여러 Node.js 버전 설치 및 전환 특정 프로젝트에 대한 기본 Node.js 버전 설정 npm 전역 모듈의 버전별 분리 관리 |
설치 방법 | curl 또는 wget을 이용한 설치 스크립트 실행 |
대체 도구 | n[4] fnm[5] nodist |

Node Version Manager는 Node.js의 버전 관리자이다. 주로 macOS와 Linux 환경에서 사용되며, Windows 사용자를 위한 별도의 nvm-windows 프로젝트가 존재한다. 이 도구는 하나의 시스템에서 여러 버전의 Node.js를 쉽게 설치하고 전환할 수 있게 해준다.
개발은 2010년 Tim Caswell에 의해 시작되었으며, 현재는 Jordan Harband가 주요 유지 관리자로 활동하고 있다. 이 프로젝트는 MIT 라이선스 하에 공개된 오픈 소스 소프트웨어이다.
Node Version Manager의 주요 용도는 개발자가 프로젝트별로 서로 다른 Node.js 버전 요구사항을 효율적으로 관리하는 것이다. 이를 통해 웹 개발이나 서버 사이드 스크립트 작업 시 버전 충돌 문제를 방지할 수 있다.

Node Version Manager는 단일 시스템에서 여러 Node.js 버전을 설치, 관리, 전환할 수 있게 해주는 명령 줄 인터페이스 도구이다. 이 도구의 핵심 기능은 사용자가 프로젝트별로 필요한 서로 다른 Node.js 버전을 손쉽게 사용할 수 있도록 하는 것이다.
주요 기능으로는 특정 Node.js 버전의 설치와 제거, 시스템에서 사용할 활성 버전의 전환이 있다. 사용자는 간단한 명령어를 통해 Node.js의 안정적인 최신 버전이나 특정 버전 번호를 지정하여 설치할 수 있으며, 더 이상 필요하지 않은 버전은 삭제하여 디스크 공간을 절약할 수 있다.
또한, 이 도구는 셸 세션별 또는 전역적으로 사용할 기본 Node.js 버전을 설정하는 기능을 제공한다. 이를 통해 특정 디렉터리로 이동했을 때 자동으로 해당 프로젝트에 맞는 버전으로 전환되도록 할 수 있어, 여러 프로젝트를 동시에 관리하는 개발자에게 매우 유용하다.
npm은 각 Node.js 버전과 함께 독립적으로 설치되므로, 버전을 전환할 때마다 해당 버전에 맞는 글로벌 npm 패키지 환경도 함께 전환된다. 이는 프로젝트 간 의존성 충돌을 방지하고 깨끗한 개발 환경을 유지하는 데 도움을 준다.

Node Version Manager (NVM)의 설치 방법은 사용하는 운영 체제에 따라 다르다. 공식적으로는 macOS와 Linux를 지원하며, Windows 사용자는 별도의 nvm-windows 프로젝트를 이용해야 한다.
macOS와 Linux에서는 주로 curl이나 wget 같은 명령줄 인터페이스 도구를 통해 설치 스크립트를 다운로드하고 실행하는 방식으로 설치한다. 공식 GitHub 저장소에서 제공하는 설치 명령어를 터미널에 입력하면, 자동으로 최신 버전의 NVM을 사용자의 홈 디렉토리에 설치한다. 설치 후에는 셸 설정 파일(.bashrc, .zshrc 등)을 수정하여 NVM 명령어를 사용할 수 있도록 환경을 구성해야 한다.
Windows 사용자는 GitHub의 nvm-windows 프로젝트 페이지에서 설치 프로그램(.exe 파일)을 다운로드하여 실행한다. 이 프로젝트는 별도의 유지보수 팀이 관리하며, 설치 마법사를 따라 진행하면 시스템에 nvm-windows가 설치되고, 이후 명령 프롬프트나 PowerShell에서 NVM 명령어를 사용할 수 있다. 설치 전 기존에 시스템에 설치된 Node.js를 제거하는 것이 권장된다.
설치가 완료된 후에는 터미널이나 명령 프롬프트를 재시작한 다음 nvm --version 명령어를 입력하여 NVM이 정상적으로 설치되었는지 확인할 수 있다. 이 명령어는 설치된 NVM의 버전 정보를 출력하며, 올바른 출력이 나타나면 이후 Node.js 버전 관리 작업을 시작할 수 있다.

Node.js 버전을 설치하는 것은 Node Version Manager의 핵심 기능이다. 사용자는 nvm install 명령어 뒤에 원하는 버전 번호를 지정하여 간단히 설치할 수 있다. 예를 들어, nvm install 18.17.0 명령은 Node.js의 18.17.0 LTS 버전을 다운로드하고 설치한다. 특정 메이저 버전의 최신 릴리스를 설치하려면 nvm install 18과 같이 번호만 입력하면 된다. 또한 nvm install node 명령을 사용하면 현재 최신 안정판을, nvm install --lts를 사용하면 최신 LTS 버전을 각각 설치할 수 있다.
설치 가능한 모든 Node.js 버전 목록을 확인하려면 nvm ls-remote 명령을 사용한다. 이 명령은 공식 Node.js 릴리스 서버에서 제공하는 수많은 버전 목록을 터미널에 출력한다. macOS나 Linux 사용자는 목록이 매우 길기 때문에 grep 명령어와 함께 사용하여 특정 버전을 필터링하는 것이 일반적이다. 한편, Windows용 nvm-windows 프로젝트에서는 nvm list available 명령으로 설치 가능한 버전을 확인한다.
설치 과정에서 Node Version Manager는 해당 Node.js 버전의 바이너리를 사용자의 시스템에 다운로드하고, 독립된 디렉터리에 압축을 해제한다. 이렇게 하면 시스템에 전역적으로 설치된 Node.js와 완전히 분리되어 관리된다. 설치가 완료되면 nvm use 명령을 통해 해당 버전을 즉시 활성화하여 사용할 수 있다.
Node Version Manager (NVM)을 사용하면 시스템에 설치된 여러 Node.js 버전 사이를 쉽게 전환할 수 있다. nvm use 명령어를 통해 특정 버전을 활성화한다. 예를 들어 nvm use 18.19.0을 실행하면 현재 터미널 세션에서 Node.js 18.19.0 버전을 사용하게 된다. 이 명령은 쉘의 PATH 환경 변수를 변경하여 지정한 버전의 Node.js 실행 파일을 가리키도록 한다.
전환할 버전은 이미 nvm install 명령으로 설치되어 있어야 한다. 설치된 버전 목록은 nvm ls 명령으로 확인할 수 있으며, 현재 활성화된 버전은 별표(*)로 표시된다. 또한 nvm use 명령 뒤에 특정 버전 번호 대신 lts/*나 node 같은 별칭을 사용할 수도 있다. lts/*는 최신 LTS 버전을, node는 최신 안정판을 의미한다.
이 버전 전환은 현재 열려 있는 터미널 또는 명령 프롬프트 세션에만 적용된다는 점에 유의해야 한다. 새로운 터미널 창을 열면 기본으로 설정된 버전이 사용된다. macOS와 Linux에서는 쉘의 시작 스크립트에 nvm use 명령을 추가하여 특정 버전을 자동으로 로드하도록 구성할 수도 있다.
기본 Node.js 버전 설정은 특정 셸 세션에서만이 아니라, 새로운 터미널 창이나 탭을 열 때마다 자동으로 사용될 버전을 지정하는 기능이다. nvm alias default 명령어를 통해 설정할 수 있으며, 이는 사용자의 홈 디렉토리에 있는 .nvmrc 파일이나 환경 설정 파일에 기록된다.
설정 방법은 간단하다. 먼저 nvm ls 명령으로 시스템에 설치된 Node.js 버전 목록을 확인한 후, 기본으로 사용할 버전 번호(예: 18.19.0)를 선택한다. 이후 nvm alias default 18.19.0 명령을 실행하면 해당 버전이 기본값으로 설정된다. 설정이 완료되면 이후 새로운 셸 세션이 시작될 때마다 지정한 버전의 Node.js가 자동으로 활성화된다.
이 기본 설정은 프로젝트별 .nvmrc 파일에 의해 일시적으로 재정의될 수 있다. 특정 프로젝트 디렉토리에 .nvmrc 파일이 존재하고 nvm use 명령을 실행하면, 해당 파일에 명시된 버전이 현재 세션에서 우선적으로 사용된다. 세션을 종료하거나 다른 디렉토리로 이동하면 다시 기본으로 설정된 Node.js 버전으로 돌아간다.
이 기능은 여러 버전의 Node.js를 오가는 개발자에게 매우 유용하다. 글로벌하게 설치된 npm 패키지나 특정 버전에 종속된 시스템 도구를 안정적으로 사용해야 할 때, 매번 버전을 수동으로 전환하지 않아도 되므로 작업 효율성을 높여준다.

Node Version Manager를 사용하면 여러 버전의 Node.js를 한 시스템에 병렬로 설치하고 관리할 수 있다. 이는 서로 다른 프로젝트가 서로 다른 Node.js 버전을 요구할 때 매우 유용하다. 예를 들어, 레거시 프로젝트는 오래된 버전을 필요로 하고, 새로운 프로젝트는 최신 버전을 사용해야 할 수 있는데, NVM을 통해 명령어 하나로 버전을 빠르게 전환할 수 있다.
NVM은 명령 줄 인터페이스를 통해 직관적인 명령어를 제공하여 사용이 간편하다. nvm install로 원하는 버전을 설치하고, nvm use로 즉시 전환하며, nvm alias default를 통해 기본 사용 버전을 설정할 수 있다. 이러한 단순함 덕분에 개발 환경 설정이 크게 단순화된다.
또한, NVM은 쉘 스크립트를 기반으로 작동하여 시스템의 전역 Node.js 설치에 간섭하지 않는다. 각 버전은 사용자 홈 디렉토리 내에 독립적으로 설치되므로, 시스템 파일을 변경하거나 관리자 권한이 필요하지 않다. 이는 시스템을 깨끗하게 유지하고, 버전 변경 시 발생할 수 있는 충돌 위험을 줄여준다.
마지막으로, 오픈 소스 프로젝트이며 MIT 라이선스를 따르기 때문에 무료로 사용할 수 있고, 활발한 커뮤니티의 지원을 받는다. macOS와 Linux를 위한 공식 버전과, 별도의 nvm-windows 프로젝트를 통해 Windows 환경에서도 유사한 기능을 제공한다는 점도 큰 장점이다.

Node Version Manager는 강력한 도구이지만, 사용 시 몇 가지 단점과 주의해야 할 점이 존재한다. 가장 큰 단점은 운영 체제별로 구현체가 완전히 분리되어 있다는 점이다. macOS와 리눅스용 NVM은 셸 스크립트로 작성된 단일 프로젝트인 반면, 윈도우 환경에서는 별도의 'nvm-windows' 프로젝트를 사용해야 한다. 이 두 구현체는 내부 동작 방식과 지원하는 명령어에서 미세한 차이를 보일 수 있어, 사용자는 자신의 운영 체제에 맞는 문서를 참조해야 한다.
또한, NVM은 셸 환경에 깊이 의존하기 때문에 초보자에게 설치와 설정이 다소 복잡하게 느껴질 수 있다. 특히, 사용자의 셸 프로필 파일(예: .bashrc, .zshrc)을 수정해야 정상적으로 동작하며, 셸을 새로 시작할 때마다 스크립트를 소싱하는 과정이 필요하다. 잘못된 설정은 셸 시작 속도를 저하시키거나, 터미널 오류를 유발할 수 있다.
주의사항으로는, NVM으로 관리하는 Node.js 버전과 글로벌로 설치된 npm 패키지가 완전히 분리된다는 점을 이해하는 것이 중요하다. 서로 다른 Node.js 버전으로 전환하면, 해당 버전에 맞는 글로벌 npm 패키지를 별도로 설치해야 한다. 또한, 일부 시스템 도구나 에디터의 플러그인은 시스템에 기본 설치된 Node.js 경로를 고정적으로 참조할 수 있어, NVM으로 관리하는 환경에서 호환성 문제가 발생할 수 있다. 프로젝트별로 .nvmrc 파일을 사용해 버전을 명시하는 것이 이러한 혼란을 줄이는 좋은 방법이다.

Node Version Manager는 Node.js 버전 관리를 위한 대표적인 도구이지만, 다른 요구사항이나 선호도에 따라 선택할 수 있는 여러 대안이 존재한다. fnm은 Rust로 작성되어 빠른 실행 속도와 간결한 셸 통합을 특징으로 하는 도구이다. asdf는 단일 도구로 Node.js, Ruby, Python, Java 등 다양한 런타임과 도구의 버전을 통합 관리할 수 있는 플러그인 기반의 범용 버전 관리자이다.
Volta는 Rust로 개발된 도구로, Node.js 버전 관리뿐만 아니라 npm이나 Yarn 같은 패키지 관리자 버전도 함께 관리할 수 있으며, 프로젝트 디렉토리에 진입할 때 자동으로 적절한 버전을 활성화하는 기능을 강점으로 내세운다. n은 Node Version Manager보다 단순한 API와 설치 방식을 지향하는 또 다른 Node.js 버전 관리 도구이다.
도구명 | 주요 특징 | 지원 언어/환경 |
|---|---|---|
빠른 속도, Rust 기반 | ||
플러그인 기반 통합 관리 | ||
프로젝트별 자동 버전 전환, 패키지 관리자 버전 관리 포함 | ||
단순한 사용법과 설치 |
이러한 대안들은 각각 다른 철학과 장점을 가지고 있어, 사용자의 작업 흐름, 관리해야 하는 기술 스택의 다양성, 성능 요구사항에 따라 적합한 도구를 선택할 수 있게 한다. 특히 여러 프로그래밍 언어를 함께 사용하는 개발자에게는 asdf 같은 통합 도구가 효율적일 수 있다.