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 집약적인 작업을 분산처리하거나, 블로킹 작업을 메인 이벤트 루프에서 분리할 때 유용합니다.

results matching ""

    No results matching ""