Node.js와 브라우저 둘 다 자바스크립트 엔진을 내장하고 있기 때문에, 자바스크립트라는 프로그래밍 언어를 기반으로 실행된다. 하지만, 이 두 가지 실행환경은 존재 목적이 매우 다르다.
브라우저는 HTML, CSS, 자바스크립트를 실행하여 웹 페이지를 화면에 띄워주는게 목적이지만, Node.js는 서버 개발 환경을 제공하는 것이 목적이다. 기본적으로, 두 환경 모두 자바스크립트 기반이기 때문에 ECMAScript를 실행할 수는 있지만, 각 환경에서 자신의 특수한 목적을 실현시키기 위해 제공되는 API들은 서로 호환이 되지 않는다.
API (Application Programming Interface)
어떤 플랫폼이나 실행 환경 등에서 제공하는 인터페이스.
즉, 개발자가 특정 환경에서 자유롭게 가져다 쓸 수 있는 함수나 객체 등을 의미한다.
앞서 언급한 듯이, 브라우저와 Node.js 모두 자바스크립트를 사용하더라도 어느 환경에서 개발하는 지에 따라 사용할 수 있는 API가 다르다.
브라우저의 경우, 사용자에게 웹 페이지를 보여주는 것이 목적이기 때문에 HTML 요소를 선택하고 조작하는 DOM API를 제공한다. 또한, 이런 작업을 수행하기 위해서 브라우저는 window / document 객체에 접근할 수 있다.
이와 달리, Node.js는 주로 서버에서 데이터를 다루는 목적으로 사용되기 때문에 로컬 스토리지에 파일을 생성하고 수정하는 File 시스템 관련 API가 제공된다. 이런 작업을 수행하기 위해서 Node.js는 브라우저보다 컴퓨터의 깊숙한 곳까지 제어할 수 있다. 브라우저는 사용자 컴퓨터에서 동작하기 때문에, 브라우저를 통해 사용자의 컴퓨터에 있는 파일들을 조작할 수 있다면 보안적으로 매우 위험하기 때문에 브라우저 환경에서는 이러한 동작을 하지 않는다.
각각 브라우저와 Node.js의 모든 API는 다음 주소로 확인해볼 수 있다.
브라우저 : https://developer.mozilla.org/ko/docs/Web/API
Node.js : https://nodejs.org/docs/latest/api/
Node.js와 크롬 브라우저는 공통적으로 V8 자바스크립트 엔진을 사용하고 있다.
브라우저마다 사용하는 자바스크립트 엔진이 다르다.
실행 환경 | 자바스크립트 엔진 |
---|---|
Node.js + Chrome | V8 |
FireFox | SpiderMonkey |
Edge | V8 + Chakra (이전 버전) |
Node.js에서는 사용자가 앱에서 어떤 버전의 Node.js 버전을 사용할 것인지 선택이 가능하다. 그러나, 브라우저 환경에서는 방문자가 어떤 브라우저를 사용할 것인지 선택할 수 없다. 자바스크립트는 빠르게 발전하는데 비해, 브라우저 업그레이드는 뒤쳐질 때가 있어 종종 문제가 발생하기도 한다. Babel이라는 자바스크립트 컴파일러를 통해 이런 문제를 해결할 수 있다. Node.js는 버전 선택이 가능하여 이런 문제에서 자유롭다.
Node.js에서 CommonJS 모듈 시스템을 사용하는 반면, 브라우저는 ES 모듈 표준을 사용하고 있다. 즉, Node.js에서는 require()를, 브라우저에서는 import를 이용하여 다른 파일의 코드를 불러올 수 있다.
참고자료
node.js와 브라우저의 차이 - 온라인 코딩 스쿨 코드잇
자바스크립트 개발 환경과 실행 방법 - Poiema Web
Node.js와 브라우저의 차이점 (번역) - 휘