PM2 vs Node Cluster vs Docker — 실제 프로덕션에서 실제로 중요한 것

발행: (2026년 3월 10일 AM 12:18 GMT+9)
6 분 소요
원문: Dev.to

Source: Dev.to

Introduction

모든 백엔드 엔지니어는 결국 다음과 같은 논쟁에 직면합니다:

“Node.js 앱을 PM2, Node Cluster, 혹은 Docker 중 어느 것을 사용해 확장해야 할까?”

대화는 종종 빙빙 돌지만, 이 도구들은 경쟁 관계가 아니라 프로덕션 아키텍처에서 서로 다른 문제를 해결합니다. 각 도구가 작동하는 레이어를 이해하면 결정을 훨씬 쉽게 할 수 있습니다.

Background

Node.js는 단일 스레드 이벤트 루프 위에서 동작합니다. 이는 비동기 작업에 매우 효율적이지만, 동시에 하나의 Node.js 프로세스가 하나의 CPU 코어만 사용할 수 있다는 뜻이기도 합니다. 8코어 서버에서 하나의 Node 프로세스만 실행하면 7개의 코어가 사용되지 않으므로, 확장 전략이 필요해집니다.

PM2

PM2는 프로덕션용 Node.js 프로세스 매니저입니다.

다음과 같이 앱을 시작하는 대신:

node app.js

다음 명령으로 실행합니다:

pm2 start app.js

What PM2 Provides

  • 앱이 충돌했을 때 자동 재시작
  • 무중단 재로드(zero‑downtime reload)
  • 로그 관리
  • 프로세스 모니터링

Ideal Use Cases

  • 단일 서버 배포
  • 중소 규모 프로덕션 시스템
  • 간단하고 신뢰할 수 있는 프로세스 관리를 원하는 팀

많은 애플리케이션에 있어 PM2만으로 충분합니다.

Node Cluster

Node.js cluster 모듈을 사용하면 여러 Node 프로세스가 같은 포트를 공유하여 전체 CPU 코어를 활용할 수 있습니다.

// cluster-example.js
const cluster = require('cluster');
const os = require('os');

if (cluster.isMaster) {
  const cpuCount = os.cpus().length;

  for (let i = 0; i < cpuCount; i++) {
    cluster.fork();
  }
} else {
  require('./app');
}

Benefits

  • 사용 가능한 모든 CPU 코어 활용
  • 높은 동시성
  • 부하가 걸렸을 때 더 나은 성능

Limitations

Cluster 모드 자체는 프로세스 모니터링이나 자동 재시작을 제공하지 않습니다. 이 부분에서 PM2가 보완 역할을 할 수 있습니다.

Docker

Docker는 완전히 다른 문제, 즉 배포 포터블리티를 해결합니다. 애플리케이션과 그 의존성을 컨테이너에 패키징해 어디서든 동일하게 실행되도록 보장합니다.

Advantages

  • 환경 일관성
  • 의존성 격리
  • 재현 가능한 배포
  • 오케스트레이션 도구(Kubernetes, Docker Swarm, ECS)와 함께 손쉬운 확장

대규모 시스템에서는 보통 컨테이너 스케일링, 롤링 배포, 자체 복구, 서비스 디스커버리를 담당하는 오케스트레이터와 Docker를 함께 사용합니다.

Comparing the Tools

ToolProblem It Solves
PM2프로세스 관리
Node ClusterCPU 활용
Docker배포 포터블리티

실제 프로덕션 환경에서는 이 도구들을 함께 사용하는 경우가 많습니다:

  • PM2 + 단일 VPS – 간단하고 신뢰성 높음.
  • Node Cluster + PM2 – CPU 활용을 극대화하면서 프로세스 관리까지 제공.
  • Docker + Kubernetes – 여러 서버에 걸친 스케일링, 재시작, 배포를 처리; 오케스트레이터가 이미 이러한 기능을 제공하므로 보통 PM2는 필요하지 않음.

When to Use Which

ScenarioRecommended Tool(s)
단일 VPS 배포PM2
멀티코어 성능 필요Node Cluster (선택적으로 PM2와 함께)
클라우드 / 컨테이너 배포Docker
Kubernetes 인프라Docker + Kubernetes (PM2는 선택 사항)

Takeaway

대부분의 아키텍처 논쟁은 어떤 도구를 쓸 것인가보다 어떤 문제를 해결하고자 하는가에 초점을 맞추지 않아 시간을 낭비합니다. 좋은 엔지니어링은 해결하려는 문제를 먼저 정의하고, 그 다음에 적절한 도구를 선택하는 것에서 시작됩니다. 문제 레이어를 명확히 하면 아키텍처가 훨씬 명확해집니다.

0 조회
Back to Blog

관련 글

더 보기 »