PM2 (Process Manager 2)란?
PM2는 Node.js 애플리케이션을 위한 프로세스 관리자(Process Manager)로, 서버 환경에서 애플리케이션을 안정적으로 실행하고, 관리 및 모니터링할 수 있도록 도와준다. PM2는 단순한 프로세스 실행 도구가 아니라, 애플리케이션을 자동으로 재시작하고, 로드 밸런싱을 제공하며, 로그 관리를 수행하는 강력한 기능을 제공한다.
PM2의 역사
PM2는 2013년 Alexandre Strzelewicz에 의해 처음 개발되었다. 그는 Node.js 기반 애플리케이션을 서버에서 쉽게 관리하고자 하는 목표로 이 프로젝트를 시작했다. PM2는 빠르게 성장하여 현재 Node.js 애플리케이션을 운영하는 가장 인기 있는 프로세스 관리 도구 중 하나가 되었다.
PM2의 개념 및 원리
PM2는 **마스터 프로세스(Master Process)**와 여러 개의 **워커 프로세스(Worker Process)**로 구성된다.
마스터 프로세스는 PM2의 핵심 역할을 하며, 실행 중인 애플리케이션을 감시하고, 장애 발생 시 자동으로 재시작하는 기능을 수행한다. 워커 프로세스는 개별 애플리케이션을 실행하는 역할을 한다.
PM2는 다음과 같은 주요 기능을 제공한다.
- 백그라운드 실행: 터미널을 닫아도 애플리케이션이 계속 실행됨
- 자동 재시작: 애플리케이션이 크래시되거나 종료되면 자동으로 다시 실행
- 로드 밸런싱: 클러스터 모드를 사용해 여러 개의 프로세스를 실행하여 부하 분산
- 로그 관리: 실행 중인 애플리케이션의 로그를 저장 및 확인
- 메모리 및 CPU 모니터링: 실시간으로 애플리케이션 상태를 확인
PM2 설치
PM2는 npm(Node Package Manager)을 사용하여 간단하게 설치할 수 있다.
npm install -g pm2
이렇게 설치하면, 터미널에서 pm2
명령어를 사용할 수 있다.
PM2 기본 사용법
PM2를 사용하여 Node.js 애플리케이션을 실행하는 기본적인 방법은 다음과 같다.
pm2 start app.js
위 명령어는 app.js
를 백그라운드에서 실행한다. 실행한 애플리케이션 목록을 확인하려면
pm2 list
를 입력하면 된다.
실행 중인 애플리케이션을 중지하려면
pm2 stop app
삭제하려면
pm2 delete app
명령어를 사용한다.
PM2 고급 기능
- 환경 변수 설정
pm2 start app.js --name "my-app" --watch --env production
위 명령어는 애플리케이션을 “my-app”이라는 이름으로 실행하고, 변경 사항을 감지하며, 프로덕션 환경 변수를 적용한다. - JSON 설정 파일 사용
여러 개의 애플리케이션을 한 번에 실행하려면ecosystem.config.js
파일을 사용할 수 있다.module.exports = { apps: [ { name: "my-app", script: "app.js", instances: 2, exec_mode: "cluster", watch: true, env: { NODE_ENV: "production" } } ] };
위 설정 파일을 적용하려면pm2 start ecosystem.config.js
를 실행하면 된다. - 자동 시작 설정
서버가 재부팅되더라도 PM2가 자동으로 애플리케이션을 실행하도록 설정할 수 있다.pm2 startup pm2 save
- 로그 및 모니터링
- 실시간 로그 보기:
pm2 logs
- 애플리케이션 상태 모니터링:
pm2 monit
- 실시간 로그 보기:
PM2 클러스터 모드
PM2는 단일 프로세스뿐만 아니라, 클러스터 모드를 지원하여 여러 개의 인스턴스를 동시에 실행할 수 있다.
pm2 start app.js -i max
위 명령어는 서버의 모든 CPU 코어를 사용하여 애플리케이션을 실행한다.
PM2 vs 기타 프로세스 관리자
PM2는 Node.js 환경에서 가장 널리 사용되지만, forever, Supervisor, Systemd 같은 다른 프로세스 관리자도 존재한다. PM2는 직관적인 CLI, 강력한 로드 밸런싱 기능, 쉬운 설정 파일 등을 제공하기 때문에 Node.js 기반 애플리케이션에서는 가장 선호되는 도구이다.
PM2 사용 예제
- Express 서버 실행
pm2 start server.js --name express-server
- NestJS 애플리케이션 실행
pm2 start dist/main.js --name nest-app
- React/Vue/Nuxt 빌드 후 실행
pm2 serve build 3000 --spa --name react-app
PM2의 단점
- 메모리 사용량이 많아질 수 있음
- 일부 기능이 완전히 자동화되지 않아 추가적인 설정이 필요
- 대규모 애플리케이션에서는 Kubernetes 같은 컨테이너 기반 솔루션이 더 적합
결론
PM2는 Node.js 애플리케이션을 안정적으로 실행하고 관리하는 강력한 도구다. 자동 재시작, 로드 밸런싱, 로깅 및 모니터링 기능을 제공하여, 개발 및 운영 환경에서 매우 유용하다. 특히 서버에서 장기적으로 실행해야 하는 애플리케이션을 관리할 때 필수적인 도구다.