Node.js 인터뷰 질문 2
질문: Node.js는 자식 스레드를 어떻게 처리하나요?
답변:
Node.js는 기본적으로 단일 스레드 모델을 사용하지만, 여러 방식으로 다중 스레드 작업을 처리할 수 있습니다:
1. Child Process 모듈
Node.js는 child_process
모듈을 통해 새로운 프로세스를 생성할 수 있습니다:
const { spawn, exec, fork } = require("child_process");
- spawn(): 새 프로세스를 생성하고 명령을 실행합니다.
- exec(): 셸에서 명령을 실행하고 버퍼에 결과를 저장합니다.
- execFile(): 실행 파일을 직접 실행합니다.
- fork(): Node.js 프로세스의 새 인스턴스를 생성합니다.
2. Cluster 모듈
cluster
모듈을 사용하면 여러 CPU 코어를 활용하여 로드 밸런싱을 수행할 수 있습니다:
const cluster = require("cluster");
const http = require("http");
const numCPUs = require("os").cpus().length;
if (cluster.isMaster) {
// 마스터 프로세스
for (let i = 0; i < numCPUs; i++) {
cluster.fork();
}
} else {
// 워커 프로세스
http
.createServer((req, res) => {
res.end("Hello World");
})
.listen(8000);
}
3. Worker Threads (Node.js 10 이상)
worker_threads
모듈은 워커 스레드를 사용하여 병렬 JavaScript 실행을 가능하게 합니다:
const { Worker, isMainThread, parentPort } = require("worker_threads");
if (isMainThread) {
const worker = new Worker(__filename);
worker.on("message", (msg) => {
console.log(msg);
});
} else {
// 워커 스레드 내부에서 실행
parentPort.postMessage("Hello from worker!");
}
이러한 방식들은 CPU 집약적인 작업을 분산처리하거나, 블로킹 작업을 메인 이벤트 루프에서 분리할 때 유용합니다.