본문 바로가기

Node.js

[Node] cluster

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