Nodejs와 웹 브라우저는 모두 자바스크립트의 런타임(실행환경)이자 자바스크립트 언어를 사용한다 점에서 공통점을 갖지만, 사용경험을 다르게 만드는 다음과 같은 주요 차이점이 있다.
브라우저는 DOM과 Cookies와 같은 Web Platform Api과 상호작용할 수 있지만, Nodejs에는 그러한 것이 존재하지 않는다. 또한 Node.js에서는 브라우저에서만 제공하는 document
, window
등의 객체와 alert
등을 사용할 수 없다.
직접 경험한 예로, Node.js 환경에서 alert
함수를 호출했을때, alert is not defined
라는 ReferenceError가 발생했다. 이는 alert는 브라우저에서 제공하는 Web api이기 때문에, 브라우저 환경에서만 사용할 수 있다.
반면, Node.js에서만 모듈을 통해 사용가능한 API들이 있다. 예를 들면, fs 모듈은 file과 관련된 다양한 기능을 제공하는데, 파일 읽기와 쓰기 등 파일과 관련된 전반적인 작업을 처리할 수 있다.
Node.js를 사용해 만든 애플리케이션을 만들때, nvm install --lts
혹은 nvm install [특정 버전]
등의 명령어로 특정 버전을 선택할 수 있다. 여기서 LTS란, Long Term Suppor로 지원기간이 긴 버전을 뜻한다. 반면, 브라우저를 사용할때, 방문자는 어떤 버전의 브라우저를 사용할 것인지 선택할 수 없다. 즉, Node.js로 애플리케이션을 만들때, ES6,7,8,9 자바스크립트 문법을 사용할 수 있지만, 브라우저는 업데이트가 느린 편이므로 새로운 문법이 적용되지 않거나 예전 버전만 지원하는 경우가 있다. 단, 이럴 경우에는 Babel
을 사용해 구 버전의 브라우저가 ES6+와 호환되도록 변환할 수 있다. 하지만, Node.js에서는 이러한 과정이 필요하지 않다.
Node.js에서는 모듈을 사용할때, CommonJS module system을 사용하지만, 브라우저에서는 ES Module standard를 사용한다. 예를들면, Node.js에서는 모듈을 가져올때에는require()
를 사용하고 내보낼때에는 exports
, module.exports
를 사용한다. 브라우저에서는 import
와 export
, export default
를 사용한다.
reference