최근 수정 시각 : 2026-01-13 10:52:42

PM2

[include(틀:소프트웨어 정보
, 이름 = PM2
, 로고 =
, 장르 = 프로세스 관리자, 로드 밸런서
, 개발 = Unitech
, 발표 = 2013년
, 최신 버전 = 5.3.0
, 언어 = JavaScript, Node.js
, 플랫폼 = 크로스 플랫폼
, 라이선스 = AGPL 3.0
, 사이트 = 공식 홈페이지
)]

1. 개요2. 주요 특징3. 사용법
3.1. 기본 명령어3.2. 설정 파일 (Ecosystem File)
4. 여담

1. 개요

PM2(Process Manager 2)는 Node.js 애플리케이션을 위한 프로덕션(Production) 레벨의 프로세스 관리자이다.

Node.js는 기본적으로 싱글 스레드(Single Thread)로 동작하며, 에러가 발생하면 프로세스가 종료되는 특성이 있다. 서버 운영 시 이러한 예기치 못한 종료를 방지하고, 서버가 재부팅되더라도 애플리케이션을 자동으로 실행해주며, 멀티 코어 시스템의 자원을 최대한 활용할 수 있도록 돕는 도구이다.

전 세계적으로 Node.js 백엔드 배포 환경에서 표준처럼 사용되고 있다.

2. 주요 특징

  • 무중단 서비스 (Keep Alive)

    • 애플리케이션이 크래시(Crash)되거나 예기치 않게 종료되면, PM2가 이를 감지하여 즉시 자동으로 재시작시킨다.
  • 클러스터 모드 (Cluster Mode)

    • Node.js의 단점인 싱글 스레드 한계를 극복하게 해준다. 서버의 CPU 코어 개수만큼 인스턴스를 복제하여 실행할 수 있으며, 들어오는 트래픽을 각 인스턴스에 자동으로 분산(Load Balancing)시켜 처리량을 극대화한다.
  • 무중단 배포 (Zero-downtime Reload)

    • 소스 코드를 업데이트하고 배포할 때, 서비스 전체를 껐다 켜는 것이 아니라 인스턴스를 하나씩 순차적으로 재시작하는 `reload` 기능을 제공하여 서비스 다운타임 없이 배포가 가능하다.
  • 모니터링

    • 터미널 기반의 대시보드(`pm2 monit`)를 통해 현재 실행 중인 프로세스의 CPU, 메모리 점유율을 실시간으로 확인할 수 있다.

3. 사용법

npm이나 yarn을 통해 전역(Global)으로 설치하여 사용하는 것이 일반적이다.

#!syntax bash
$ npm install pm2 -g

3.1. 기본 명령어

  • `pm2 start app.js`: 애플리케이션 실행
  • `pm2 start app.js -i max`: 클러스터 모드로 실행 (사용 가능한 모든 CPU 코어 사용)
  • `pm2 list`: 현재 실행 중인 프로세스 목록 확인
  • `pm2 monit`: 실시간 모니터링 대시보드 실행
  • `pm2 logs`: 로그 확인
  • `pm2 stop <id|name>`: 특정 프로세스 중지
  • `pm2 delete <id|name>`: 특정 프로세스 제거

3.2. 설정 파일 (Ecosystem File)

실무에서는 명령어를 일일이 치기보다 `ecosystem.config.js`라는 설정 파일을 만들어 관리한다. 이 파일에 환경 변수, 인스턴스 개수, 로그 경로 등을 정의해두면 `pm2 start ecosystem.config.js` 명령어 하나로 복잡한 설정을 한 번에 실행할 수 있다.

#!syntax javascript
module.exports = {
  apps : [{
    name   : "my-app",
    script : "./app.js",
    instances : "max",
    exec_mode : "cluster",
    env: {
      NODE_ENV: "development"
    },
    env_production: {
      NODE_ENV: "production"
    }
  }]
}

4. 여담

  • 개발 환경에서는 파일 변경을 감지해 재시작해주는 nodemon을 주로 쓰고, 배포(운영) 환경에서는 안정성을 위해 PM2를 쓰는 것이 국룰로 통한다.
  • Docker 컨테이너 환경에서도 사용되지만, 도커 자체가 프로세스 관리를 해주거나 쿠버네티스(k8s)가 오케스트레이션 역할을 하기 때문에, 도커 환경에서는 `node app.js`로 직접 실행하는 것을 권장하는 의견도 있다. 하지만 도커 컨테이너 내부에서도 로그 관리나 멀티 코어 활용(클러스터 모드)을 위해 PM2를 사용하는 경우도 여전히 많다.