About PM2
PM2는 Node.js 및 기타 자바스크립트 런타임 기반 애플리케이션을 백그라운드에서 안정적으로 실행하고, 자동 재시작, 리소스 모니터링, 로깅, 클러스터링 등의 기능을 제공하는 프로세스 관리자이다. 특히 운영 환경에서 서버 애플리케이션을 항상 실행 가능한 상태로 유지하는 데 유용하다.
주요 개념
- 프로세스 관리: 애플리케이션을 데몬 형태로 실행하여 종료되지 않도록 유지.
- 자동 재시작: 예기치 않은 오류 발생 시 자동으로 재시작.
- 로그 관리: 표준 출력(
stdout)과 에러(stderr) 로그를 별도 저장. - 클러스터링 지원: 다중 CPU 코어를 활용하여 성능 최적화.
주요 명령어
pm2 start app.js # JavaScript 애플리케이션 실행
pm2 start src/index.ts --interpreter bun # bun 런타임으로 TypeScript 파일 실행
pm2 stop all # 실행 중인 모든 프로세스 중지
pm2 restart my-app # 특정 앱 재시작
pm2 delete all # 모든 프로세스 중지 및 목록에서 제거
pm2 list # 실행 중인 앱 목록 간략히 보기
pm2 status # 프로세스 상태 요약 보기
pm2 logs # 실시간 로그 확인
pm2 monit # CPU, 메모리 등 리소스 실시간 모니터링ecosystem.config.js 예시
PM2는 여러 애플리케이션을 구성 파일 하나로 관리할 수 있도록 ecosystem.config.js를 지원한다.
module.exports = {
apps: [
{
name: "my-app",
script: "src/index.ts",
interpreter: "bun",
watch: true, // 파일 변경 시 자동 재시작
instances: 1, // 클러스터 모드 사용 시 인스턴스 수
env: {
NODE_ENV: "development"
},
env_production: {
NODE_ENV: "production"
}
}
]
}Bun과 함께 사용할 때 주의사항
--interpreter bun옵션을 사용하면.ts파일을 직접 실행할 수 있음bun은 자체적으로 TypeScript 실행 기능을 제공하므로 별도 빌드 없이도 구동 가능bun이 시스템 PATH에 있어야 PM2가 인식 가능
상태 점검 및 헬스체크 팁
- PM2 로그 확인:
pm2 logs또는pm2 logs <앱이름> - 애플리케이션 내에
/health등의 엔드포인트를 만들어curl등으로 상태 확인 가능 - 포트 점유 여부 확인:
lsof -i :3000,netstat -anp
기타 팁
- 설정 변경 후
pm2 reload ecosystem.config.js로 반영 가능 - PM2 상태 영구 저장:
pm2 save - 시스템 재부팅 시 자동 실행 설정:
pm2 startup
PM2는 단순한 실행 도구를 넘어, 운영 환경에서 안정성을 높이는 데 핵심적인 역할을 한다. 특히 Bun과 함께 사용할 경우, 설정만 정확히 해주면 컴파일 없이 TypeScript 애플리케이션을 매우 빠르게 배포할 수 있다.