본문 바로가기
Framework/NodeJS

NodeJS - 클러스터링 완벽하게 이해하기

by 아보_ 2023. 4. 12.
반응형

Node.js에서 클러스터링이란?

Node.js 애플리케이션의 성능과 확장성을 높이기 위한 한 가지 방법으로 클러스터링이 있습니다. 이 글에서는 Node.js에서 클러스터링이 무엇인지, 어떻게 사용하는지, 그 장단점에 대해 알아봅니다.

 

클러스터링이란?

클러스터링은 Node.js 애플리케이션의 성능을 향상시키기 위해 멀티 코어 CPU를 활용하는 방법입니다. Node.js는 기본적으로 싱글 스레드로 동작하기 때문에, 멀티 코어 CPU를 사용하는 시스템에서 하나의 코어만 사용하게 됩니다. 이는 시스템 자원을 효율적으로 활용하지 못하는 문제를 야기합니다. 클러스터링을 통해 이러한 문제를 해결할 수 있습니다.

 

클러스터링 작동 원리

Node.js의 클러스터 모듈을 사용하여 클러스터링을 구현할 수 있습니다. 클러스터 모듈은 마스터 프로세스와 워커 프로세스로 구성됩니다. 마스터 프로세스는 워커 프로세스를 생성하고, 각 워커 프로세스는 독립적인 Node.js 애플리케이션 인스턴스를 실행합니다. 이를 통해 시스템의 여러 코어를 활용하고, 병렬로 작업을 처리할 수 있습니다.

 

클러스터링 사용 예시

다음은 Node.js의 클러스터 모듈을 사용하는 간단한 예제입니다.

const cluster = require("cluster");
const http = require("http");
const numCPUs = require("os").cpus().length;

if (cluster.isMaster) {
  console.log(`Master process ${process.pid} is running`);

  for (let i = 0; i < numCPUs; i++) {
    cluster.fork();
  }

  cluster.on("exit", (worker, code, signal) => {
    console.log(`Worker ${worker.process.pid} died`);
  });
} else {
  http.createServer((req, res) => {
    res.writeHead(200);
    res.end("Hello, World!");
  }).listen(8000);

  console.log(`Worker ${process.pid} started`);
}

이 예제에서는 cluster 모듈을 사용하여 클러스터링을 구현하였습니다. cluster.isMaster 조건문을 통해 마스터 프로세스와 워커 프로세스를 구분합니다. 마스터 프로세스에서는 cluster.fork()를 호출하여 워커 프로세스를 생성하고, 워커 프로세스에서는 각각의 HTTP 서버를 실행합니다

 

클러스터링의 장단점

장점:

  • 성능 향상: 클러스터링을 사용하면 여러 CPU 코어를 활용하여 동시에 여러 작업을 처리할 수 있습니다. 이를 통해 애플리케이션의 성능을 향상시킬 수 있습니다.
  • 확장성: 클러스터링은 애플리케이션의 확장성을 향상시키는데 도움이 됩니다. 트래픽이 증가하거나 부하가 높아질 때, 추가적인 워커 프로세스를 생성하여 처리할 수 있는 작업량을 늘릴 수 있습니다.
  • 안정성: 클러스터링은 애플리케이션의 안정성을 높입니다. 워커 프로세스 중 하나가 실패하더라도 다른 워커 프로세스들이 계속 동작하기 때문입니다. 실패한 워커 프로세스는 새로운 워커 프로세스로 대체할 수 있습니다.

단점:

  • 복잡성: 클러스터링을 구현하려면 마스터 프로세스와 워커 프로세스간의 상호작용을 관리하는 코드를 작성해야 합니다. 이로 인해 코드가 복잡해질 수 있습니다.
  • 상태 공유 어려움: 워커 프로세스는 독립적인 프로세스이므로, 서로 간의 상태를 공유하는 것이 어렵습니다. 이를 해결하기 위해서는 외부 데이터베이스나 메시징 시스템 등을 사용해야 할 수 있습니다.

 

정리

Node.js에서 클러스터링은 멀티 코어 CPU를 활용하여 애플리케이션의 성능과 확장성을 향상시키는 방법입니다. 클러스터 모듈을 사용하여 마스터 프로세스와 워커 프로세스를 구현할 수 있습니다. 클러스터링을 사용하면 성능, 확장성, 안정성이 향상되지만, 코드 복잡성이 증가하고 상태 공유가 어려울 수 있습니다. 이 글을 통해 Node.js의 클러스터링 개념, 작동 원리, 장단점에 대해 이해하셨길 바랍니다.

 

반응형