더북(TheBook)

10.2.1 cluster 모듈 예제

Node.js 공식 사이트에서 제공하는 cluster 모듈 예제 코드로 사용법을 알아보겠습니다. 원본은 https://nodejs.org/dist/latest-v6.x/docs/api/cluster.html에서 확인할 수 있습니다.

다음과 같이 코드를 작성한 후 cluster.js로 저장합니다.

코드 10-1 cluster 모듈 예제 코드

예제 파일 : cluster.js

const cluster = require(‘cluster’);                 // ➊ cluster 모듈 로드
const http = require(‘http’);                       // ➋ http 모듈 로드
const numCPUs = require(‘os’).cpus().length;        // ➌ CPU 코어 수를 알아 옴

if (cluster.isMaster) { // ➍ 부모 프로세스일 경우 console.log(Master </span><span class="si">${</span><span class="nx">process</span><span class="p">.</span><span class="nx">pid</span><span class="si">}</span><span class="sb"> is running);

<span class="k">for</span> <span class="p">(</span><span class="kd">let</span> <span class="nx">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="nx">i</span> <span class="o">&lt;</span> <span class="nx">numCPUs</span><span class="p">;</span> <span class="nx">i</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span>  <span class="c1">// ➎ 코어 수만큼 자식 프로세스 실행</span>
    <span class="nx">cluster</span><span class="p">.</span><span class="nx">fork</span><span class="p">();</span>
<span class="p">}</span>

<span class="nx">cluster</span><span class="p">.</span><span class="nx">on</span><span class="p">(</span><span class="s1">'exit'</span><span class="p">,</span> <span class="p">(</span><span class="nx">worker</span><span class="p">,</span> <span class="nx">code</span><span class="p">,</span> <span class="nx">signal</span><span class="p">)</span> <span class="p">=&gt;</span> <span class="p">{</span>  <span class="c1">// ➏ 자식 프로세스 종료 이벤트 감지</span>
    <span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="sb">`worker </span><span class="si">${</span><span class="nx">worker</span><span class="p">.</span><span class="nx">process</span><span class="p">.</span><span class="nx">pid</span><span class="si">}</span><span class="sb"> died`</span><span class="p">);</span>
<span class="p">});</span>

} else { // ➐ 자식 프로세스일 때 HTTP 서버 실행 http.createServer((req, res) => { res.writeHead(200); res.end(‘hello world\n’); }).listen(8000);

<span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="sb">`Worker </span><span class="si">${</span><span class="nx">process</span><span class="p">.</span><span class="nx">pid</span><span class="si">}</span><span class="sb"> started`</span><span class="p">);</span>

}

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.