우분투 node.js 설치와 버전 관리 - NVM, NodeSource

우분투 패키지 관리자로 설치

우분투 패키지 리포지토리에서 설치합니다. 우분투 리포지토리에는 최신 버전이 아닌 장기 지원(LTS)을 위한 안정화 버전이 설치됩니다.

최신 Node.js 패키지 업데이트가 느리기 때문에 최신 버전의 Node.js를 설치하려면 NVM이나 NodeSource 리포지토리를 통해 설치해야 합니다.

Node.js와 Node.js 패키지 관리자인 NPM을 한번에 설치합니다.

sudo apt update
sudo apt install nodejs npm

설치 후 Node.js 버전을 확인합니다.

$ > nodejs -v
v12.22.9

2024년 기준 최신 버전은 v21.x.x이며, 장기 지원 버전은 v20.12.x(LTS)입니다. 우분투 리포지토리 설치 버전과 버전 차이가 너무 많이 나거나, 최신 Node.js를 설치하려면 다음 방법을 사용하는 것을 권장합니다.

NVM으로 설치

NVM은 Node Version Manager 입니다. Node.js의 버전 관리 도구로 여러가지 버전의 Node.js 설치본을 관리할 수 있도록 해주는 도구입니다.

Node.js는 버전업이 상당히 빠르고, 특정 패키지가 특정 Node.js 버전에 종속되어 있어서 다른 Node.js(더 최신 버전 포함) 버전에서는 에러가 나는 경우가 종종 있습니다.

개발 환경에서 Node.js를 사용할 때도 개발 시기에 따라 다른 Node.js를 사용해야하는 경우도 있기 때문에 Node.js 버전 관리는 필수입니다.

NVM 설치

먼저 NVM을 설치해야 합니다. 다음 커맨드로 NVM 설치 bash 스크립트를 다운로드받아 셸에서 바로 실행합니다. 2024년 기준 최신 버전은 v0.39.7 입니다.

wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash

스크립트 실행 메시지를 보면 "/home/ubuntu/.nvm" 디렉토리에 깃헙 리포지토리의 nvm을 클론해서 복사해오는 것을 알 수 있습니다.

=> Downloading nvm from git to '/home/ubuntu/.nvm'
=> Cloning into '/home/ubuntu/.nvm'...
remote: Enumerating objects: 365, done.
remote: Counting objects: 100% (365/365), done.
remote: Compressing objects: 100% (313/313), done.
remote: Total 365 (delta 43), reused 168 (delta 26), pack-reused 0
Receiving objects: 100% (365/365), 365.08 KiB | 8.11 MiB/s, done.
Resolving deltas: 100% (43/43), done.
* (HEAD detached at FETCH_HEAD)
  master
=> Compressing and cleaning up git repository

=> Appending nvm source string to /home/ubuntu/.bashrc
=> Appending bash_completion source string to /home/ubuntu/.bashrc
=> Close and reopen your terminal to start using nvm or run the following to use it now:

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion

터미널을 닫았다 다시 열어야 사용 가능하다고 안내 메시지가 나오므로 터미널을 다시 연결해서 nvm의 버전을 확인합니다.

$ > nvm -v
0.39.7

깃헙에 NVM 가이드 문서와 자세한 사용방법이 나와 있습니다.

GitHub - nvm-sh/nvm: Node Version Manager - POSIX-compliant bash script to manage multiple active node.js versions
Node Version Manager - POSIX-compliant bash script to manage multiple active node.js versions - nvm-sh/nvm

node.js 설치

이제 NVM으로 node.js를 설치합니다.

먼저 설치 가능한 node.js 버전을 확인합니다. 최초의 0.1.x 버전부터 최신 버전인 v21.7.2, 또는 그 이후 버전까지 전체 버전 목록이 표시됩니다.

주로 사용하는 버전은 v16.x.x, v18.x.x, v20.12.1(LTS), 그리고 최신 버전입니다. 가장 권장하는 장기 지원 버전인 v20.12.1(LTS)입니다.

$ > nvm list-remote
    v0.1.14
    v0.1.15
    v0.1.16
    v0.1.17
    v0.1.18
    ...
   v20.12.0   (LTS: Iron)
   v20.12.1   (Latest LTS: Iron)
    v21.0.0
    ....
    v21.6.2
    v21.7.0
    v21.7.1
    v21.7.2
    

Node.js를 NVM으로 설치하는 커맨드는 다음과 같습니다. 별다른 버전 표시를 하지 않으면 NVM이 가져올 수 있는 가장 최신 버전이 설치됩니다.

nvm install node

장기간의 패치와 보안 업데이트를 지원하는 LTS 버전을 설치하려면 "--lts" 옵션을 추가해야 합니다. 설치 시점에 사용 가능한 가장 최신의 LTS 버전이 설치됩니다.

$ > nvm install --lts

Installing latest LTS version.
Downloading and installing node v20.12.1...
Downloading https://nodejs.org/dist/v20.12.1/node-v20.12.1-linux-arm64.tar.xz...
######################################################################### 100.0%
Computing checksum with sha256sum
Checksums matched!
Now using node v20.12.1 (npm v10.5.0)

현재 우분투에 설치된 Node.js 버전이 어떤 것들이 있는지 확인합니다. 앞서의 과정대로 설치를 했으면 LTS 버전인 v20.12.1(LTS)와 최신 버전인 v21.7.2 버전이 설치되어 있는 것이 확인됩니다.

그리고 기본 사용(default)하는 Node.js는 처음 설치한 v21.7.2로 표시됩니다.

ubuntu@ubuntu:~$ nvm ls
->     v20.12.1
        v21.7.2
         system
default -> node (-> v21.7.2)
...

사용할 Node.js 버전 지정

NVM으로 설치한 Node.js 버전들 중에서 사용할 Node.js 버전을 선택해서 기본 컴파일러로 사용합니다. 앞서 설치한 두 버전중에서 LTS 버전을 사용하려면 다음 커맨드로 사용 버전을 지정합니다.

default로 표시되는 기본 사용 버전과는 다른 것입니다 혼동하면 안됩니다. 현재 Node.js를 사용해서 앱을 실행할 때 현재 사용할 버전을 표시하는 것이며, "default"로 앱에서 버전을 지정할 때 사용하는 버전과는 다릅니다.

$ > nvm use v20.12.1
Now using node v20.12.1 (npm v10.5.0)

설치되지 않은 버전은 선택할 수 없으며, 버전 숫자를 정확하게 표시해야 합니다.

"default" 키워드로 지정하는 기본 사용 버전은 다음 커맨드로 매핑합니다.

$ > nvm alias default v20.12.1
default -> v20.12.1
$ > nvm ls
->     v20.12.1
        v21.7.2
         system
default -> v20.12.1
...

NodeSource 리포지토리로 설치

NodeSource가 유지하는 리포지토리는 Node.js의 여러가지 버전을 유지하고 관리하는 APT 리포지토리입니다.

NodeSource 리포지토리를 APT 패키지 관리자에 추가하려면 두 가진 사전 작업이 필요합니다.

  1. NodeSource 리포지토리를 추가하는데 필요한 종속 패키지를 설치해야 합니다. 패키지 3개(ca-certificates, curl, gnupg)를 설치합니다.
sudo apt update
sudo apt install ca-certificates curl gnupg

  1. NodeSource 리포지토리 GPG 키를 시스템으로 가져옵니다. 키링 디렉토리(/etc/apt/keyrings)가 있는지 확인해서 이미 있으면 만들 필요 없습니다. 키링 파일만 가져오면 됩니다.
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg

실행 후에 /et/apt/keyrings 디렉토리에 nodesource.gpg 파일이 있는지 확인합니다.

NodeSource 리포지토리를 추가할 준비가 되었으므로 NodeSource 리포지토리를 APT 패키지 관리자 리포지토리 리스트에 추가합니다. 앞서 최신 버전(v21.7.2)과 LTS 버전(v20.12.1)을 설치 해봤으므로 구버전인 18.x 버전을 설치해보겠습니다. 커맨드 중간의 "node_18.x"로 명시를 해서 APT 패키지 매니저로 설치하는 버전이 18.x 임을 표시합니다.

다른 버전을 설치하려면 "18.x"의 메인 버전 표시를 변경하면 됩니다. "21.x"로 표시하면 최신 버전인 21.7.x를 설치하게 됩니다.

echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_18.x nodistro main" | sudo tee /etc/apt/sources.list.d/nodesource.list

커맨드가 복잡해 보이지만 NodeSource 리포지토리의 경로를 가리키는 파일인 /etc/apt/sources.list.d/nodesource.list 파일(텍스트 파일)에 "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_18.x nodistro main" 문자열을 추가하는 것입니다.

앞서 가져온 키링으로 사인한 "https://deb..." 경로가 가져올 리포지토리라는 뜻입니다.

리포지토리가 추가되었으므로 Node.js를 APT로 설치합니다. 설치되는 버전은 18.x 버전이 됩니다. 다른 버전을 설치하려면 /etc/apt/sources.list.d/nodesource.list 파일을 텍스트 편집기로 열어서 메이저 버전 숫자를 수정하면 됩니다.

sudo apt update
sudo apt install nodejs