Node.js - 자바스크립트 런타임의 구조, 비동기 처리의 핵심

2025. 4. 13. 16:23Language/JavaScript

1. Node.js란?

: Node.js는 Chrome V8 엔진 위에서 동작하는 자바스크립트 런타임 환경이다.

  • 브라우저 밖에서 자바스크립트를 실행할 수 있게 해줌
  • 비동기 I/O, 이벤트 기반 구조로 고성능 서버 개발에 적합
  • 단일 스레드 기반으로 동시성 처리에 유리한 구조
"Node.js는 자바스크립트를 이용해 서버를 만들 수 있게 해주는 플랫폼"

 

2. Node.js의 핵심 아키텍처 : 단일 스레드 & 이벤트 루프

 

📌 단일 스레드 모델

  • Node.js는 기본적으로 싱글 스레드 구조지만, 내부적으로는 멀티스레드를 활용한다 (libuv 기반)

📌 이벤트 루프 (Event Loop)

  • Node.js의 비동기 처리를 가능하게 만드는 핵심 구조
    • 요청 -> 처리할 수 없으면 등록 -> 다음 요청 처리 -> 완료되면 콜백 큐에서 실행

📌 이벤트 루프 단계 (Simplified) 

  1. Imers : setTimeout, setInerval
  2. Pending Callbacks : 일부 I/O 콜백
  3. Idle, Prepare
  4. Poll : I/O 이벤트 확인
  5. Check : setImeediate
  6. Close Callbacks
console.log('Start');

setTimeout(() => {
  console.log('Timeout callback');
}, 0);

console.log('End');

 

출력 순서

Start
End
Timeout callback

 

3. Node.js의 런타임 구성요소

구성 요소 설명
V8 엔진 자바스크립트 실행 (브라우저와 동일)
libuv 이벤트 루프, 비동기 I/O, 스레드 풀 관리
C/C++ 바인딩 네이티브 모듈 호출 가능
Node API fs, http, process 등 내장 API 제공

 

4. 주요 개념 정리 : Non-blocking I/O

 

📌 블로킹 I/O 예

const fs = require('fs');
const data = fs.readFileSync('/file.txt'); // 작업이 끝날 때까지 기다림

 

📌논블로킹 I/O 예

fs.readFile('/file.txt', (err, data) => {
  if (err) throw err;
  console.log(data.toString());
});
  • Node는 I/O 요청을 스레드 풀에 던지고, 처리 완료시 콜백으로 결고 전달

5. 실무에서 자주 등장하는 개념

  • Process와 Thread의 차이
  • 콜백 지옥 -> Promise -> async/await 흐름
  • 클러스터링 (clustor 모듈로 멀티코어 활용)
  • Express 등 프레임워크 없이 순수 Node로 API 서버 만들기
  • npm/yarn과 모듈 시스템 (CommonJS vs ESM)

6. 마무리 요약

  • Node.js는 자바스크립트를 백엔드에서 사용할 수 있게 해주는 런타임
  • 핵심은 싱글 스레드 + 논블로킹 I/O + 이벤트 루프 구조
  • CPU-bound 작업보다는 I/O-bound 작업에 최적화