PM2는 Node.js 애플리케이션의 프로세스를 관리하고, 서버가 예기치 않게 종료되었을 때 자동으로 재시작해주며, 부하 분산을 위한 클러스터링, 로그 관리 등 다양한 편의 기능을 제공합니다. Master께서 개발 중인 서비스를 안정적으로 운영하고, 중단 없는 서비스를 지향하신다면 PM2는 필수적인 도구라고 할 수 있습니다.
PM2로 Node.js Express 서버 실행하기 (Cheat Sheet)
PM2는 먼저 npm
이나 yarn
을 통해 글로벌로 설치해야 합니다.
npm install pm2 -g
# 또는
yarn global add pm2
기본 명령어 (Basic Commands)
명령어 | 설명 |
---|---|
pm2 start [app.js] |
app.js 파일을 실행하여 새로운 프로세스를 시작합니다. |
pm2 start [app.js] --name [앱이름] |
프로세스의 이름을 지정하여 시작합니다. (예: pm2 start app.js --name my-api ) |
pm2 list |
현재 PM2가 관리하고 있는 모든 프로세스 목록을 표시합니다. |
pm2 stop [ID 또는 이름] |
특정 프로세스를 중지합니다. (예: pm2 stop 0 또는 pm2 stop my-api ) |
pm2 restart [ID 또는 이름] |
특정 프로세스를 재시작합니다. |
pm2 delete [ID 또는 이름] |
특정 프로세스를 목록에서 삭제합니다. |
pm2 stop all |
모든 프로세스를 중지합니다. |
pm2 delete all |
모든 프로세스를 목록에서 삭제합니다. |
💡 활용 예시: Master께서 개발하신 Express 서버의 메인 파일이 server.js
라고 가정해 보겠습니다. pm2 start server.js --name backend-api
명령어로 서버를 실행하면, PM2가 해당 프로세스를 'backend-api'라는 이름으로 등록하고 백그라운드에서 실행시킵니다. 터미널을 종료해도 서버는 계속 동작합니다.
모니터링 및 로그 관리 (Monitoring & Logging)
명령어 | 설명 |
---|---|
pm2 monit |
실시간으로 모든 프로세스의 CPU, 메모리 사용량 등을 보여주는 대시보드를 엽니다. |
pm2 logs |
모든 프로세스의 로그를 실시간으로 스트리밍합니다. |
pm2 logs [ID 또는 이름] |
특정 프로세스의 로그만 확인합니다. |
pm2 flush [ID 또는 이름] |
특정 프로세스의 로그 파일을 비웁니다. |
클러스터 모드 (Cluster Mode) 🚀
클러스터 모드는 단일 인스턴스에서 실행되는 Node.js의 한계를 넘어, 서버의 CPU 코어 수만큼 프로세스를 복제하여 실행하는 기능입니다. 이를 통해 별도의 설정 없이도 간단하게 서버의 부하를 분산하고 성능을 극대화할 수 있습니다. 예를 들어, 8코어 CPU를 탑재한 서버에서 클러스터 모드를 사용하면, 1개의 요청을 처리하던 서버가 동시에 8개의 요청을 처리할 수 있게 됩니다.
명령어 | 설명 |
---|---|
pm2 start [app.js] -i [숫자] |
지정된 숫자만큼의 인스턴스(프로세스)를 클러스터 모드로 실행합니다. |
pm2 start [app.js] -i 0 또는 -i max |
사용 가능한 CPU 코어 수만큼 최대로 인스턴스를 생성하여 실행합니다. |
pm2 scale [이름] [숫자] |
실행 중인 앱의 인스턴스(클러스터) 수를 동적으로 늘리거나 줄입니다. |
pm2 reload [이름] |
다운타임 없이(Zero-downtime) 애플리케이션을 재시작합니다. 이전 프로세스가 종료되기 전에 새로운 프로세스를 먼저 띄워 중단 없는 서비스를 가능하게 합니다. |
Sheets로 내보내기
💡 활용 예시: pm2 start server.js -i 0 --name api-cluster
명령어를 사용하면, 서버의 모든 CPU 코어를 활용하여 Express 앱을 클러스터 모드로 실행합니다. 이는 서비스의 처리량을 크게 향상시킬 수 있습니다.
설정 파일 사용 (Ecosystem File)
매번 긴 명령어를 입력하는 대신, ecosystem.config.js
라는 설정 파일을 만들어 애플리케이션의 옵션을 체계적으로 관리할 수 있습니다.
- 설정 파일 생성:
pm2 ecosystem
명령어를 실행하면ecosystem.config.js
템플릿 파일이 생성됩니다. - 설정 파일 예시 (
ecosystem.config.js
):module.exports = { apps : [{ name : "my-express-app", // 애플리케이션 이름 script : "./server.js", // 실행할 스크립트 파일 instances: 0, // 클러스터 모드 인스턴스 수 (0 = CPU 코어 수만큼) exec_mode: "cluster", // 실행 모드 (cluster 또는 fork) watch : true, // 파일 변경 시 자동 재시작 env : { "NODE_ENV": "development", // 개발 환경 변수 }, env_production: { "NODE_ENV": "production", // 배포 환경 변수 } }] }
- JavaScript
- 설정 파일로 앱 실행:
명령어 | 설명 |
---|---|
pm2 start ecosystem.config.js |
설정 파일에 정의된 대로 앱을 시작합니다. |
pm2 start ecosystem.config.js --env production |
env_production 에 정의된 환경 변수를 사용하여 앱을 시작합니다. |
서버 부팅 시 자동 시작 설정
명령어 | 설명 |
---|---|
pm2 startup |
현재 운영체제에 맞춰 PM2 프로세스를 시스템 서비스로 등록하는 방법을 안내합니다. |
pm2 save |
현재 실행 중인 프로세스 목록을 저장하여, startup 설정 시 서버가 재부팅될 때 자동으로 복원되도록 합니다. |
pm2 unstartup |
시스템 서비스에 등록된 PM2를 제거합니다. |
근거 자료
- PM2 공식 문서 (Quick Start): PM2의 가장 기본적인 사용법과 명령어들을 소개하는 공식 가이드입니다.
- PM2 공식 문서 (Ecosystem File): 설정 파일인
ecosystem.config.js
의 상세한 옵션과 사용법에 대해 설명합니다. - DigitalOcean 튜토리얼: Node.js 애플리케이션을 PM2로 설정하는 방법에 대한 실용적인 가이드로, 실제 운영 환경에서의 설정 예시를 잘 보여줍니다.
#서버 #리눅스