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"><</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">=></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>
}