모든 브라우저는 자바스크립트를 해석하고 실행할 수 있는 자바스크립트 엔진을 내장하고 있다.
브라우저 뿐만 아니라 Node.js도 자바스크립트 엔진을 내장하고 있다. 따라서 자바스크립트는 브라우저 환경 또는 Node.js 환경에서 실행할 수 있다. 기본적으로 브라우저에서 동작하는 코드는 Node.js 환경에서도 동일하게 동작한다.
그러나 브라우저와 Node.js는 용도가 다르다는 점을 유의하여야 한다. 브라우저는 HTML, CSS, 자바스크립트를 실행해 웹페이지를 브라우저 화면에 렌더링하는 것이 주된 목적이지만 Node.js는 브라우저 외부에서 자바스크립트 실행 환경을 제공하는 것이 주된 목적이다. 따라서 브라우저와 Node.js 모두 자바스크립트의 코어인 ECMAScript를 실행할 수 있지만 브라우저와 Node.js에서 ECMAScript 이외에 추가로 제공하는 기능은 호환되지 않는다.
(예 1)
브라우저 - DOM API(HTML 요소를 선택하거나 조작하는 기능의 집합) 기본적으로 제공
Node.js - DOM API 미제공
(예 2)
Node.js - 파일 시스템 기본 제공 (파일 생성 및 수정)
브라우저 - 파일 시스템 미제공 (BUT! Web API인 FileReader 객체를 사용해 사용자가 지정한 파일을 읽어 들이는 것은 가능함)
NOTE 브라우저에서 파일 시스템을 제공하지 않는 이유
: 웹 어플리케이션의 자바스크립트는 사용자 컴퓨터의 브라우저에서 동작한다. 만약 브라우저를 통해 다운로드되어 실행되는 자바스크립트가 사용자 컴퓨터의 로컬 파일을 삭제하거나 수정하고 생성할 수 있다면 이는 사용자 컴퓨터가 악성 코드에 노출된 것과 마찬가지다. 따라서 보안사의 이유로 브라우저 환경의 자바스크립트는 파일 시스템을 제공하지 않는다.
NOTE 브라우저에서 지원되는 것과 Node.js에서 지원되는 것
: 브라우저는 ECMAScript와 DOM, BOM, Canvas, XMLHttpRequest, fetch, requestAnimationFrame, SVG, Web Storage, Web Component, Web Worker 같은 클라이언트 사이드 Web API를 지원한다.
Node.js는 클라이언트 사이드 Web API를 지원하지 않고 ECMAScript와 Node.js 고유의 API를 지원한다.
ECMAScript는 브라우저와 Node.js의 공통 지원사항이다
이 강좌에서는 모든 과정은 가장 높은 웹 브라우저 점유율을 가지고 있으며 ECMAScript 사양을 준수하는 크롬 웹브라우저를 기준으로 진행한다.
서버에서 웹사이트의 콘텐츠를 수집하기 위해 웹사이트에서 HTML 문서를 가져온 다음, 이를 가공해서 필요한 데이터만 추출하는 경우가 있다. 이를 웹 크롤링(Web Crawling)이라 한다. 서버 환경은 DOM API를 제공하지 않으므로 cheerio와 같은 DOM 라이브러리를 사용해 HTML 문서를 가공하기도 한다