
PM2의 사용법을 말하기 이전에, 프로세스가 무엇인지 짚고 넘어갑시다. "프로세스"라는 말을 들어보셨나요?
프로그램이란 말이 있는데, 프로세스는 프로그램과 무엇이 다른 걸까요?
프로세스는 엄밀하게 이야기하면, 컴퓨터 프로그램이 실행될 때 프로그램 실행에 필요한 내용이 컴퓨터 메모리에 적재된다는 의미를 담고 있습니다. 이 말이 조금 어렵다면, "실행 중인 프로그램"이라는 의미로 기억해도 무방합니다.
운영체제는 다양한 프로세스 관리 툴을 제공하는데, 이 중 여러분이 기억하셔야 할 것은 ps 명령어입니다. ps 명령어의 사용법을 통해 프로세스를 확인하는 법을 알아두면 서버 운영에 큰 도움이 됩니다.

여러분이 ssh 프로그램을 통해 EC2에 접속하고, 터미널을 강제 종료한다고 가정해 봅시다.
이때 과연 어떤 일이 발생할까요. 첫 번째로는, 로컬에 띄워져 있던 ssh 프로세스가 강제 종료됩니다.
ssh 프로세스는 강제 종료 시, EC2 상의 프로세스도 같이 종료시킵니다. 따라서 EC2 상의 node 프로세스도 종료됩니다(다른 말로 실행되고 있던 서버가 종료됩니다)

포인트는, 웹 서버가 구동 중인 node 프로세스가 종료되지 않게 해야 한다는 것입니다. node 프로세스가 ssh 접속 여부와는 상관없이 늘 실행되게 만들 수는 없을까요?

사실, 프로그램을 백그라운드에서 실행하는 방법은 linux/unix 계열 운영체제에서는 `&`라는 키워드를 명령 뒤에 붙여 백그라운드 실행으로 만들어줄 수 있습니다.
예를 들어 node.js 앱을 실행할 경우, 마지막에 `&`를 붙여주면 되는 것이죠. Output으로 등장하는 29364와 같은 숫자는 PID, 즉 프로세스 ID입니다. PID를 알면, fg 명령을 통해 실행 중인 프로그램을 포어그라운드로 부를 수도 있고, kill 명령을 통해 백그라운드에서 실행 중인 프로세스를 종료할 수도 있습니다.

이번 시간엔, 이런 명령어 대신에 프로세스를 전문적으로 관리해 주는 프로그램을 하나 소개하고자 합니다. 바로 프로세스 매니저(Process Manage) PM2입니다.
PM2는 node.js로 실행되는 프로그램(프로세스)를 관리해 주며, 백그라운드에서 실행되게 만들 수 있습니다.

단순히 백그라운드 실행뿐만 아니라 슬라이드에 언급된 것처럼, 다양하고 강력한 기능을 제공합니다.
이중 Hot Reload와 같이 프로그램이 변경될 때 자동으로 재시작하게 도와준다거나, 프로그램 실행 중 에러가 나서 서버가 종료되면, 다시 자동으로 실행시켜주는 기능을 제공합니다. 또한, 서버 운영에서는 필수라고 할 수 있는 로그 관리를 좀 더 전문적으로 할 수 있습니다. 클러스터 모드와 같이 멀티 코어 CPU를 최대한 활용하는 옵션도 있습니다.

서버를 접속한 상태에서 PM2를 설치하는 법을 안내하겠습니다. npm install pm2 -g 명령으로 PM2를 설치합시다.

PM2를 전역에 설치하고 나면, "pm2 start 파일 이름" 명령을 이용해 node.js 앱을 백그라운드로 실행할 수 있습니다. PM2를 통해서 정상적으로 프로세스가 실행된 것을 확인할 수 있습니다.
PM2로 서버를 실행하면, 이제 터미널을 종료하더라도, node.js 애플리케이션이 프로세스로 실행됩니다. 중단 및 재시작, 또는 상태를 보기 위한 명령어는 반드시 기억해야 합니다. "pm2 start" 명령어 외에 유용한 명령어로
"pm2 stop" 프로세스 중지

우리는 이미 전 실습을 통해 1024번 아래의 포트 번호를 이용해서 서버를 실행시키는 경우, 관리자 권한이 필요한 것을 알고 있습니다.
일반적인 'pm2 start' 명령어로 프로세스를 실행할 경우, 위 화면과 같이 'errored' 상태가 되며 서버가 정상적으로 실행되지 않는 것을 확인할 수 있습니다.
'pm2 log' 명령어를 통해 어떤 문제가 생겼는지 확인해 봅니다. log를 확인해 보니 pm2가 프로세스를 실행시킬 때 관리자 권한으로 실행하지 못해 생긴 문제로 보입니다.
PM2에 관리자 권한을 부여하기 위해서는 'authbind'라는 패키지를 추가적으로 설치해야 합니다.

터미널에서 아래 명령어를 차례대로 입력하여 authbind를 설치합니다.
sudo apt-get update
sudo apt-get install authbind
sudo touch /etc/authbind/byport/80
sudo chown ubuntu /etc/authbind/byport/80
sudo chmod 755 /etc/authbind/byport/80
authbind --deep pm2 update
authbind의 설치를 완료한 뒤, 먼저 'pm2 ls' 명령어를 통해 어떤 프로그램이 PM2의 프로세스 리스트에 등록되어 있는지 확인합니다.
'app' 프로세스가 리스트에 있다면 'pm2 delete app.js' 명령어를 통해 프로세스를 삭제합니다. authbind 설치 전에 실행되고 있던 프로세스에는 관리자 권한을 부여하지 못하기 때문입니다.
PM2에 관리자 권한을 부여하기 위해서는 'authbind --deep' 명령어를 앞에 추가해야 합니다.
'authbind --deep pm2 start app.js' 명령어를 통해 서버를 다시 실행하면 이번에는 문제없이 작동할 것입니다.
'AWS 백엔드 배포' 카테고리의 다른 글
호스팅 영역에 별칭 레코드 생성(ELB) (0) | 2022.05.14 |
---|---|
ELB 생성 및 ACM을 통한 인증서 발급 (0) | 2022.05.14 |
Security Group (0) | 2022.05.14 |
EC2 인스턴스 생성/연결 Hands-on (0) | 2022.05.11 |