이 글에서는 로컬환경에서 개발한 노드 웹애플리케이션을 간단한 명령어 입력을 통해 테스트 용도로 사용할 우분투 서버에서 실행하는 방법을 설명하려고 합니다.
디테일한 설명보다는 코드와 주석을 순서대로 따라하신다면 우분투 서버에 노드 웹애플리케이션을 실행시킬 수 있습니다.

준비물

우분투 서버, 노드 애플리케이션


OS 최신버전 업데이트


# 설치 가능한 패키지 리스트를 최신화 하는 명령어
sudo apt update

# 현재 설치되어 있는 패키지들을 버전업 하는 명령어
sudo apt upgrade

# 패키지 의존성 때문에 설치되었지만 지금은 사용하지 않는 패키지를 삭제하는 명령어
sudo apt autoremove

APT (advance Packaging Tools)
우분투에서 사용하는 패키지 매니저 툴

이전 데비안 계열의 리눅스에서는 apt-get이나 apt-cache 등의 툴을 사용했었지만, 오랜 기간 다양한 옵션들이 추가되고 사용되어 명령어들이 복잡하고 지저분하게 되어, 자주 사용하는 옵션들을 정리해 만든 패키지 매니저 툴이 apt 입니다.
어떤 패키지 매니저 툴을 사용해도 상관 없으나, 이 글에서는 apt를 사용합니다.

Node.js 런타임 환경 구성

런타임 환경 구성을 위해 node.js를 설치하는 방법은 두가지가 있습니다.
첫번째는 직접 node.js의 특정 버전을 설치하는 방법, 두번째는 nvm과 같은 버전관리 패키지를 통해 node.js 특정 버전을 설치하는 방법입니다.
두 가지의 방법 모두 아래 정리된 명령어들을 통해 사용할 수가 있습니다.

Node.js를 바로 설치하는 방법

# curl 패키지 설치를 위한 명령어
sudo apt install curl

# 패키지 저장소에 node.js 추가
# 원하는 버전을 입력하면 됩니다. 아래는 18.x 버전을 설치하기 위한 예시입니다.
curl -sL https://deb.nodesource.com/setup_18.x | sudo -E bash -

# node.js 설치
# -y 옵션은 패키지 설치시 사용자 확인메시지에 모두 yes로 응답하게 하는 옵션입니다.
sudo apt install -y nodejs

nvm을 통해 Node.js를 설치하는 방법


# curl 패키지 설치를 위한 명령어
sudo apt install curl

# nvm 패키지 설치
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash

# 설정파일 reload를 통해 cli에서 nvm 명령어 사용할 수 있게 설정합니다.
source ~/.bashrc

# nvm 버전 확인 명령어를 통해 패키지 설치 완료 여부를 확인합니다.
nvm -v

# nvm을 통해 node.js 설치합니다.
# 원하는 버전을 입력하면 해당 버전을 설치할 수 있습니다.
nvm install 18

# 사용할 node.js 버전을 선택합니다.
nvm use 18

PM2 패키지 설치

PM2 패키지는 노드 애플리케이션의 프로세스를 관리해주는 패키지 입니다.
이 패키지를 이용하면 서버 상에 업로드 할 애플리케이션을 중단되지 않고 지속적으로 실행될 수 있게 할 수 있습니다.


# node package manager를 이용해 pm2 패키지를 설치합니다.
# -g 옵션은 패키지를 전역적으로 설치할 때 사용합니다.
npm install -g pm2

# pm2 설치 확인을 위해 아래 명령어를 입력합니다.
pm2 -v

위 명령어를 입력해 버전이 출력됐다면 설치가 완료되었음을 확인할 수 있습니다.

Node 애플리케이션 실행

Node 애플리케이션 실행을 위해서는 미리 준비한 애플리케이션의 프로젝트 폴더를 우분투로 이동하는 작업이 필요합니다.
로컬에 저장된 파일이라면 FTP를 통해서, 깃 저장소에 등록된 소스라면 git을 이용한 방법을 이용해서 옮기는 등의 방법이 있습니다.
자유롭게 원하는 방식으로 원하는 위치로 소스파일을 옮겨주시기 바랍니다.
저는 /var/www/mynodeapp 경로에 소스파일을 옮겨주겠습니다.

소스파일을 모두 옮긴 후 해당 경로로 이동해 pm2를 이용해 노드 애플리케이션을 실행시킵니다.


# 현재 위치한 디렉토리 이동
cd /var/www/mynodeapp

# PM2를 이용해 Node 애플리케이션 실행
pm2 start app.js

# PM2 프로세스 실행과 관련된 명령어들
pm2 start app.js --watch // 소스코드 변경시 자동 재실행
pm2 start app.js --name {app_name} // 프로세스 이름 설정
pm2 start app.js -i max // 클러스터링 (cpu 최대 개수로 설정)
pm2 start app.js -i {number} // 클러스터링 (cpu 개수 설정)

# PM2 프로세스 실행 확인
pm2 ls

웹서버(NginX) 설치 및 설정

우선 웹서버의 역할을 하는 NginX를 설치합니다.


# NginX 설치
sudo apt install nginx

# 리눅스 서버 재부팅 시 NginX 자동시작 설정
sudo systemctl enable nginx

# nginx 시작 설정
sudo systemctl start nginx

# nginx 동작 및 상태 확인
sudo systemctl status nginx


이제 웹서버(NginX)와 구동하고있는 Node 애플리케이션을 연결하는 작업을 진행합니다.


# NginX 설정파일 경로로 이동
cd /etc/nginx/sites-available

# 설정파일 편집
vi default

# default 파일에 아래 작성된 server 노드를 추가합니다
server {
	listen 80;
	# server_name 영역에 도메인 입력
	server_name www.sample.com sample.com;
	
	location / {
		# proxy_pass에 접근 IP 및 포트 입력
		proxy_pass http://192.168.0.1:3000;
		proxy_http_version 1.1;
		proxy_set_header Upgrade $http_upgrade;
		proxy_set_header Connection $http_connection;
		proxy_set_header Host $http_host;
		proxy_cache_bypass $http_upgrade;
	}
}

# 설정파일 수정 후 NginX 재 구동 처리
sudo nginx -t // 설정파일 구문 오류 검사
sudo nginx -s reload // nginx 재구동


이렇게 NginX 설정까지 마무리하면 지정한 도메인 또는 서버의 IP를 통해 개발한 Node 애플리케이션에 접근할 수 있게 됩니다.