본문 바로가기

FrontEnd/Frontend-related basic knowledge

자바스크립트 실행환경(브라우저와 Node.js)에 대하여

출처: https://poiemaweb.com/js-hello-world

자바스크립트 언어를 실행시킬수 있는 환경은 두가지가 존재한다. 브라우저와 Node.js이다. 두개 모두 자바스크립트엔진을 가지고 있어 자바스크립트의 코어인 ECMAScript를 실행할 수는 있지만 브라우저와 Node.js에서 ECMAScript 이외에 추가적으로 제공하는 기능은 호환되지 않는다.

즉, 자바스크립트엔진을 가지고 있다는 것이 브라우저와 Node.js의 공통점이다.

차이점은 이렇다. 브라우저는 그 주된 목적이 HTML, CSS, Javascript로 작성된 웹페이지를 브라우저 화면에 랜더링하는 것이 주목적이라면 Node.js는 그 주된 목적이 서버사이드 개발 환경을 제공하는 것이 목적이다.

예를들어 브라우저는 HTML요소를 선택하거나 조작하는 기능들의 집합인 DOM API를 기본적으로 제공한다. 하지만 서버 개발 환경을 제공하는 것이 주 목적인 Node.js는 클라이언트 사이드 Web API인 DOM API를 제공하지 않는다. 서버에서는 HTML 요소를 다룰 일이 없기 때문이다. 반대로 Node.js에서는 파일을 생성하고 수정할 수 있는 File 시스템을 기본 제공하지만 브라우저는 이를 지원하지 않는다. (Web API인 File API FileReader 객체를 사용해 사용자가 지정한 파일을 읽어 들이는 것은 가능하다.) 브라우저는 사용자 컴퓨터에서 동작한다. 만약 브라우저를 통해 사용자 컴퓨터에 파일을 생성하거나 기존 로컬 파일을 수정할 수 있다면 사용자 컴퓨터는 악성 코드에 노출되기 쉽기 때문에 보안 상 이유로 이를 금지하고 있다.

이처럼 브라우저는 ECMAScript와 DOM, BOM, Canvas, XMLHttpRequest, Fetch, requestAnimationFrame, SVG, Web Storage, Web Component, Web worker와 같은 클라이언트 사이드 Web API를 지원한다. Node.js는 클라이언트 사이드 Web API는 지원하지 않고 ECMAScript와 Node.js 고유의 API를 지원한다.