나는 AWS EC2를 빌려서 node로 만든 프로젝트를 배포할 때 PM2를 설치하여 동작시킨다. 하지만 실질적으로 PM2 무엇인지 정확히 모르고, 그저 처음 프로그래밍을 배울때 이렇게 한다고 해서 사용해왔다. PM2가 무엇인지 알아볼 필요성이 있다고 판단하여 이와 같은 포스팅을 작성하게 되었다.
우선 gitbash를 이용해서 내 프로젝트의 파일의 클론은 따와서 npm start를 통해서 웹서버를 실행할 수는 있다. 하지만, 이는 bash창을 끄는것과 동시에 서버가 다운된다. 이러한 점에서 생각해보면 PM2는 내 서버를 bash가 꺼져도 유지될 수 있도록 해당 컴퓨터(AWS EC2)에서 내 서버를 백그라운드 프로세스로 동작시켜 줄 수 있도록 해준다고 예상할 수 있다.
그러면 PM2에 대해서 알아보자.
PM2의 공식 페이지에서는 "PM2는 응용 프로그램을 관리하고 온라인 상태로 유지하는 데 도움이 되는 데몬 프로세스 관리자"라고 설명한다.
❓여기서 데몬(deamon)은 컴퓨터 운영 체제에서 백그라운드에서 실행되는 프로세스를 의미한다.
즉 백그라운드에서 실행되는 프로세스를 관리해주는 도구라고 할 수 있다. 설명된 내용에 적혀있지는 않지만 PM2는 node.js로 만들어진 어플리케이션을 관리하기 위해 사용되는 프로세스 관리자이다.
물론 node.js뿐만아니라 파이썬이나 다른 언어로 작성된 어플리케이션 또한 실행할 수 있다. 하지만 다른 언어에 포커싱된 다른 프로세스 관리툴이 존재하기 때문에 되도록이면 node.js어플리케이션을 구동할 때 사용하자.
😀필자는 아직 node로만 서버들을 배포해 보고 운영해보았기 때문에 PM2가 npm으로 설치하는 하나의 라이브러리라고 생각하고 있었는데 이렇게 알아보니, 라이브러리보다는 툴이나 도구라고 생각할 수 있고, 다른 환경으로 작성된 어플리케이션은 그에 맞는 다른 프로세스관리자를 통해 배포하고 관리한다는 것을 알아볼 수 있었다.
설치방법은 간단하게 CLI창에서 아래의 명령어를 실행해 주면된다.
npm i pm2 -g
일반적인 npm으로 설치하는 패키지들 처럼 pm2또한 패키지처럼 npm으로 설치할 수 있으며 -g옵션을 통해 서버컴퓨터에 전역으로 설치해준다.
이후 본인의 프로젝트에 맞게 start명령어를 통해 동작시키면된다.
pm2 start app.js
javascript로 만들어진 app.js파일을 구동하기 위해서는 위와같은 명령어를 사용하면되고, 만약 typescrtipt로 작성된 프로젝트라면 tsc명령어를 통해서 javascript를 컴퍼일하고나서 start명령어를 디렉토리까지 작성해서 사용해주면된다.
pm2 start dist/src/main.js
위의 명령어는 typescript로 작성된 main.ts파일을 위 명령어를 사용하기 전에 javascript로 컴파일 한 후 pm2로 어플리케이션을 구동하기 위한 명령어 이다. dist/src/main.js
부분에 본인에게 맞는 디렉토리를 작성해 주면된다.
어플리케이션 시작
pm2 start 파일명
어플리케이션 갱신
pm2 reload (파일명 || id)
pm2 reload 명령어는 애플리케이션을 중단하지 않고 새로운 코드로 갱신한다.
어플리케이션 재시작
pm2 restart (파일명 || id)
pm2 restart 명령어는 현재 실행 중인 애플리케이션을 강제로 중지하고 다시 시작한다.
어플리케이션 중지
pm2 stop (파일명 || id)
pm2 stop 명령어는 현재 실행 중인 어플리케이션을 중지시킨다.
어플리케이션 삭제
pm2 delete (파일명 || id)
pm2 delete 명형어는 해당하는 어플리케이션을 pm2목록에서 삭제한다.
⛔어플리케이션 재시작과 갱신은 조금 다른특징을 가진다 둘 다 재시작하는 것은 같지만, reload는 중단하지 않고 재시작하고 restart는 강제로 종료하고 다시 시작하는 것이다.
어플리케이션 요약정보확인
pm2 list || ls || status
어플리케이션 로그정보확인
pm2 logs
pm2로그와 에러로그, 어플리케이션 로그를 각각 15줄씩 최신내용을 확인할 수 있다.
2-1. 원하는 만큼 로그 내용확인
pm2 logs --line 숫자
최근 로그를 (숫자)만큼 모두 표시해준다.
2-2 원하는 로그만 확인
pm2 logs 원하는내용( --err , --out )
--err은 에러로그만 확인, --out은 어플리케이션 로그만 확인
PM2 어플리케이션 대시보드 확인
pm2 monit