프로그래밍이란 컴퓨터와 이루어지는 일종의 커뮤니케이션.
0과 1밖에 알지 못하는 기계가 이해할 수 있도록 정확하고 상세하게 요구를 설명하는 작업이며 그 결과물이 코드이다.
사람들이 프로그래밍 언어를 사용해 프로그램을 작성한 후 그것을 컴퓨터가 이해할 수 있는 기계어로 변환하는 것을 컴파일러 혹은 인터프리터라고 한다.
자바스크립트 표준 사양인 ECMA-262를 말하며 핵심 문법을 규정한다. 각 브라우저 제조사는 ECMAScript 사양을 준수해서 브라우저에 내장되는 자바스크립트 엔진을 구현한다.
자바스크립트의 파편화를 방지하고 모든 브라우저에서 정상적으로 동작하는 js의 필요성이 중요해졌다.
그래서 1997년 ECMA-262라 불리는 표준화된 JS초판(ECMAScript 1) 사양이 완성되었고 이후 ECMAScript로 명명되었다.
++ 추가 정보
1993년 ES3이 공개되고 10년만인 2009년에 출시된 ES5는 HTML5와 함께 출현한 표준 사양이다.
이후 2015년에 공개된 ECMAScript(ES6)는 let/const 키워드, 화살표 함수, 클래스, 모듈 등과 같이 범용 프로그래밍 언어로서 갖춰야 할 기능들을 대거 도입하는 큰 변화가 있었다.
이후 버전업은 비교적 작은 기능을 추가하는 수준으로 매년 공개할 것으로 예고되었다.
HTML, CSS, JS로 작성된 문서를 해석해서 브라우저에 시각적으로 출력하는 것을 말한다. 때로는 서버에서 데이터를 HTML로 변환해서 브라우저에 전달하는 과정(SSR : server side rendering)을 가리키기도 한다.
Asynchronous Javascript and XML
의 약자로 자바스크립트를 이용해 서버와 브라우저가 비동기 방식으로 데이터를 교환할 수 있는 통신 기능이다.
이전의 웹페이지는 html태그로 시작해서 html 태그로 끝나는 완전한 HTML 코드를 서버로부터 전송받아 웹페이지 전체를 다시 렌더링했다. 이러한 방식은 성능적인 면에서 불리하고 이로 인해 화면이 전환되면 화면이 순간적으로 깜빡이는 현상이 발생하였다.
하지만 Ajax의 등장으로 웹페이지에서 변경할 필요가 없는 부분은 다시 렌더링하지 않고, 서버로부터 필요한 데이터만 전송받아 변경해야 하는 부분만 한정적으로 렌더링하는 방식이 가능해졌다. 이로인해 웹 브라우저에서도 빠른 성능과 부드러운 화면 전환이 가능해졌다.
구글 V8 자바스크립트 엔진으로 빌드된 자바스크립트 런타임 환경이다.
즉, Node.js는 브라우저의 자바스크립트 엔진에서만 동작하던 자바스크립트를 브라우저 이외의 환경에서도 동작할 수 있도록 자바스크립트 엔진을 브라우저에서 독립시킨 자바스크립트 실행 환경이다.
Node.js는 비동기 I/O를 지원하며 단일스레드 이벤트 후프 기반으로 동작함으로써 요청 처리 성능이 좋다. 따라서 Node.js는 데이터를 실시간으로 처리하기 위해 I/O가 빈번하게 발생하는 SPA에 적합하다. 하지만 CPU 사용률이 높은 애플리케이션에서는 권장하지 않는다.
Node.js의 등장으로 자바스크립트는 브라우저를 벗어나 서버 사이드 애플리케이션 개발에서도 사용할 수 있어 백엔드 영역까지 아우르는 웹 프로그래밍 언어로 자리잡았다.
자바스크립트는 웹 브라우저에서 동작하는 유일한 프로그래밍 언어로 개발자가 별도의 컴파일 작업을 수행하지 않아도 되는 인터프리터 언어
이다.
모든 브라우저는 자바스크립트를 해석하고 실행할 수 있는 자바스크립트 엔진을 내장하고 있다. 뿐만 아니라 Node.js도 자바스크립트 엔진을 내장하고 있다. 하지만 브라우저와 Node.js는 용도가 다르다.
브라우저는 HTML, CSS, 자바스크립트를 실행해 웹페이지를 브라우저 화면에 렌더링하는 것이 주목적이지만 Node.js는 브라우저 외부에서 자바스크립트 실행 환경을 제공하는 것을 주된 목적으로 한다.
따라서 브라우저와 Node.js 모두 자바스크립트 코어인 ECMAScript를 실행할 수 있지만 브라우저와 Node.js에서 ECMAScript 이외에 추가로 제공하는 기능은 호환되지 않는다.
++
브라우저
: ECMAScript와 DOM, BOM, XMLHttpRequest, fetch, WebStorage 와 같은 클라이언트 사이드 Web API 제공
Node.js
: ECMAScript와 Node.js 고유의 API 제공
node package manager
의 약자로 Node.js에서 사용할 수 있는 모듈들을 패키지화해서 모아둔 저장소 역할과 패키지 설치 및 관리를 위한 CLI(Command Line Interface)를 제공한다. 자신이 작성한 패키지를 공개할 수도 있고 필요한 패키지를 검색해 재사용할 수도 있다.