Language & Framework/NodeJS

[NodeJS] Node.js 란 ?

코딩 기록하는 애기 개발자 2026. 3. 4. 01:08

목차

     

    Node.js는 워크북도 해보고, 해커톤이랑 프로젝트에서도 써본 적이 있다.

    그래도 막상 돌아보니, 코드는 짰지만 어떻게 동작하는지에 대해서는 잘 모른다는 생각이 들었다.

     

    그래서 이번 면접 준비를 계기로, Node.js를 개념부터 다시 천천히 정리해보려고 한다.

     

    자바스크립트는 어떻게 실행될까 ?

     

    우리가 작성하는 자바스크립트 코드는 사람이 읽을 수 있는 문자 형태다.

    하지만 컴퓨터의 CPU는 이런 코드를 직접 이해하지 못한다.

     

    CPU가 이해할 수 있는 것은 오직 0과 1로 이루어진 기계어(machine code) 뿐이다.

     

    이때 필요한 것이 바로 자바스크립트 엔진(JavaScript Engine) 이다.

     

     

    그럼 브라우저 밖에서는 어떻게 실행될까 ?

    원래 자바스크립트는 브라우저 안에서만 동작하는 언어였다.

    파일을 읽거나, 서버를 열거나, 운영체제의 기능에 접근하는 일은 할 수 없었다.

     

    하지만 V8이라는 빠르고 강력한 엔진이 등장하면서 이런 생각이 가능해졌다.

    이 엔진을 브라우저 밖에서도 사용할 수 있다면 ?

     

    이 아이디어에서 출발해 만들어진 것이 바로 Node.js이다.

    즉, Node.js 는 자바스크립트를 브라우저 밖으로 확장시킨 실행 환경이다.

     

     

    V8 엔진이란 ?

    구글이 C++로 개발한 오픈소스 자바스크립트 엔진이다.
    현재는 Google Chrome과 Node.js 등에서 사용되고 있다.

    CPU는 자바스크립트를 이해하지 못한다. CPU가 이해하는 것은 오직 기계어뿐이다.
    그래서 이를 중간에서 번역하는 존재가 필요한데, 그 역할을 하는 것이 바로 V8 엔진이다. 

     

    즉, 자바스크립트 코드를 받아 기계어로 변환하고, CPU가 실행할 수 있게 만들어준다.

     

    V8은 인터프리터일까? 컴파일러일까?

    결론부터 말하면, V8은 단순한 인터프리터도, 단순한 컴파일러도 아니다.

    JIT(Just-In-Time) 컴파일 방식을 사용하는 엔진이다.


    `인터프리터` : 는 코드를 한 줄씩 읽어 바로 실행하는 방식
    `컴파일러` :  전체 코드를 한 번에 번역한 뒤 실행 파일을 만들어 실행하는 방식

    `JIT` 프로그램을 실행하는 시점에 필요한 부분만 컴파일하는 방식


    처음부터 모든 코드를 무겁게 컴파일하지 않고, 우선 빠르게 실행한 뒤,
    자주 사용되는 코드를 감지하여 그 부분만 최적화된 기계어로 다시 컴파일한다.

     

    V8의 동작 흐름

    1. JavaScript 코드 작성
    2. Parser가 분석하여 AST(Abstract Syntax Tree) 생성
      • AST : 이 코드가 어떤 구조인지 정리된 설계도
    1. Ignition이 AST를 바이트코드로 변환
    2. 자주 실행되는 코드를 TurboFan이 최적화된 기계어로 재컴파일

     

    " 처음에는 빠르게 실행하고, 많이 쓰이는 부분은 더 빠르게 만든다"

    이 전략이 V8의 핵심이다.

     

     


     

    Node.js 란

    JavaScript를 브라우저가 아닌 서버에서 실행할 수 있게 해주는 타임 환경이다.

    처음 듣는 사람들은 이게 무슨 말이야 ? 라는 생각을 할 수 있다.

    왜냐하면 내가 그랬기 때문 ................

     

    한마디로, 자바스크립트를 브라우저 말고도 로컬 PC에서도 실행시켜줄 수 있는 실행창이다. 

     

    원래 자바스크립트는 브라우저 안에서만 동작했다.

    파일을 읽거나, 서버를 열거나, 운영체제의 기능에 접근할 수 없었다.

     

    하지만 V8 엔진을 브라우저 밖에서도 사용할 수 있게 되면서,

    자바스크립트를 서버 환경으로 확장한 것이 바로 Node.js이다.

     

    Node.js를 실행하면 아래처럼 자바스크립트를 실행할 수 있다.

    실제 터미널에서 Node.js 실행시켜보기

     

    Node.js는 프레임워크가 아니다

    많은 사람들이 Node.js를 백엔드 프레임워크라고 생각한다.

    하지만 Node.js는 프레임워크가 아니라 런타임 환경이다.

     

    프레임워크 (Framework)
     : 미리 작성된 코드와 도구 모음으로, 애플리케이션을 구축하기 위한 구조를 제공하여 개발을 더 빠르고 쉽게 만들어준다.

    프레임워크 없이 프로젝트를 코딩하면 모든 것을 처음부터 만들어야 하므로,
    시간이 오래 걸리고 오류가 발생하기 쉽다. 

    `프론트 프레임워크` : 사용자 인터페이스를 구축하는 데 도움을 줌 ex) Vite, Next,.js
    `백엔드 프레임워크` : 서버 측 로직을 지원 ex) Nest.js, Express

     

     

     


    Node.js 의 특징

    지금까지 Node.js가 무엇인지, V8이 어떻게 동작하는지 정리해봤다.

    그렇다면 Node.js는 왜 백엔드에서 많이 사용될까 ?

     

    Node.js의 대표적인 특징은 다음과 같다.

     

    01 싱글 스레드 기반

    Node.js 는 기본적으로 싱글 스레드로 동작한다.

    처음 들으면 이렇게 생각할 수 있다.

    "싱글 스레드면 너무 느린 거 아니야 ?"

     

    하지만 Node.js 는 단순한 싱글 스레드가 아니다.

     

    02 이벤트 루프 (Event Loop)

    Node.js는 이벤트 루프 기반의 비동기 처리 구조를 사용한다.

     

    I/O 작업 (파일 읽기, 네트워크 요청 등) 은 OS에게 맡기고,

    완료되면 콜백 큐를 통해 다시 실행된다. 

     

    즉, 기다리지 않고 다음 작업을 수행하고 작업이 끝나면 다시 처리한다.

     

    이 구조 덕분에 많은 요청을 동시에 효율적으로 처리할 수 있다.

     

    03 논블로킹 I/O (Non-blocking I/O)

    Node.js 는 기본적으로 논블로킹 방식을 사용한다.

     

    예를 들어 파일을 읽을 때,

    fs.readFile("file.txt", (err, data) => {
      console.log(data);
    });

     

    파일이 다 읽힐 때까지 멈춰 있는 것이 아니라, 다른 작업을 계속 진행한다.

     

    이 구조가 바로 Node.js가 빠르게 느껴지는 이유 중 하나다.

     

    04 자바스크립트 하나로 풀스택 개발 가능

    Node.js 는 큰 장점 중 하나는 

    프론트엔드와 백엔드를 모두 자바스크립트로 개발할 수 있다는 점이다.

     

    언어를 통일할 수 있고, 코드 공유도 가능하며, 개발 생산성이 올라간다.

     

    05 방대한 생태계 (NPM)

    Node.js에는 NPM (Node Package Manager)이 있다.

     

    NPM은 단순한 패키지 설치 도구가 아니라,

    전 세계 개발자들이 만든 오픈소스 라이브러리를 공유하는 거대한 생태계다.

     

    현재 수백만 개 이상의 패키지가 등록되어 있으면,

    웹 서버, 인증, 암호화, 파일 처리, 테스트, 빌드 도구 등 거의 모든 영역을 지원한다.

     

    예를 들어, `express`, `axios`, `bcrypt`, `jsonwebtoken` 등을 설치하면,

    프레임워크나 라이브러리, 기능들을 직접 구현하지 않아도 NPM을 통해 쉽게 설치해서 사용할 수 있다.

     

     


     

    이번 글에서는 Node.js와 V8의 기본 개념을 정리해보았다.

    처음에는 단순히 "백엔드 기술"이라고만 생각했던 Node.js가 이렇게 내부 동작 원리까지 살펴보니 전혀 다른 모습으로 보였다.

     

    단순히 코드를 작성하는 것이 아니라, 

    어떤 구조 위에서 코드가 실행되는지 이해하는 것이 중요하다는 것을 느끼게 되었다.

     

    'Language & Framework > NodeJS' 카테고리의 다른 글

    [NodeJS] 프로젝트 초기 설정  (3) 2025.08.24