February 8, 2021
cluster 모듈은 기본적으로 싱글 프로세스로 동작하는 노드가 CPU 코어를 모두 사용할 수 있게 해주는 모듈이다.
예를 들어, 코어가 8개인 서버가 있을 때 코어 하나당 노드 프로세스 하나가 돌아가게 할 수 있다. 성능 개선을 기대할 수 있지만, 메모리를 공유하지 못한다.
실무에서는 pm2 등의 모듈을 이용하여 cluster 기능을 사용한다.
const cluster = require('cluster');
const http = require('http');
const numCPUs = require('os').cpus().length;
if (cluster.isMaster) {
// 마스터 프로세스인 경우
console.log(`Master Process: ${process.pid}`);
// CPU 코어 갯수만큼 워커를 생성한다.
for (let i = 0; i < numCPUs; i += 1) {
cluster.fork();
}
// 워커가 종료되었을 때
cluster.on('exit', (worker, code, signal) => {
console.log(`${worker.process.pid} 종료`);
console.log(code, signal);
})
} else {
// 워커들이 포트에서 대기
http.createServer((req, res) => {
res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
res.end('Hello');
}).listen(3000);
console.log(`${process.pid} 실행`);
}
<aside> 💡 코어 하나에는 이미 마스터 프로세스가 실행 중인데, 코어 갯수만큼 워커가 생성된다는 것이 이해되지 않는다.
</aside>