updated_at: 2025-10-22 13:51

pm2를 이용한 Node.js 프로세스 관리 가이드

1. pm2란 무엇인가?

pm2는 Node.js 애플리케이션을 위한 프로덕션 레벨의 프로세스 관리자(Process Manager)입니다. forever와 마찬가지로 예기치 않은 에러로 인해 프로세스가 종료되었을 때 자동으로 재시작해주는 기본 기능을 제공하지만, 거기에 더해 무중단 서비스, 클러스터링, 모니터링, 로그 관리 등 운영 환경에 필수적인 고급 기능들을 내장하고 있습니다.

현재 Node.js 생태계에서 가장 널리 사용되는 프로세스 관리 도구이자 사실상의 표준(de facto standard)입니다.

2. pm2 설치

pm2는 전역(-g)으로 설치하여 어느 위치에서든 명령어를 사용할 수 있도록 합니다.

npm install pm2 -g

3. pm2 핵심 명령어

1) 프로세스 시작 (start)

Node.js 스크립트를 백그라운드에서 실행하고 관리를 시작합니다.

기본 사용법

pm2 start [실행할 스크립트 파일.js]

예시:

pm2 start app.js

이름 지정 및 옵션 추가 (권장)

--name 옵션으로 프로세스에 고유한 이름을 부여하면 관리가 매우 편리해집니다.

pm2 start app.js --name "api-server"

클러스터 모드로 시작 (성능 극대화)

pm2의 가장 강력한 기능 중 하나입니다. -i 옵션으로 실행하면 별도의 코드 수정 없이 CPU 코어 수만큼 프로세스를 생성하여 요청을 분산 처리합니다. 이를 통해 Node.js의 단일 스레드 한계를 극복하고 성능을 극대화할 수 있습니다.

# 사용 가능한 모든 CPU 코어를 사용하여 클러스터 모드로 실행
pm2 start app.js -i max --name "api-cluster"

# 4개의 프로세스만 사용
pm2 start app.js -i 4 --name "api-cluster"

주의: 클러스터 모드는 상태를 공유하지 않으므로, 세션 관리 등은 Redis와 같은 외부 저장소를 사용해야 합니다.

2) 실행 목록 확인 (list)

pm2가 관리 중인 모든 프로세스의 목록을 확인합니다.

pm2 list

단축 명령어:

pm2 ls

실행 결과 예시:


┌────┬──────────────────┬──────────┬───┬─────┬───────────┬─────────┬──────────┬─────┐
│ id │ name │ mode │ ↺ │ pid │ status │ cpu │ memory │ user│
├────┼──────────────────┼──────────┼───┼─────┼───────────┼─────────┼──────────┼─────┤
│ 0 │ api-server │ fork │ 15│ 12345 │ online │ 0.3% │ 80.5 MB │ user│
│ 1 │ api-cluster │ cluster │ 2 │ 12348 │ online │ 15.6% │ 95.8 MB │ user│
│ 2 │ api-cluster │ cluster │ 2 │ 12349 │ online │ 12.1% │ 92.4 MB │ user│
└────┴──────────────────┴──────────┴───┴─────┴───────────┴─────────┴──────────┴─────┘

  • id / name: 프로세스를 식별하는 고유 ID와 이름입니다.
  • mode: fork (단일) 또는 cluster 모드를 표시합니다.
  • ↺ (restarts): 자동 재시작 횟수입니다.

3) 프로세스 종료 (stop)

실행 중인 프로세스를 중지합니다.

# 이름으로 종료 (가장 일반적)
pm2 stop api-server

# ID로 종료
pm2 stop 0

# 모든 프로세스 종료
pm2 stop all

4) 프로세스 재시작

restart (일반 재시작)

기존 프로세스를 종료(stop)한 후 다시 시작(start)합니다. 짧은 다운타임이 발생합니다.

pm2 restart api-server

reload (무중단 재시작 - ★강력 추천★)

pm2의 핵심 기능입니다. 기존 프로세스는 유지한 채 새로운 프로세스를 먼저 실행하고, 새 프로세스가 준비되면 기존 프로세스를 종료합니다. 따라서 서비스 중단 없이 애플리케이션을 업데이트할 수 있습니다.

pm2 reload api-server

# 모든 프로세스를 무중단 재시작
pm2 reload all

운영 환경에서는 restart 대신 reload를 사용하는 것이 기본입니다.

4. pm2의 유용한 기능들

1) 실시간 모니터링 대시보드 (monit)

터미널에서 CPU, 메모리 사용량, 로그, 재시작 횟수 등 프로세스의 상세 정보를 실시간으로 확인할 수 있는 대시보드를 제공합니다.

pm2 monit

대시보드를 종료하려면 q 키를 누릅니다.

2) 로그 관리 (logs)

pm2는 로그를 자동으로 관리하며, 보기 쉬운 명령어를 제공합니다.

# 특정 앱의 실시간 로그 보기 (에러와 출력을 모두 보여줌)
pm2 logs api-server

# 실시간 에러 로그만 보기
pm2 logs api-server --err

# 로그 파일의 마지막 200줄만 보기
pm2 logs api-server --lines 200

# 모든 로그 삭제
pm2 flush

로그 파일의 기본 경로는 ~/.pm2/logs/ 입니다.

3) 프로세스 삭제 (delete)

pm2 관리 목록에서 프로세스를 완전히 제거합니다. (프로세스가 실행 중이면 먼저 중지됩니다.)

pm2 delete api-server

4) 서버 재부팅 시 자동 실행 설정

서버가 예기치 않게 재부팅되더라도 pm2가 관리하던 프로세스들을 자동으로 다시 실행하도록 설정할 수 있습니다.

# 1. 현재 실행 중인 프로세스 목록을 저장
pm2 save

# 2. 현재 OS에 맞는 시작 스크립트를 생성하고 등록
pm2 startup

pm2 startup 명령을 실행하면, 터미널에 sudo ...로 시작하는 명령어가 나타납니다. 이 명령어를 복사하여 그대로 실행해주어야 시스템 서비스에 등록됩니다.

5. forever vs pm2 비교

기능 forever pm2 추천
기본 기능 (자동 재시작) 지원 지원 -
무중단 재시작 미지원 (restart만 가능) 지원 (reload) pm2
클러스터링 (성능) 미지원 (직접 구현 필요) 내장 기능 (-i max) pm2
모니터링 list로 상태만 확인 실시간 대시보드 (monit) pm2
로그 관리 파일 출력만 지원 자동 분리, 시간별/용량별 분할(rotation) pm2
서버 재부팅 시 자동 실행 별도 스크립트 필요 내장 기능 (startup, save) pm2
사용 편의성 매우 간단하고 가벼움 간단하며, 기능이 풍부함 개인/개발용: forever, 운영/협업용: pm2

결론

forever는 가볍고 간단한 스크립트를 빠르게 실행하고 관리하는 데 적합합니다. 하지만 안정적인 서비스 운영을 위한 무중단 배포, 성능 관리, 상세 모니터링이 필요한 프로덕션 환경에서는 pm2가 훨씬 더 강력하고 적합한 솔루션입니다.

특별한 이유가 없다면, 새로운 Node.js 프로젝트에는 pm2를 사용하는 것을 강력히 권장합니다.

평점을 남겨주세요
평점 : 2.5
총 투표수 : 1

질문 및 답글