Node.js는 JavaScript를 브라우저 밖에서 — 서버, CLI, 도구에서 — 실행할 수 있게 해주는 런타임입니다. Chrome의 V8 엔진 위에 구축되었으며, 확장 가능한 네트워크 애플리케이션을 위해 설계된 논블로킹, 이벤트 기반 I/O 모델을 추가합니다.
핵심 개념: 단일 스레드, 논블로킹 I/O
js
fs = ();
fs.(, , {
.();
});
.();
Node.js는 JavaScript를 브라우저 밖에서 — 서버, CLI, 도구에서 — 실행할 수 있게 해주는 런타임입니다. Chrome의 V8 엔진 위에 구축되었으며, 확장 가능한 네트워크 애플리케이션을 위해 설계된 논블로킹, 이벤트 기반 I/O 모델을 추가합니다.
fs = ();
fs.(, , {
.();
});
.();
Node는 여러분의 JS를 단일 메인 스레드에서 실행하지만 I/O(파일, 네트워크, DB)를 시스템에 위임하고 실행을 계속합니다. I/O가 끝나면 콜백이 실행됩니다. 이것이 하나의 Node 프로세스가 요청당 스레드 없이도 수천 개의 동시 연결을 처리할 수 있는 이유입니다.
✓ APIs & web servers (REST, GraphQL) — I/O-bound, many concurrent requests
✓ Real-time apps (chat, live updates) — WebSockets, event-driven model fits well
✓ Microservices — lightweight, fast startup
✓ CLIs & build tools (the entire npm/Vite/webpack ecosystem)
✓ Streaming (video, large files) via streams
✗ CPU-heavy work (image processing, big computations) — blocks the single thread
→ offload to worker threads, a queue, or another service
JS는 단일 스레드이므로 무거운 CPU 작업은 모든 것을 블로킹합니다. Node는 CPU 바운드가 아니라 I/O 바운드 워크로드에서 빛을 발합니다.
Same language front-end and back-end → shared code/types, one skill set,
huge npm ecosystem (the largest package registry).
Node.js는 JavaScript를 서버로 가져왔고, I/O 집약적이고 높은 동시성을 가진 애플리케이션(API, 실시간, 마이크로서비스)에 탁월하게 만드는 논블로킹, 이벤트 기반 모델을 대중화했습니다.
왜 확장되는지(단일 스레드에서의 비동기 I/O)와 어디서 어려움을 겪는지(CPU 바운드 작업)를 이해하는 것이 이를 잘 활용하는 기초입니다. Node는 대부분의 현대 JavaScript 백엔드와 도구의 근간입니다.