node.js란 무엇인가?
처음 node.js라는 이름을 들었을 때 무슨 자바스크립트 파일명인줄 알았다. 마치 jQuery 처럼 자바스크립트 라이브러리가 아닌가 했다.
2026년 수정 안내 처음 이 글에는 “node.js는 경량화된 작은 웹서버”라고 썼는데 이는 틀린 설명이다. node.js는 웹서버가 아니라 자바스크립트 런타임이다. 당시 국내 자료에 흔했던 오해라 그대로 옮겨 적었던 것이라, 정확한 내용으로 바로잡는다.
node.js는 자바스크립트 런타임이다
node.js는 브라우저 밖에서 자바스크립트를 실행할 수 있게 해주는 런타임 환경이다. 크롬이 쓰는 자바스크립트 엔진인 V8을 가져와, 파일 시스템·네트워크·프로세스 같은 운영체제 기능을 자바스크립트에서 다룰 수 있도록 API를 붙여놓은 것이다.
비유하자면 JVM이 자바 코드를 실행하는 환경인 것처럼, node.js는 자바스크립트 코드를 실행하는 환경이다. 그 자체는 웹서버가 아니다.
다만 node.js에 내장된 http 모듈로 웹서버를 만들 수 있다. 아마 이 점 때문에 “node.js = 웹서버”라는 오해가 퍼진 것 같다.
const http = require('http');
http.createServer((req, res) => {
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end('Hello World\n');
}).listen(3000);
이 코드가 웹서버인 것이지, node.js 자체가 웹서버인 것은 아니다. 실제로 node.js는 웹서버 외에도 CLI 도구, 빌드 스크립트, 데스크톱 앱(Electron) 등 훨씬 넓은 범위에 쓰인다.
특징
- 이벤트 기반, 논블로킹 I/O — 요청마다 스레드를 만드는 대신, 단일 스레드에서 이벤트 루프를 돌리며 I/O 완료를 콜백으로 처리한다. I/O가 많고 CPU 연산이 적은 작업에 유리하다.
- 단일 스레드 — 자바스크립트 코드 자체는 한 스레드에서 돈다. 따라서 CPU를 오래 쓰는 연산을 하면 이벤트 루프가 막혀 전체가 멈춘다. 이 경우
worker_threads나 별도 프로세스로 분리해야 한다. (내부 I/O 처리에는 libuv의 스레드 풀이 쓰인다.) - npm — 패키지 생태계가 크다.
자료
- 공식 사이트 : https://nodejs.org
- 공식 문서 : https://nodejs.org/docs/latest/api/
댓글 남기기