개요 👋

PM2Node.js 에 최적화되어
애플리케이션을 유지보수하기 위해 사용되는 프로세스 관리 툴 이다.

즉, PM2 란,
Node.js 로 만들어진 프로그램을 잘 관리해주는 서비스 이다.


주요 기능 💥

1️⃣ Load Balancing
PM2 는 한 대의 서버에서 여러 인스턴의 애플리케이션을 실행할 수 있게 해 준다.
이를 통해 로드밸런싱과 리소스 활용도를 개선시킬 수 있다.

2️⃣ Auto Restart
PM2 는 애플리케이션에 문제가 발생 할 경우 자동으로 재 시작 해 준다.

3️⃣ Cluster Mode
Node.js 의 클러스터링 기능을 쉽게 사용할 수 있도록 지원한다.

4️⃣ Monitoring
애플리케이션의 성능과 에러를 실시간으로 모니터링 할 수 있다.

5️⃣ Logging
모든 프로세스 로그를 파일, 터미널 또는 다른 프로세스로 리다이렉트 할 수 있다.

6️⃣ Environment Management
다양한 환경변수 설정을 통해 개발, 테스팅, 프로덕션 등
다양한 환경에서 애플리케이션을 실행할 수 있다.

7️⃣ Startup Script
서버가 재 시작 될 때,
자동으로 애플리케이션을 시작할 수 있도록 스크립트를 생성 해 준다.

8️⃣ Zero-Downtime Reload
코드 변경사항을 적용하거나 스케일을 조정할 때,
서비스 중단 없이 리로드가 가능하다.


장점 ❓

1️⃣ Resilience
PM2 가 애플리케이션을 모니터링하고,
문제가 발생하면 자동으로 복구하기 때문에 높은 내구성을 가진다.

2️⃣ Efficiency
클러스터 모드와 로드 밸런싱 기능을 통해 서버의 자원을 효율적으로 사용할 수 있다.

3️⃣ Ease of Use
간단한 CLI 명령어를 통해 복잡한 작업을 쉽게 처리할 수 있다.

4️⃣ Developer-Friendly
로컬 개발 환경에서도 유용하게 사용할 수 있으며,
다양한 옵션과 플러그인을 통해 개발 프로세스를 편리하게 할 수 있다.

5️⃣ Community and Ecosystem
활발한 커뮤니티와 다양한 플러그인 지원을 지속적으로 업데이트한다.


명령어 🍑

1️⃣ 시작(실행)

pm2 start [실행시킬 프로세스]
pm2 start --name ["사용할 이름"] npm -- run ["실행할 script"]

2️⃣ 로그 확인

pm2 log [로그를 확인할 프로세스]

3️⃣ 중지

pm2 stop [중지 할 프로세스]

4️⃣ 재시작

pm2 reload [재 시작 할 프로세스]

5️⃣ 삭제

pm2 delete [삭제할 프로세스]

6️⃣ 모든 프로세스 중지 및 삭제

pm2 kill

명령어 적용 🚀

여느때와 같이 서버에서 API 를 호출하기 위해
pm2 log 1 명령을 실행하여 log 기록을 확인하려했지만,

정상적으로 실행이 되지 않아 ctrl + c 로 해당 명령문에서 탈출 후
pm2 reload 1 로 1번 index 를 재 시작 했지만 찾을 수 없다는 에러 메세지가 출력되었다.

역시 pm2 list 로 확인 해 보니 현재 실행중인 프로세스가 없었다.

사용할 프로세스를 실행시켜주기 위해
env 에 정의되어있는 경로를 실행해줄 package.json 을 확인한다.

해당 애플리케이션을 npm run serve 로 로컬 서버에 연결하여 실행하므로,
로컬 관련 스크립트에 담긴 정보를 불러온다.

pm2 start --name "[임의의 이름]" npm -- run local
pm2 start --name "[임의의 이름]" npm -- run local:history
pm2 start --name "[임의의 이름]" npm -- run local:price

실행한 프로세스를 pm2 list 를 실행 해 보면
프로세스가 데몬형태로 실행되고있음을 확인할 수 있다.

만약,
특정 프로세스를 잘못 실행시켜 중지 후 다시 실행시킬 경우
아래와 같이 index 번호가 계속하여 증가됨을 확인할 수 있다.

이처럼 인덱스의 증가를 원치 않는 경우엔,
pm2 kill 명령을 통해
실행중인 프로세스를 모두 중지하고 제거하고 다시 프로세스를 실행시키면 된다.


Reference 🌊

https://owldev.netlify.app/js/pm2-cmd/
https://taespapa.tistory.com/43
https://inpa.tistory.com/entry/node-%F0%9F%93%9A-PM2-%EB%AA%A8%EB%93%88-%EC%82%AC%EC%9A%A9%EB%B2%95-%ED%81%B4%EB%9F%AC%EC%8A%A4%ED%84%B0-%EB%AC%B4%EC%A4%91%EB%8B%A8-%EC%84%9C%EB%B9%84%EC%8A%A4
https://muna76.tistory.com/259
https://phsun102.tistory.com/147