본문 바로가기
개발정리 (nodeJS)

[nodeJS] Node.js 클러스터 모드로 멀티코어 100% 활용하기: cluster 기본기와 실무 패턴

by 할리갈리0 2025. 9. 2.

Node.js는 싱글 스레드 기반 이벤트 루프를 활용하는 런타임입니다.
단일 코어 환경에서는 높은 성능을 발휘하지만, 멀티코어 CPU를 충분히 활용하지 못하는 한계가 있습니다.
이를 극복하기 위해 Node.js는 cluster 모듈을 제공합니다.

 

1. cluster 기본 개념 이해하기

Node.js의 cluster 모듈은 마스터 프로세스워커 프로세스로 나누어 동작

  • 마스터: 워커를 생성하고 관리
  • 워커: 실제 HTTP 요청이나 작업을 처리

이 방식을 통해 하나의 포트에 여러 워커 프로세스를 붙여 멀티코어를 동시에 활용 가능

 

 

2. 간단한 cluster 예제

CPU 코어 수만큼 워커를 생성하고, 요청을 나눠 처리하는 기본 코드

// server.js
const cluster = require('cluster');
const http = require('http');
const os = require('os');

if (cluster.isMaster) {
  const numCPUs = os.cpus().length;
  console.log(`마스터 프로세스 PID: ${process.pid}`);

  // CPU 코어 수만큼 워커 생성
  for (let i = 0; i < numCPUs; i++) {
    cluster.fork();
  }

  // 워커가 죽으면 새로 생성
  cluster.on('exit', (worker, code, signal) => {
    console.log(`워커 ${worker.process.pid} 종료. 새 워커 생성`);
    cluster.fork();
  });
} else {
  // 워커 프로세스: 실제 요청 처리
  http.createServer((req, res) => {
    res.writeHead(200);
    res.end(`Hello from Worker ${process.pid}\n`);
  }).listen(3000);

  console.log(`워커 ${process.pid} 실행`);
}

실행 후 http://localhost:3000 으로 요청을 보내면, 워커 PID가 달라지며 요청이 분산되는 것 확인 가능

 

 

3. cluster 활용 시 주의사항

  • 세션 관리
    워커마다 메모리를 공유하지 않으므로, 세션은 Redis 같은 외부 저장소에 보관 필수
  • 상태 공유 금지
    전역 변수는 워커 간 공유되지 않으니, 공통 데이터는 DB나 캐시로 관리
  • Graceful Shutdown
    워커 종료 시 진행 중인 요청이 끊기지 않도록 종료 신호 처리 필요

 

4. 실무 패턴: PM2와 cluster 모드

실무에서는 cluster 모듈을 직접 쓰기보다 PM2 같은 프로세스 매니저를 활용하는 경우가 많음.
PM2는 cluster 모드를 지원해 쉽게 설정 가능

# PM2 설치
npm install -g pm2

# cluster 모드로 실행 (코어 수만큼 자동 확장)
pm2 start server.js -i max

os.cpus().length를 자동 인식해 최적의 워커 수를 띄우고, 로드밸런싱까지 관리 가능

 

 

5. cluster와 로드밸런서 연계

대규모 서비스에서는 cluster 모듈만으로는 한계가 있기 때문에 Nginx, HAProxy 같은 외부 로드밸런서를 활용해 여러 서버에 트래픽을 분산 필요

  • 단일 서버cluster로 멀티코어 활용
  • 여러 서버로드밸런서 + cluster 조합

이 구조를 적용하면 트래픽 폭주 상황에서도 안정적으로 확장이 가능

 

 

 

Node.js는 기본적으로 싱글 스레드 기반이지만, cluster 모듈을 활용하면 멀티코어 CPU를 100% 활용할 수 있습니다.

  • 작은 프로젝트 → cluster 기본 코드만으로 충분
  • 운영 환경PM2 + Redis + Nginx 조합이 사실상 표준 패턴

안정성확장성을 동시에 확보하려면, PM2와 외부 로드밸런서를 함께 고려하는 것이 가장 바람직합니다.

반응형