Programming/etc

[PM2] Process Manager 2

OriginMaster 2025. 3. 6. 10:05
λ°˜μ‘ν˜•

πŸ“Œ κ°œμš”

PM2λŠ” Node.js 기반의 ν”„λ‘œμ„ΈμŠ€ λ§€λ‹ˆμ €λ‘œ, λ‹€μ–‘ν•œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ†μ‰½κ²Œ 관리할 수 μžˆλ„λ‘ λ„μ™€μ€λ‹ˆλ‹€. μžλ™ μž¬μ‹œμž‘, 둜그 관리 λ“±μ˜ κΈ°λŠ₯을 μ œκ³΅ν•˜μ—¬ μ•ˆμ •μ μΈ μ„œλΉ„μŠ€ 운영이 κ°€λŠ₯ν•©λ‹ˆλ‹€. 특히, 배포 및 운영 ν™˜κ²½μ—μ„œ ν”„λ‘œμ„ΈμŠ€ μœ μ§€μ™€ λͺ¨λ‹ˆν„°λ§μ„ κ°„νŽΈν•˜κ²Œ ν•  수 μžˆμ–΄ 많이 μ‚¬μš©λ©λ‹ˆλ‹€.


πŸ“Œ ν™œμš©

1️⃣ ν”„λ‘œμ„ΈμŠ€ 관리

PM2λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ λ°±κ·ΈλΌμš΄λ“œμ—μ„œ μ‹€ν–‰ν•˜κ³ , μžλ™ μž¬μ‹œμž‘ 및 닀쀑 μΈμŠ€ν„΄μŠ€ μ‹€ν–‰ κΈ°λŠ₯을 μ œκ³΅ν•©λ‹ˆλ‹€.

pm2 start app.js --name myApp --instances 4  # 4개의 μΈμŠ€ν„΄μŠ€λ‘œ μ‹€ν–‰
pm2 restart myApp  # μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μž¬μ‹œμž‘
pm2 stop myApp  # μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 쀑지

βœ… μž₯점: μ„œλ²„κ°€ 예기치 μ•Šκ²Œ μ’…λ£Œλ˜μ–΄λ„ μžλ™μœΌλ‘œ λ‹€μ‹œ 싀행됨.


2️⃣ ν”„λ‘œμ„ΈμŠ€ μ‹€ν–‰ μˆœμ„œ 관리

PM2λŠ” restart_delay와 wait_ready μ˜΅μ…˜μ„ ν™œμš©ν•˜μ—¬ μ‹€ν–‰ μˆœμ„œλ₯Ό μ‘°μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

module.exports = {
  apps: [
    { name: "DB Service", script: "db-service.js", wait_ready: true },
    { name: "API Server", script: "api.js", restart_delay: 5000 },
    { name: "Worker", script: "worker.js", restart_delay: 10000 }
  ]
};

βœ… μž₯점: DBκ°€ λ¨Όμ € μ‹€ν–‰λ˜κ³ , API μ„œλ²„ 및 Workerκ°€ 순차적으둜 싀행됨.


3️⃣ ν”„λ‘œμ„ΈμŠ€ 볡ꡬ (μžλ™ μž¬μ‹œμž‘ 및 μž¬λΆ€νŒ… μ‹œ μ‹€ν–‰)

PM2λŠ” ν”„λ‘œμ„ΈμŠ€κ°€ 비정상 μ’…λ£Œλ˜λ”λΌλ„ μžλ™μœΌλ‘œ μž¬μ‹œμž‘ν•˜λŠ” κΈ°λŠ₯이 μžˆμŠ΅λ‹ˆλ‹€.

pm2 startup  # μ„œλ²„ λΆ€νŒ… μ‹œ PM2 μžλ™ μ‹€ν–‰ μ„€μ •
pm2 save  # ν˜„μž¬ μ‹€ν–‰ 쀑인 ν”„λ‘œμ„ΈμŠ€λ₯Ό μ €μž₯
pm2 resurrect  # μ €μž₯된 ν”„λ‘œμ„ΈμŠ€λ₯Ό 볡ꡬ

βœ… μž₯점: μ„œλΉ„μŠ€κ°€ λ‹€μš΄λ˜μ–΄λ„ μžλ™ λ³΅κ΅¬λ˜μ–΄ μž₯μ•  λŒ€μ‘μ΄ 빠름.


4️⃣ ν”„λ‘œμ„ΈμŠ€ 둜그 및 μ•Œλ¦Ό

PM2λŠ” μ‹€ν–‰ 쀑인 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 둜그 관리 및 μ•Œλ¦Ό κΈ°λŠ₯을 μ§€μ›ν•©λ‹ˆλ‹€.

pm2 logs myApp  # μ‹€μ‹œκ°„ 둜그 보기
pm2 flush  # 둜그 μ΄ˆκΈ°ν™”
pm2 logrotate  # 둜그 μžλ™ μ••μΆ• 및 μ‚­μ œ

βœ… μž₯점: 둜그λ₯Ό μ‰½κ²Œ κ΄€λ¦¬ν•˜κ³ , μ„œλ²„ κ³ΌλΆ€ν•˜λ₯Ό λ°©μ§€ν•  수 있음.


5️⃣ PM2의 단점 및 μ œν•œμ‚¬ν•­

  • λ©”λͺ¨λ¦¬ μ‚¬μš©: PM2 μžμ²΄κ°€ ν”„λ‘œμ„ΈμŠ€λ₯Ό κ°μ‹œν•˜λŠ” Daemonμ΄λ―€λ‘œ λ©”λͺ¨λ¦¬λ₯Ό μΆ”κ°€λ‘œ μ‚¬μš©ν•¨.
  • ν”„λ‘œμ„ΈμŠ€ μ˜μ‘΄μ„± 관리 λΆ€μ‘±: μ‹€ν–‰ μˆœμ„œλ₯Ό κ°•μ œν•  방법이 μ œν•œμ μ΄λ©°, pm2 start --only λ“± μˆ˜λ™ 섀정이 ν•„μš”ν•¨.
  • λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€ ν™˜κ²½μ—μ„œλŠ” ν•œκ³„: Docker, Kubernetes 같은 μ»¨ν…Œμ΄λ„ˆ μ˜€μΌ€μŠ€νŠΈλ ˆμ΄μ…˜ 툴이 더 μœ μš©ν•¨.

πŸ“Œ κ²°λ‘ 

PM2λŠ” μ„œλΉ„μŠ€ μ•ˆμ •μ„±μ„ 높이고, μš΄μ˜μ„ κ°„μ†Œν™”ν•˜λŠ” κ°•λ ₯ν•œ ν”„λ‘œμ„ΈμŠ€ λ§€λ‹ˆμ €μž…λ‹ˆλ‹€.
μžλ™ μž¬μ‹œμž‘, 둜그 관리, μ‹€ν–‰ μˆœμ„œ μ œμ–΄ λ“±μ˜ κΈ°λŠ₯을 ν™œμš©ν•˜λ©΄ μž₯μ•  λŒ€μ‘μ΄ μ‰¬μ›Œμ§€κ³  운영 뢀담이 μ€„μ–΄λ“­λ‹ˆλ‹€.
특히, μž‘μ€ 규λͺ¨μ˜ μ„œλΉ„μŠ€λ‚˜ 단일 μ„œλ²„ ν™˜κ²½μ—μ„œ 효과적이며, 운영자의 κ°œμž… 없이 μ•ˆμ •μ μΈ μ„œλΉ„μŠ€λ₯Ό μ œκ³΅ν•  수 μžˆμŠ΅λ‹ˆλ‹€. πŸš€

λ°˜μ‘ν˜•