티스토리 뷰

IT/JavaScript

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

Stv 2025. 4. 13. 16:23

목차


    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 작업에 최적화