브라우저, 자바스크립트, npm에 대한 오해 정리
그동안 Node.js는 “프론트엔드 개발자가 쓰는 도구” 혹은 “npm 쓰려고 어쩔 수 없이 설치하는 것” 정도로만 인식하고 있었다.
이번에 구조를 차근차근 정리하면서, 왜 Node가 존재하고, npm이 왜 저런 방식으로 동작하는지가 명확해졌다.
핵심은 **“자바스크립트는 브라우저 언어가 아니라, 런타임 언어다”**라는 사실이었다.
처음 자바스크립트는 브라우저 안에서만 실행되었다.
HTML을 조작하고
버튼 클릭에 반응하고
DOM을 다루는 보조 스크립트 언어
그래서 자연스럽게
“자바스크립트는 브라우저에서만 실행된다”
라는 인식이 굳어졌다.
하지만 이건 언어의 한계가 아니라, 실행 환경의 한계였다.
브라우저 전체가 자바스크립트를 실행하는 게 아니다.
브라우저 안에는 다음과 같은 구성 요소가 있다.
화면을 그리는 렌더링 엔진
DOM / window / document
자바스크립트를 해석·실행하는 엔진
이 중 자바스크립트 엔진만 떼어내어
브라우저 밖에서 쓸 수 있게 만든 것이 바로 **Node.js**다.
Node.js는 브라우저가 아니다.
DOM 없음
window 없음
document 없음
대신:
파일 시스템 접근
네트워크 처리
프로세스 제어
CLI 실행
이 가능하다.
즉,
Node.js는
브라우저의 자바스크립트 엔진을
서버·CLI 환경에 맞게 재구성한 실행 환경이다.
이 한 문장으로 정리된다.
중요한 전환점은 여기였다.
자바스크립트 프로그램은 혼자 실행되지 않는다.
항상 누군가가 실행해 준다.
Java → JVM이 실행
JavaScript → Node.js(또는 브라우저 엔진)가 실행
node app.js
이 명령은 “app.js를 실행”이 아니라
**“node에게 app.js를 실행하라고 시킨다”**는 의미다.
그래서:
“node 위에서 도는 프로그램”이란
운영체제가 직접 실행하는 프로그램이 아니라,
Node.js라는 런타임이 실행 주체가 되는 프로그램이다.
이제 npm의 정체도 자연스럽게 이해된다.
npm은:
OS 프로그램 설치 도구 ❌
Node 생태계 패키지 관리자 ⭕
Node 위에서 실행될 코드와 도구를 관리 ⭕
npm이 설치하는 것은:
실행 파일처럼 보이지만
실제로는 node가 실행할 엔트리 포인트(JS)
그래서
npm run
을 실행하면:
node_modules/.bin이 임시로 PATH에 추가
해당 스크립트가 node 프로세스 안에서 실행
된다.
이 구조 덕분에:
전역 설치 없이
팀원 환경 차이 없이
CI 서버에서도 동일하게
동작한다.
자바스크립트는 브라우저 언어가 아니다.
자바스크립트는 ‘엔진이 있는 곳’에서 실행되는 언어이고,
Node.js는 그 엔진을 브라우저 밖으로 꺼낸 런타임이다.
이걸 이해하니:
npm의 역할
node_modules/.bin의 존재 이유
전역 설치를 피해야 하는 이유
가 한 번에 정리됐다.
Node를 애매하게 이해한 상태에서는
npm도, 프론트엔드 빌드도, CI 연계도 계속 헷갈린다.
하지만 **“Node = 런타임”**이라는 관점으로 바라보는 순간,
모든 퍼즐이 제자리를 찾는다.
이건 프론트엔드 지식이 아니라, 플랫폼 이해에 가까운 개념이었다.
#nodejs #javascript