cluster 모듈
- 싱글 프로세스로 동작하는 노드가 CPU 코어를 모두 사용할 수 있게 해주는 모듈
cluster 모듈의 장점
- 포트를 공유하는 노드 프로세스를 여러개 둘 수 있음 → 요청이 들어왔을 때 병렬로 실행된 서버의 개수만큼 요청이 분산되게 할 수 있음 → 서버에 무리가 덜 가게 되게 함
cluser 모듈의 단점
- 프로세스들 간에 메모리를 공유하지 못하는 문제
- 세션을 메모리에 저장하는 경우 문제가 될 수 있음 → 레디스 등의 서버를 도입하여 해결
cluster의 종류
- 마스터 프로세스 : CPU 개수만큼 워커 프로세스를 만듦. 8086 포트에서 대기, 요청이 들어오면 만들어진 워커 프로세스에 요청을 분배
- 워커 프로세스 : 실제로 일을 하는 프로세스
const cluster = require('cluster');
const http = require('http');
const numCPUs = require('os').cpus().length;
if (cluster.isMaster) {
console.log(`마스터 프로세스 아이디: ${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', code, 'signal', signal);
});
} else {
// 워커들이 포트에서 대기
http.createServer((req, res) => {
res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
res.write('<h1>Hello Node!</h1>');
res.end('<p>Hello Cluster!</p>');
}).listen(8086);
console.log(`${process.pid}번 워커 실행`);
}
Reference
- Node.js 교과서 개정 2판
'Node.js' 카테고리의 다른 글
[Node] package.json과 node-modules (0) | 2022.12.17 |
---|---|
[Node] https와 http2 (0) | 2022.12.11 |
[Node] 쿠키와 세션 (0) | 2022.12.11 |
[Node] REST, HTTP 메서드 개념 (0) | 2022.12.11 |
[Node] 이벤트, 이벤트 메서드 (0) | 2022.12.10 |