Node.js는 브라우저 밖에서 자바스크립트를 실행하는 런타임입니다. 서버에서도, 터미널에서도, 명령줄 도구로도 실행됩니다. 프로그래밍 언어가 아니고(언어는 자바스크립트입니다) 프레임워크도 아닙니다(Express가 Node.js 위에서 돌아가는 프레임워크입니다). 자바스크립트를 실행하는 구글의 V8 엔진에, 이벤트 루프와 브라우저에는 없는 파일, 네트워크, 프로세스용 내장 API를 합친 것입니다.
파일 내용, 메이저 버전(v24), 그리고 window에 대해 undefined가 출력되었습니다. Node.js에는 window를 만들어 줄 웹 페이지가 없기 때문입니다. fs와 process는 Node.js에만 있습니다. 같은 줄을 브라우저 탭에서 실행하면 첫 줄에서 에러가 납니다.
Node.js는 프레임워크인가요, 언어인가요?
둘 다 아닙니다. 언어는 자바스크립트이고, Node.js는 그것을 실행하는 프로그램입니다. JVM이 자바를, CPython이 파이썬을 실행하는 것과 같습니다. 프레임워크는 그 위에 올라갑니다. Express, Fastify, NestJS는 Node.js 프로젝트에 설치하는 라이브러리입니다. 둘의 자세한 비교는 Node.js vs JavaScript 페이지에 있습니다.
내부를 보면 Node.js는 네 부분으로 되어 있습니다.
- V8: 크롬의 자바스크립트 엔진입니다. 코드를 기계어로 바꿔 실행합니다.
- libuv: 이벤트 루프를 제공하는 C 라이브러리입니다. 디스크, 네트워크, 타이머 같은 느린 작업을 뒤에서 처리하고 결과를 콜백에 돌려줍니다.
- Node 자체 API: 파일용
fs, 서버용http, 그리고path,process,crypto,events등. 설치 없이require나import로 바로 씁니다. - npm: Node.js와 함께 설치되는 패키지 매니저입니다. 어떤 언어보다 큰 패키지 저장소를 쓸 수 있습니다.
Node.js 파일을 실행하는 방법
공식 사이트에서 Node.js를 설치하고(LTS 버전을 고르세요), 터미널에서 확인한 뒤 파일을 실행합니다.
node --version # prints v24.x.x or similar
node app.js # runs app.js and exits when it has nothing left to do
node # with no file: an interactive prompt (the REPL)
기다리는 것이 하나도 없으면 프로그램은 스스로 끝납니다. 타이머도, 열린 서버도, 진행 중인 파일 읽기도 없는 상태입니다. 스크립트는 끝나는데 웹 서버는 계속 실행되는 이유가 이것입니다.
핵심 개념, 논블로킹 I/O
Node.js는 느린 작업을 기다리지 않습니다. 파일 읽기나 네트워크 요청을 시작한 뒤 바로 다음 줄을 실행하고, 결과가 준비되면 함수를 호출합니다.
readFile 다음에 있는 두 console.log 줄이 먼저 실행되고, 파일 내용은 마지막에 도착했습니다. Node.js 프로세스 하나가 수천 개의 연결을 처리할 수 있는 방식이 이것입니다. 한 요청이 데이터베이스를 기다리는 동안 이벤트 루프가 나머지 요청을 계속 진행시킵니다.
Node.js와 브라우저의 차이
| 브라우저 | Node.js | |
|---|---|---|
| 실행 위치 | 웹 페이지 안 | 터미널이나 서버 |
| 있는 것 | window, document, DOM, localStorage | fs, process, http, Buffer, require |
| 전역 객체 | window(와 globalThis) | global(과 globalThis) |
| 디스크의 파일 | 접근 불가 | 사용자 권한 안에서 모두 접근 가능 |
setTimeout, console, fetch, URL | 있음 | 있음 |
Node.js는 어디에 쓰나요
- 웹 서버와 API: REST, GraphQL 백엔드. 보통 Express와 함께 씁니다.
- 실시간 앱: 채팅, 실시간 대시보드, WebSocket 멀티플레이어 게임처럼 많은 연결을 동시에 열어 두는 앱.
- 명령줄 도구: npm 자체, Vite, ESLint, Prettier, TypeScript 컴파일러가 모두 Node.js에서 실행됩니다.
- 스크립트와 자동화: 파일 이름 바꾸기, API 호출, 데이터 이전.
가장 흔한 용도는 HTTP 서버이고, 첫 서버는 내장 http 모듈만으로 충분합니다.
서버가 GET /hello에 받은 경로를 그대로 담아 응답했습니다. 요청 바의 경로를 /anything으로 바꿔 보내 보세요. 이 서버는 모든 URL을 함수 하나로 처리하므로 응답도 따라 바뀝니다.
Node.js를 선택해야 할 때
작업 대부분이 I/O를 기다리는 일(요청, 데이터베이스, 파일)이고 프론트엔드와 백엔드를 한 언어로 쓰고 싶다면 Node.js가 맞습니다. 동영상 인코딩이나 큰 수치 계산처럼 CPU를 오래 쓰는 작업에는 덜 맞습니다. 긴 계산은 하나뿐인 자바스크립트 스레드를 막고, 다른 요청은 모두 그 계산이 끝나기를 기다려야 하기 때문입니다.
자주 묻는 질문
Node.js는 프론트엔드인가요, 백엔드인가요?
대부분 백엔드입니다. Node.js는 방문자의 브라우저가 아니라 서버나 내 컴퓨터에서 실행됩니다. 그래도 프론트엔드 개발자도 매일 씁니다. npm, Vite, ESLint 같은 도구가 Node.js 프로그램이기 때문입니다.
Node.js는 누가 언제 만들었나요?
Ryan Dahl이 2009년에 공개했습니다. 지금은 OpenJS Foundation이 관리하며, 6개월마다 새 메이저 버전이 나오고 짝수 버전이 장기 지원(LTS)을 받습니다.
Node.js를 배우기 전에 자바스크립트를 알아야 하나요?
네, 최소한 기초는 필요합니다. 변수, 함수, 객체, 배열, 그리고 콜백이나 Promise입니다. Node.js는 새 문법이 아니라 API를 더하는 것이라서, 언어에 대해 배운 내용이 그대로 적용됩니다.
Node.js는 싱글 스레드인가요?
여러분의 자바스크립트는 스레드 하나에서 실행됩니다. Node.js는 파일 시스템 작업, DNS, 일부 암호화 작업을 위해 뒤에서 작은 스레드 풀을 쓰기 때문에, 느린 I/O를 기다리는 동안에도 코드가 막히지 않습니다.