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


NVM은 Node Version Manager의 약자로, Node.js의 버전을 관리하는 도구이다. 이 도구는 nvm-sh 커뮤니티에서 개발 및 유지보수하며, MIT 라이선스로 배포된다. 주된 용도는 하나의 시스템에서 여러 Node.js 버전을 손쉽게 설치하고, 관리하며, 필요에 따라 전환하는 것이다.
이는 소프트웨어 개발 과정에서 특정 프로젝트마다 요구되는 Node.js 버전이 다를 때 매우 유용하다. 예를 들어, 레거시 프로젝트는 오래된 버전을, 새로운 프로젝트는 최신 버전을 필요로 할 수 있다. NVM을 사용하면 글로벌로 단일 버전만 설치하는 방식에서 발생하는 충돌 없이 각 프로젝트에 맞는 환경을 구성할 수 있다.
NVM은 Windows, Linux, macOS 및 WSL을 포함한 다양한 운영체제를 지원하며, 각 플랫폼에 맞는 설치 방법을 제공한다. 명령줄 인터페이스를 통해 간단한 명령어로 버전 설치, 전환, 삭제 등의 작업을 수행할 수 있어 개발자의 워크플로우 효율성을 높여준다.

NVM의 핵심 기능은 여러 Node.js 버전을 한 시스템에서 효율적으로 관리할 수 있게 하는 것이다. 이 도구는 개발자가 서로 다른 프로젝트의 요구사항에 맞춰 손쉽게 Node.js 버전을 설치, 전환, 제거할 수 있도록 설계되었다. 이를 통해 소프트웨어 개발 과정에서 발생할 수 있는 버전 충돌 문제를 근본적으로 해결한다.
주요 기능으로는 특정 버전의 Node.js를 간단한 명령어로 설치하는 것, 설치된 여러 버전 사이를 자유롭게 전환하는 것, 그리고 더 이상 필요하지 않은 버전을 시스템에서 깔끔하게 삭제하는 것이 포함된다. 또한 각 Node.js 설치에는 해당 버전에 맞는 npm이 함께 제공되어 완전히 독립된 개발 환경을 구성할 수 있다.
NVM은 .nvmrc 파일을 활용한 프로젝트별 자동 버전 전환 기능도 제공한다. 프로젝트 루트 디렉토리에 Node.js 버전을 명시한 이 파일을 생성해두면, 해당 디렉토리로 이동할 때 NVM이 자동으로 지정된 버전을 사용하도록 전환한다. 이는 여러 프로젝트를 동시에 진행하는 개발자의 생산성을 크게 향상시킨다.
또한 이 도구는 Windows, Linux, macOS 등 다양한 운영 체제를 광범위하게 지원하며, 공식 Node.js 서버에 접속이 느린 지역을 위해 미러 서버를 설정하는 기능도 포함하고 있다. 이러한 플랫폼 간 호환성과 유연성 덕분에 개발 팀 전체가 동일한 Node.js 환경을 쉽게 유지할 수 있다.

NVM의 설치 방법은 운영 체제에 따라 다르다. 주로 유닉스 계열 운영 체제(리눅스, macOS)와 마이크로소프트 윈도우에서의 설치 절차가 구분된다.
유닉스 계열 시스템에서는 공식 설치 스크립트를 사용하는 것이 일반적이다. 터미널에서 curl 또는 wget 명령어를 통해 설치 스크립트를 다운로드하고 실행한다. 설치 과정에서 스크립트는 ~/.nvm 디렉토리에 NVM 저장소를 복제하며, 사용자의 셸 프로필 파일(예: ~/.bashrc, ~/.zshrc)에 필요한 환경 변수를 자동으로 추가한다. 설치 후에는 해당 셸 설정 파일을 다시 로드(source ~/.bashrc)하여 NVM 명령어를 즉시 사용할 수 있게 해야 한다.
반면, 윈도우의 경우 공식 NVM(nvm-sh)이 아닌, 별도의 프로젝트인 nvm-windows를 사용해야 한다. 공식 웹사이트에서 최신 릴리스의 nvm-setup.exe 설치 파일을 다운로드하여 실행하면 된다. 설치 마법사를 따라 진행하면 시스템 PATH에 NVM이 자동으로 등록된다. 설치가 완료된 후 명령 프롬프트나 PowerShell에서 nvm -v 명령어로 버전을 확인하여 정상 설치를 확인할 수 있다.
모든 플랫폼에서 설치 전 기존에 시스템에 Node.js가 전역으로 설치되어 있다면, 버전 충돌을 방지하기 위해 제거하는 것이 권장된다. 또한, 설치 후에는 네트워크 환경에 따라 Node.js 공식 미러 서버에서 버전을 다운로드하는 데 시간이 걸릴 수 있다.

nvm install 명령어를 사용하여 특정 Node.js 버전을 설치할 수 있다. 설치할 버전은 node 뒤에 버전 번호를 지정하여 명시한다. 예를 들어, nvm install node는 최신 안정판을, nvm install 18.16.0은 특정 버전 18.16.0을 설치한다. lts 키워드를 사용하면 최신 LTS(Long-Term Support) 버전을 설치할 수 있으며, nvm install lts/fermium과 같이 특정 LTS 코드명을 지정할 수도 있다.
설치 과정에서 npm(Node Package Manager)도 해당 Node.js 버전에 맞는 버전으로 함께 설치된다. 이는 각 버전별로 완전히 독립된 환경을 구성하여 프로젝트 간 의존성 충돌을 방지하는 데 핵심적이다. 네트워크 상태나 지역에 따라 공식 서버에서의 다운로드가 느릴 경우, 미러 서버를 설정하여 다운로드 속도를 개선할 수 있다.
설치가 완료되면 nvm use <버전> 명령어로 해당 버전을 즉시 사용할 수 있다. nvm list 또는 nvm ls 명령을 실행하면 현재 시스템에 설치된 모든 Node.js 버전 목록과 현재 활성화된 버전을 확인할 수 있다.
nvm use 명령을 사용하여 설치된 Node.js 버전 간에 전환할 수 있다. 이 명령은 현재 터미널 세션에서 사용할 Node.js 버전을 즉시 변경한다. 예를 들어 nvm use 18.16.0을 실행하면 해당 세션에서는 Node.js 18.16.0 버전이 활성화된다. 버전 번호 대신 nvm use node를 입력하면 설치된 최신 안정판 버전으로 전환되며, nvm use --lts를 사용하면 최신 LTS(장기 지원) 버전으로 전환할 수 있다.
특정 프로젝트 디렉터리로 이동할 때마다 자동으로 필요한 Node.js 버전을 사용하도록 설정할 수도 있다. 프로젝트 루트 디렉터리에 .nvmrc 파일을 만들고 원하는 버전 번호(예: 18.16.0)를 입력하기만 하면 된다. 이후 해당 디렉터리에서 nvm use 명령을 실행하면 .nvmrc 파일에 명시된 버전으로 자동 전환된다. 일부 셸 환경에서는 플러그인을 통해 디렉터리 이동 시 자동으로 nvm use가 실행되도록 구성할 수 있다.
전환된 버전은 해당 터미널 창이나 셸 세션 내에서만 유효하다. 새로운 터미널을 열면 기본으로 설정된 버전이 사용된다. 기본 버전은 nvm alias default <version> 명령으로 설정할 수 있으며, 이를 통해 모든 새 세션의 시작 버전을 고정할 수 있다.
현재 사용 중인 Node.js 버전을 확인하는 것은 NVM을 사용하는 개발 환경에서 매우 기본적이고 중요한 작업이다. 이는 특정 프로젝트를 실행하거나 디버깅할 때, 의도한 버전의 Node.js가 활성화되어 있는지 빠르게 점검할 수 있게 해준다.
현재 활성화된 Node.js 버전을 확인하려면 터미널에서 nvm current 명령어를 실행하면 된다. 이 명령어는 현재 셸 세션에서 사용 중인 Node.js 버전을 출력한다. 예를 들어, v18.16.0과 같이 설치된 특정 버전 번호가 표시되거나, 기본 버전으로 설정된 경우 default라는 별칭이 표시될 수 있다. 이 명령어는 프로젝트별 .nvmrc 파일을 통해 자동으로 버전이 전환되었는지 확인할 때 유용하다.
또 다른 방법으로 node --version 또는 줄여서 node -v 명령어를 사용할 수 있다. 이는 NVM에 특화된 명령어가 아니라 Node.js 자체의 명령어로, 현재 환경에서 실행 가능한 node 실행 파일의 버전을 직접 조회한다. nvm current와 node -v의 결과는 일반적으로 동일해야 하며, 불일치가 발생한다면 PATH 환경 변수 설정에 문제가 있을 수 있다.
이러한 확인 작업은 여러 버전의 Node.js를 오가며 작업하는 개발자에게 필수적이다. 잘못된 버전에서 코드를 실행하면 호환성 문제나 예기치 않은 오류가 발생할 수 있기 때문이다. 따라서 새로운 터미널 세션을 시작하거나 프로젝트 디렉토리를 변경한 후에는 습관적으로 현재 버전을 확인하는 것이 좋다.
nvm ls 명령을 사용하면 현재 시스템에 NVM을 통해 설치된 모든 Node.js 버전 목록을 확인할 수 있다. 이 명령을 실행하면 터미널에 설치된 버전들이 나열되며, 현재 사용 중인 버전은 화살표(->)로 표시되고, 기본으로 설정된 버전은 별표(*)로 표시된다. 또한 사용 가능한 모든 LTS 버전이나 최신 버전을 원격 저장소에서 확인하는 nvm ls-remote 명령도 제공된다.
특정 프로젝트 디렉토리에서 사용해야 하는 Node.js 버전을 .nvmrc 파일에 명시해 둘 수 있다. 해당 디렉토리에서 nvm ls 명령을 실행하면 현재 시스템에 그 버전이 설치되어 있는지 여부도 함께 표시되어 프로젝트 환경 설정을 확인하는 데 유용하다. 이는 여러 프로젝트를 관리할 때 버전 혼란을 방지하는 중요한 기능이다.
명령어 | 설명 |
|---|---|
| 로컬에 설치된 모든 Node.js 버전 목록을 표시한다. |
| NVM으로 설치 가능한 모든 원격 Node.js 버전 목록을 표시한다. |
| 설치 가능한 LTS 버전만 필터링하여 표시한다. |
설치된 버전을 확인하는 것은 새로운 버전을 설치하기 전이나, 사용하지 않는 오래된 버전을 nvm uninstall 명령으로 정리하여 디스크 공간을 확보할 때 필수적인 단계이다. 이를 통해 개발 환경을 깔끔하게 유지 관리할 수 있다.

NVM의 가장 큰 장점은 여러 Node.js 버전을 시스템에 동시에 설치하고, 프로젝트나 필요에 따라 손쉽게 전환할 수 있다는 점이다. 이는 서로 다른 Node.js 버전을 요구하는 여러 프로젝트를 동시에 진행하거나, 신규 버전으로의 호환성을 테스트할 때 매우 유용하다. 개발자는 명령 줄 인터페이스를 통해 간단한 명령어로 특정 버전을 설치하거나, 현재 사용 중인 버전을 확인하고, 필요에 따라 다른 버전으로 즉시 전환할 수 있다.
또한, NVM은 각 Node.js 버전마다 독립적인 npm 환경을 제공하여 전역 설치로 인한 의존성 충돌 문제를 효과적으로 방지한다. 이는 프로젝트별로 필요한 패키지 버전이 다를 때 특히 중요하다. 더불어, .nvmrc 파일을 프로젝트 루트 디렉토리에 생성해 두면, 해당 디렉토리로 이동할 때 자동으로 지정된 Node.js 버전을 사용하도록 설정할 수 있어 개발 환경의 일관성을 유지하는 데 도움이 된다.
NVM은 Windows, Linux, macOS 등 주요 운영 체제를 광범위하게 지원하며, 공식 미러 서버를 구성하여 지역별 다운로드 속도를 개선할 수 있는 기능도 제공한다. 이러한 플랫폼 간 호환성과 유연성 덕분에, 다양한 환경에서 작업하는 개발 팀이 통일된 방식으로 Node.js 버전을 관리할 수 있다.

nvm을 사용할 때는 몇 가지 주의할 점이 있다. 우선, nvm은 Node.js를 시스템 전역에 설치하는 대신 사용자 홈 디렉터리 내에서 관리한다. 따라서 기존에 시스템 경로에 직접 설치된 Node.js가 있다면, nvm을 설치하기 전에 이를 완전히 제거하는 것이 권장된다. 두 설치 방식이 혼재할 경우 버전 충돌이나 예상치 못한 동작이 발생할 수 있다.
nvm으로 설치한 각 Node.js 버전은 전용 npm을 함께 포함하며, 이들은 서로 완전히 격리되어 있다. 따라서 한 버전에서 전역으로 설치한 패키지(예: nodemon이나 pm2)는 다른 Node.js 버전으로 전환했을 때 사용할 수 없다. 필요한 경우 nvm reinstall-packages 명령어를 사용하거나, 각 버전마다 필요한 글로벌 패키지를 별도로 설치해야 한다.
또한, 쉘 스크립트 기반의 nvm(nvm-sh)은 bash, zsh 등 POSIX 호환 셸 환경에서 동작하도록 설계되었다. Windows 운영체제에서는 공식적인 지원이 없으며, nvm-windows라는 별도의 프로젝트를 사용해야 한다. 두 도구는 기본적인 명령어는 유사하지만, 내부 구현과 몇몇 부가 기능에서 차이가 있을 수 있음을 인지해야 한다.
장기적으로 특정 버전을 사용하는 프로젝트를 위해 .nvmrc 파일을 활용할 수 있다. 그러나 이 기능은 셸의 자동 완성 스크립트가 올바르게 로드되어 있을 때 정상 작동한다. 새로운 터미널 세션을 시작할 때마다 nvm 스크립트를 자동으로 소싱하도록 셸 설정 파일(예: .bashrc 또는 .zshrc)을 확인하는 것이 중요하다. 설정이 제대로 되지 않으면 nvm 명령어를 찾을 수 없다는 오류가 발생할 수 있다.

Node.js 생태계에는 nvm 외에도 다양한 버전 관리 도구와 패키지 관리 도구가 존재한다. 특히 Windows 환경에서는 nvm의 공식 지원이 없어, nvm-windows라는 별도의 프로젝트가 널리 사용된다. 이는 Corey Butler가 개발한 Windows 전용 Node.js 버전 관리자로, nvm과 유사한 명령어 체계를 제공한다.
macOS와 Linux를 위한 대체 도구로는 Volta와 fnm(Fast Node Manager)이 있다. Volta는 Rust로 작성되어 빠른 실행 속도를 자랑하며, Node.js 버전 관리뿐만 아니라 npm, Yarn 같은 패키지 관리자 버전도 함께 관리할 수 있는 특징이 있다. fnm 역시 Rust 기반으로 개발되어 속도에 중점을 두고 있으며, nvm보다 빠른 Node.js 버전 전환을 제공한다.
Docker 컨테이너 기반 개발 환경에서는 nvm 대신 공식 Node.js Docker 이미지를 사용하는 것이 일반적이다. 각 컨테이너에 특정 버전의 Node.js 이미지를 할당함으로써, 호스트 시스템의 버전 충돌 없이 프로젝트별로 완전히 격리된 환경을 구성할 수 있다. 이는 마이크로서비스 아키텍처나 CI/CD(지속적 통합/지속적 배포) 파이프라인에서 특히 유용하다.

NVM이라는 약어는 여러 의미를 가진다. 가장 일반적으로는 비휘발성 메모리(Non-Volatile Memory)를 지칭하는 컴퓨터 과학 용어로 사용된다. 그러나 소프트웨어 개발 분야, 특히 Node.js 생태계에서는 Node Version Manager를 의미하는 도구 이름으로 더 널리 알려져 있다. 이는 동음이의어의 전형적인 사례이다.
Node.js 버전 관리자인 NVM은 원래 유닉스 계열 운영체제(리눅스, macOS)를 위한 셸 스크립트로 개발되었다. 이후 윈도우 사용자들의 요구에 따라 별도의 프로젝트인 'nvm-windows'가 만들어져 크로스 플랫폼 지원이 이루어졌다. 이처럼 같은 이름을 공유하지만, 서로 다른 개발 팀에 의해 관리되는 독립적인 도구라는 점이 특징이다.
인터넷 속어로서의 NVM은 "Never Mind"의 줄임말로, '신경 쓰지 마'라는 뜻으로 사용된다. 이는 주로 인터넷 메신저나 소셜 미디어에서의 비공식적 대화에서 발견된다. 따라서 기술 문서나 공식적인 맥락에서 NVM을 언급할 때는 혼란을 피하기 위해 정확히 어떤 의미인지 명시하는 것이 좋다.
