"PM2 없이 Node.js를 운영환경에 띄우는 건, 칼 없이 요리하는 것과 같다."
PM2란 무엇인가?
PM2는 Node.js 애플리케이션을 프로덕션(운영 환경)에서
효율적이고 안정적으로 실행/관리할 수 있게 도와주는 프로세스 매니저입니다.
정의
- Process Manager for Node.js
- 서버가 꺼지거나 에러가 발생해도 자동 재시작해줍니다.
- 로드 밸런싱(클러스터링)을 통해 멀티코어 CPU를 활용할 수 있습니다.
등장 배경
Node.js는 서버가 하나의 프로세스이기 때문에
- 에러가 터지면 서버 자체가 꺼지고,
- 서버 재시작/관리도 수동으로 해야 했습니다.
이런 문제를 해결하기 위해 탄생한 것이 바로 PM2입니다.
PM2 설치 방법
설치는 매우 간단합니다.
npm install pm2 -g
-g
옵션은 전역(Global) 설치를 의미합니다.- 설치가 완료되면 전역 어디서나
pm2
명령어를 사용할 수 있습니다.
설치 확인
pm2 -v
버전이 출력되면 성공!
PM2 기본 명령어 총정리
애플리케이션 실행
pm2 start app.js
app.js
를 프로세스로 관리합니다.
실행 중인 프로세스 목록 보기
pm2 list
- 현재 PM2가 관리 중인 모든 프로세스를 테이블 형태로 보여줍니다.
특정 앱 종료
pm2 stop [앱이름 or id]
- 앱을 정지하지만 기록은 남아있습니다.
특정 앱 삭제
pm2 delete [앱이름 or id]
- 앱을 PM2 관리 목록에서 완전히 제거합니다.
모든 앱 재시작
pm2 restart all
- 모든 프로세스를 재시작합니다.
로그 보기
pm2 logs
- 실행 중인 앱들의 로그를 실시간으로 볼 수 있습니다.
PM2를 사용해야 하는 이유
이유 | 설명 |
프로세스 자동 복구 | 앱이 죽으면 자동으로 재실행 |
무중단 배포 (zero-downtime reload) | 서버를 끊지 않고 코드 업데이트 가능 |
로드밸런싱 지원 | CPU 코어별로 앱을 복제해서 부하 분산 |
모니터링 대시보드 제공 | 프로세스 상태를 실시간 모니터링 |
시작 스크립트 생성 | 서버 부팅 시 앱 자동 실행 |
PM2는 단순 관리 도구를 넘어
운영환경 필수 요소입니다.
PM2 심화 기능
Ecosystem 파일로 설정 관리
여러 앱을 관리할 때, 설정 파일을 작성할 수 있습니다.
ecosystem.config.js
module.exports = {
apps : [{
name : "my-app",
script : "./app.js",
instances: 2,
exec_mode: "cluster",
env: {
NODE_ENV: "development"
},
env_production: {
NODE_ENV: "production"
}
}]
}
실행 방법
pm2 start ecosystem.config.js
설정 파일을 이용하면 개발/운영 환경별로 분리된 설정 관리가 가능합니다.
클러스터 모드 (멀티코어 활용)
Node.js는 기본적으로 싱글스레드입니다.
하지만 PM2의 클러스터 모드를 사용하면
멀티코어 CPU를 전부 활용할 수 있습니다.
pm2 start app.js -i max
-i max
는 가능한 모든 코어를 사용하라는 의미입니다.
클러스터링을 통해
성능 극대화 + 가용성 향상이 가능합니다.
부팅시 자동 시작 설정
서버가 재부팅되더라도 앱을 자동으로 실행할 수 있습니다.
pm2 startup
- 사용 중인 OS에 맞는 명령어가 출력됩니다.
- 해당 명령어를 복사해서 터미널에 실행하면 설정 완료!
그 다음
pm2 save
- 현재 실행 중인 프로세스 리스트를 저장합니다.
PM2 모니터링 대시보드
pm2 monit
- CPU 사용량, 메모리 사용량, 요청 수 등
- 실시간 리소스 모니터링이 가능합니다.
직접 서버를 모니터링하면서 문제를 빠르게 파악할 수 있습니다.
실전 예제: Node.js 앱을 PM2로 배포하기
Node.js 서버 코드 (app.js)
const http = require('http');
const server = http.createServer((req, res) => {
res.write('Hello PM2!');
res.end();
});
server.listen(3000, () => {
console.log('Server running on port 3000');
});
PM2로 실행
pm2 start app.js --name my-server
--name
옵션으로 서버 이름을 지정할 수 있습니다.
앱 상태 확인
pm2 list
pm2 logs
서버 부팅 시 자동 실행 등록
pm2 startup
pm2 save
이제 서버를 재부팅해도 Node.js 앱이 자동으로 켜집니다!
마무리 요약
항목 | 요약 |
PM2란 | Node.js 프로세스 관리 도구 |
주요 기능 | 앱 실행, 자동 복구, 클러스터링, 무중단 배포 |
설치 명령어 | npm install pm2 -g |
핵심 명령어 | start, stop, restart, delete, logs, monit |
심화 기능 | ecosystem 설정 파일, 클러스터 모드, startup 자동 실행 |
728x90