Node.js 인터뷰 질문 6

질문: Node.js에서 "논 블로킹(Non-blocking)"의 의미를 설명해주세요.

답변:

Node.js에서 "논 블로킹(Non-blocking)"은 I/O 작업이 완료될 때까지 프로그램의 실행을 중단하지 않는 방식을 의미합니다. 이는 Node.js의 핵심 특징 중 하나로, 높은 성능과 확장성의 기반이 됩니다.

블로킹 vs 논 블로킹

블로킹(Blocking):

// 블로킹 방식 예제
const fs = require("fs");
const data = fs.readFileSync("/path/to/file.txt"); // 이 라인에서 파일 읽기가 완료될 때까지 실행이 중단됨
console.log(data);
console.log("파일 읽기 완료 후 실행");

논 블로킹(Non-blocking):

// 논 블로킹 방식 예제
const fs = require("fs");
fs.readFile("/path/to/file.txt", (err, data) => {
  if (err) throw err;
  console.log(data);
});
console.log("파일 읽기를 요청했지만, 이 코드는 즉시 실행됨");

논 블로킹의 작동 원리

  1. 콜백 함수: 작업이 완료되면 호출될 함수를 제공합니다.
  2. 이벤트 루프: 비동기 작업을 관리하고 완료 시 콜백을 실행합니다.
  3. libuv: Node.js의 기반 라이브러리로, 비동기 I/O 작업을 효율적으로 처리합니다.

논 블로킹의 장점

  1. 높은 처리량: 하나의 작업이 I/O를 기다리는 동안 다른 요청을 처리할 수 있습니다.
  2. 확장성: 적은 수의 스레드로 많은 연결을 처리할 수 있습니다.
  3. 효율적인 리소스 활용: CPU와 메모리를 효율적으로 사용합니다.

논 블로킹의 발전

현대 Node.js에서는 콜백보다 더 깔끔한 비동기 코드를 작성할 수 있는 방법들이 있습니다:

Promise:

const fs = require("fs").promises;

fs.readFile("/path/to/file.txt")
  .then((data) => {
    console.log(data);
  })
  .catch((err) => {
    console.error(err);
  });

console.log("파일 읽기 요청 후 즉시 실행");

Async/Await:

const fs = require("fs").promises;

async function readFile() {
  try {
    const data = await fs.readFile("/path/to/file.txt");
    console.log(data);
  } catch (err) {
    console.error(err);
  }
}

readFile();
console.log("readFile 함수 호출 후 즉시 실행");

논 블로킹 I/O는 Node.js가 웹 서버, API 서버, 실시간 애플리케이션과 같은 I/O 집약적인 응용 프로그램에 이상적인 선택이 되게 합니다.

results matching ""

    No results matching ""