February 8, 2021

cluster


cluster 모듈은 기본적으로 싱글 프로세스로 동작하는 노드가 CPU 코어를 모두 사용할 수 있게 해주는 모듈이다.

예를 들어, 코어가 8개인 서버가 있을 때 코어 하나당 노드 프로세스 하나가 돌아가게 할 수 있다. 성능 개선을 기대할 수 있지만, 메모리를 공유하지 못한다.

실무에서는 pm2 등의 모듈을 이용하여 cluster 기능을 사용한다.

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>