프로젝트를 진행하면서 AWS에 웹 사이트를 올려야 하는 상황이 있었다. 해당 사이트를 vue.js로 개발했는데, 이를 AWS에서 계속 올려두어야 했다.
그냥 백그라운드에서 실행하는 것보다 pm2 모듈로 프로세스를 관리하면 여러 장점이 있는데, 생각보다 편리하고 좋았어서 사용 방법을 간단히 정리하고자 한다.
PM2란?
node.js 어플리케이션 관리를 도와주는 Process manager이다. 프로세스를 올려두면, 항상 모니터링 하고 있을 수 없기 때문에 PM2라는 모듈을 이용하면 간단한 설정으로 인해 쉽게 여러 프로세스들을 관리할 수 있다.
특징 및 장점
- 프로그램이 예기치 못한 종료가 발생하거나 코드가 수정되었을 때 프로세스를 다시 올려준다.
- 실행중인 프로세스를 한번에 확인할 수 있다.
- 싱글 스레드 기반인 node.js를 멀티 코어나 하이퍼 스레딩 사용이 가능하다.
PM2 사용법
PM2 설치 및 업데이트
$ npm install -g pm2@latest
$ pm2 update
PM2 실행
$ pm2 start [js 파일명]
실행 시 사용할 수 있는 여러 옵션이 존재한다.
- --name : 이름 지정
- --watch : 코드 수정이 발생하면 서버를 자동으로 다시 시작한다.
- -i [코어 개수 | max] : 클러스터 모드
- --log [log 저장경로] : 로그 저장
- -- arg 1 arg2 arg3 : 인수 전달
다음과 같이 js 파일을 구성하고 실행시켜서 프로세스가 올라갈 수 있도록 한다. 필자는 가볍게 하나의 프로세스만 올리기 때문에 exec_mode를 fork로 주었는데, 클러스터 모드로 올리고자 한다면 cluster로 바꿔주면 된다.
ecosystem.config.js
module.exports = {
apps: [
{
name: 'joongsint',
script: './node_modules/@vue/cli-service/bin/vue-cli-service.js',
args: 'serve --port 3000',
instances: 0,
exec_mode: 'fork',
},
],
};
$ pm2 start ecosystem.config.js
PM2 로그 표시
$ pm2 logs
PM2 프로세스 증설
$ pm2 scale app +n
+n개를 증설한다. +를 붙이지 않으면, 최대 프로세스 개수가 지정된다.
PM2 시작 스크립트 설정
$ pm2 startup
$ pm2 save
pm2로 실행할 서버를 항상 시작하도록 부팅 스크립트에 등록한다.
PM2 상태 확인
$ pm2 status
start 할 때 띄워진 프로세스 관리 창을 볼 수 있다.
PM2 프로세스 종료
$ pm2 stop [ name | id | all ]
이외에도 PM2 docs에서 다양한 명령어를 확인하여 프로세스를 편리하게 관리 할 수 있다. AWS를 이용해서 서비스를 올릴 상황이 있다면 pm2를 사용해야 겠다.