Node.js 애플리케이션을 운영하다 보면, 서버를 재부팅하거나 윈도우 업데이트가 적용될 때마다 앱이 자동으로 다시 켜져야 안정적인 서비스 운영이 가능합니다.
리눅스에서는 pm2 startup으로 쉽게 systemd에 붙일 수 있지만, 윈도우는 기본적으로 지원되지 않아서 조금 다른 접근이 필요합니다. 이번 글에서는 윈도우에서 특정 계정(예: 서비스 계정)으로 PM2를 서비스로 등록하고, 리부팅 시 앱을 자동 재기동하는 방법을 정리합니다.
🛠️ 준비 사항
- Windows Server / Windows 10 이상
- Node.js (운영 시에는 LTS 버전(20.x) 권장)
- npm 전역(Global) 패키지 설치 권한
- PM2 (Node 프로세스 매니저)
1. Node.js & PM2 설치
먼저 Node.js를 설치합니다.
운영 안정성을 위해 LTS 버전을 추천합니다. (예: 20.15.1)
# Node.js 버전 확인
node -v
npm -v
# PM2 전역 설치
npm install -g pm2
# 정상 설치 확인
pm2 -v
2. PM2 홈 디렉터리 고정
윈도우에서 계정마다 PM2의 홈 디렉터리(.pm2)가 달라집니다.
운영 계정(예: admin) 기준으로 경로를 고정합니다.
setx PM2_HOME "C:\Users\admin\.pm2" /M
이제 PM2가 항상 같은 경로(C:\Users\admin\.pm2)를 사용합니다.
3. PM2 서비스 설치
윈도우에는 systemd가 없기 때문에, pm2-windows-service 모듈을 사용합니다.
npm install -g pm2-windows-service
pm2-service-install
실행하면 설치 마법사가 시작됩니다.
여기서 중요한 설정은 다음과 같습니다:
- Service name: 기본값 PM2
- User account: .\admin (운영 계정)
- Password: 계정 비밀번호
- PM2_HOME: C:\Users\admin\.pm2
- PM2_SERVICE_SCRIPTS: 비워두면, 이후 pm2 save로 저장한 덤프(dump.pm2) 기준으로 자동 실행
설치 완료 후 services.msc에서 PM2 서비스가 등록된 것을 확인할 수 있습니다.
👉 시작 유형을 자동으로 설정하세요.
4. 애플리케이션 등록
앱 루트에 ecosystem.config.js 파일을 생성합니다.
module.exports = {
apps: [
{
name: "qr-card",
cwd: "C:/www/qr.card.com",
script: "node_modules/next/dist/bin/next",
args: "start -p 3000",
env: {
NODE_ENV: "production",
API_BASE_URL: "https://api.your-domain.com"
},
out_file: "C:/www/qr.card.com/.pm2/out.log",
error_file: "C:/www/qr.card.com/.pm2/error.log"
}
]
}
등록 및 실행:
cd C:\www\qr.card.com
pm2 start ecosystem.config.js --env production
5. 상태 저장 (덤프 생성)
PM2는 현재 실행 중인 프로세스 상태를 dump.pm2에 저장합니다.
리부팅 시 서비스가 이 파일을 기반으로 프로세스를 복구합니다.
pm2 save
6. 검증
리부팅 대신 서비스만 재시작해도 동일하게 동작을 검증할 수 있습니다.
Restart-Service PM2
pm2 list
→ 서비스 재시작 후에도 앱이 online 상태로 복구되면 성공입니다.
📌 요약
- Node.js LTS + PM2 설치
- PM2_HOME을 특정 계정(admin) 경로로 고정
- pm2-windows-service 설치 후 서비스 등록
- 앱을 ecosystem.config.js로 등록하고 실행
- pm2 save로 상태 저장
- 서비스 재시작 또는 리부팅 시 자동 복구 확인
'WEB,WAS > Nodejs' 카테고리의 다른 글
| 서버 실행 모델(spring,nodejs) 멀티스레딩 (0) | 2026.02.02 |
|---|---|
| Node.js 이벤트 루프 정리(콜 스택 · 백그라운드 · 태스크 큐 · Promise · 엔진과 런타임) (0) | 2026.02.02 |
댓글