모든 브라우저 환경
Node.js 환경
Node.js도 자바스크립트 엔진을 내장하고 있어,
브라우저에서 동작하는 코드는 Node.js 환경에서도 동일하게 동작한다.
브라우저는 HTML, CSS, JS를 실행해 웹페이지를 브라우저 화면에 렌더링하는 것
Node.js는 브라우저 외부에서 자바스크립트 실행 환경을 제공하는 것
브라우저와 Node.js 모두 JS의 코어인 ECMAScript
를 실행할 수 있다.
ECMAScript 이외에 추가로 제공하는 기능은 호환되지 않는다.
브라우저
: ECMAScript
+ 클라이언트 사이드 Web API
Node.js
: ECMAScripit
+ Node.js API
클라이언트 사이드 Web API
DOM, BOM, Canvas, XMLHttpRequest, fetch, requestAnimation frame, SVG, Web Storage, Web Component, Web Worker 등
Node.js API
브라우저는 HTML 파일을 로드하면 script 태그에 포함된 JS 코드를 실행한다.
로딩된 웹페이지의 에러를 확인하거나 console.log
메서드의 실행 결과를 확인한다.
JS 코드를 직접 입력해 그 결과를 확인할 수 있는 REPL 환경으로 사용할 수도 있다.
REPL; Read Eval Print Loop
- 입력 수행 출력 반복
- 단일 사용자의 입력(단일 식)을 취하고 이를 평가(실행)하고 결과를 사용자에게 반환시키는 단순한 상호작용 컴퓨터 프로그래밍 환경
JS 코드를 디버깅한다.
콘솔창에서 에러 발생 위치를 나타내는 링크를 클릭하면 Sources 패널로 이동한다.
코드 왼쪽의 라인 번호를 클릭해 브레이크포인트를 걸고 디버깅을 할 수 있다.
클라이언트 사이드(브라우저)에서 동작하는 간단한 웹 애플리케이션은 브라우저만으로도 개발할 수 있다.
하지만 프로젝트의 규모가 커짐에 따라 React, Angular, Lodash 같은 프레임워크 또는 라이브러리를 도입하거나 Babel, Webpack, ESLint 등 여러 가지 도구를 사용할 필요가 있다.
이때 Node.js
와 npm
이 필요하다.
Ryan Dahl이 2009년 발표
크롬 V8 자바스크립트 엔진으로 빌드된 자바스크립트 런타임 환경
브라우저에서만 동작하던 자바스크립트를 브라우저 이외의 환경에서 동작시킬 수 있는 자바스크립트 실행 환경
설치 위치 : /usr/local/bin/node
(버전에 따라 다를 수 있다.)
npm; node package manager
자바스크립트 패키지 매니저
Node.js에서 사용할 수 있는 모듈들을 패키지화해서 모아둔 저장소 역할과 패키지 설치 및 관리를 위한 CLI 제공
Node.js를 설치하면 npm도 함께 설치된다.
Node.js가 제공하는 REPL을 사용하면 간단한 JS 코드를 실행해 결과를 확인해 볼 수 있다.
// 아래 명령어 입력 후 프롬프트가 >로 변경되면 JS 코드를 실행해 볼 수 있다.
node
// JS 파일 실행 (확장자 생략 가능)
node 파일명
// Node.js REPL 종료
[Ctrl + C] 두 번 입력
JS 프로젝트는 번들링 혹은 컴파일이라고 불리는 과정을 거쳐 배포된다.
각 브라우저가 최신 문법을 지원하지 않을 수 있고, 사용자가 사용하는 버전에 따라 지원 현황이 다르기 때문에 번들링 과정을 통해 범용적으로 웬만한 브라우저가 읽을 수 있게 만들어준다.
최신 개발 환경에서 작성된 파일을 브라우저에 올바르게 배포하기 위해 거쳐야 하는 과정인 번들링이 주로 Node.js로 작성된 프로그램 내부에서 일어난다.
VS Code에서는 확장 플러그인 저장소인 마켓플레이스를 활용해 다양한 확장 플러그인을 다운로드해서 설치할 수 있다.
// 현재 표시 중인 JS 파일 실행
`[control + option + N]`
ReferenceError: alert is not defined
- Code Runner는 Node.js 환경을 사용해 JS를 실행한다.
- 따라서 alert과 같이 브라우저에서만 동작하는 클라이언트 사이드 Web API가 포함된 코드를 작동시키면 에러가 발생한다.
설치 후 화면 아래의 Go Live
버튼을 클릭하면
가상 서버가 기동되어 브라우저에 HTML 파일이 자동으로 로딩된다.
소스코드를 수정할 때마다 수정 사항이 가상 서버에 자동으로 반영된다.