1995년, 넷스케이프 커뮤니케이션즈(Netscape communications) 웹페이지의 보조적인 기능을 수행하기 위해 브라우저에서 동작하는 경량 프로그래밍 언어 도입을 결정한다. 그렇게 탄생한 것이 바로 브렌던 아이크(Brendan Eich)가 개발한 자바스크립트(JavaScript)이다.
자바스크립트의 파생 버전인 마이크로소프트의 JScript가 나오면서 브라우저에 따라 웹페이지가 정상적으로 동작하지 않는 크로스 브라우징 이슈가 발생하기 시작했다.
1996년 넷스케이프 커뮤니케이션즈는 컴퓨터 시스템의 표준을 관리하는 비영리 표준화 기구인 ECMA 인터내셔널에 자바스크립트 표준화를 요청한다.
1997년 자바스크립트 초판(ECMAScript 1)이 완성되었고, 상표권 문제로 자바스크립트는 ECMAScript로 명명되었다.
2015년에 공개된 ECMAScript 6(ECMAScript 2015, ES6)는 let/const 키워드, 화살표 함수, 클래스, 모듈 등과 같이 범용 프로그래밍 언어로서 갖춰야 할 기능들을 대거 도입하는 큰 변화가 있었다.
Ajax(Asynchronous JavaScript and XML)의 등장은 이전의 패러다임을 획기적으로 전환했다. 즉, 웹페이지에서 변경할 필요가 없는 부분은 다시 랜더링하지 않고, 서버로부터 필요한 데이터만 전송받아 변경해야 하는 부분만 한정적으로 랜더링하는 방식이 가능해진 것이다.
2006년 jQuery의 등장으로 다소 번거롭고 논란이 있던 DOM(Document Object Model)을 더욱 쉽게 제어할 수 있게 되었고 크로스 브라우징 이슈도 어느 정도 해결되었다.
V8 자바스크립트 엔진의 등장으로 자바스크립트는 데스크톱 애플리케이션과 유사한 사용자 경험(UX: user experience)을 제공할 수 있는 웹 애플리케이션 프로그래밍 언어로 정착하게 되었다.
2009년, 라이언 달(Ryan Dahl)이 발표한 Node.js는 구글 V8 자바스크립트 엔진으로 빌드된 자바스크립트 런타임 환경(Runtime Environmnet)이다.
Node.js는 브라우저의 자바스크립트 엔진에서만 동작하던 자바스크립트를 브라우저 이외의 환경에서도 동작할 수 있도록 자바스크립트 엔진을 브라우저에서 독립시킨 자바스크립트 실행 환경이다. 서버 사이드 애플리케이션 개발에 주로 사용되며, 이에 필요한 모듈, 파일 시스템, HTTP 등 빌트인 API를 제공한다.
Node.js는 비동기 I/O를 지원하며 단일 스레드(single thread) 이벤트 루프 기반으로 동작함으로써 요청(request)처리 성능이 좋다. 따라서 데이터를 실시간으로 처리하기 위해 I/O가 빈번하게 발생하는 SPA(single Page Application)에 적합하다. 하지만 CPU 사용률이 높은 애플리케이션에는 권장하지 않는다.
자바스크립트는 일반적으로 프로그래밍 언어로서 기본 뼈대를 이루는 ECMAScript와 브라우저가 별도 지원하는 클라이언트 사이드 Web API를 아루는 개념이다.
인터프리터 언어(Interpreter Language) vs 컴파일러 언어(Compiler Language)
자바스크립트는 웹 브라우저에서 동작하는 유일한 프로그래밍 언어이다. 개발자가 별도의 컴파일 작업을 수행하지 않는 인터프리터 언어(Interpreter Language)이다. 대부분의 모던 자바스크립트 엔진은 인터프리터와 컴파일러의 장점을 결합해 비교적 처리 속도가 느린 인터프리터의 단점을 해결했다.
자바스크립트는 명령형(Imperative), 함수형(functional), 프로토타입 기반(prototype-based), 객체지향(Object-Oriented) 프로그래밍을 지원하는 멀티 패러다임 프로그래밍 언어다.
크로스 브라우징 이슈(Cross Browsing Issue): 국제 웹 표준화 기구(W3C)의 가이드 라인을 따르지 않는 브라우저 각각의 동작 방식에 따라 나타나는 호환성 문제.
랜더링(Rendering): HTML, CSS, 자바스크립트로 작성된 문서를 해석해서 브라우저에 시각적으로 출력하는 것을 말한다. 서버에서 데이터를 HTML로 변환해서 브라우저에게 전달하는 과정(SSR: Server Side Rendering)을 가리키기도 한다.
Ajax(Asynchronous JavaScript and XML): 자바스크립트를 이용해 서버와 브라우저가 비동기(asynchronous)방식으로 데이터를 교환할 수 있는 통신 기능.
런타임 환경(Runtime Environment): 컴퓨터가 실행되는 동안 프로세스나 프로그램을 위한 소프트웨어 서비스를 제공하는 가상 머신의 상태이다. 운영 체제 자체에 속하는 경우도 있고 운영 체제에서 작동하는 소프트웨어를 뜻할 수도 있다.
단일 스레드 처리(single-thread processing): 하나의 트랜잭션(transaction)에 대한 처리가 모두 완료되지 않는 동안에는 다음 트랜잭션을 받지 않는 방식.
스레드(thread): 온라인 실시간 시스템에서는 하나의 트랜잭션이 받아들여지면 이것에 대해서 일련의 처리가 실시된다. 이런 일련의 처리를 스레드(thread)라고 한다.
CBD(Component Based Development): 컴포넌트의 재사용을 통해 개발 생산성 향상, 개발기간 단축 및 신뢰성 높은 소프트웨어를 생산할 목적으로 컴포넌트의 생성, 조립하여 소프트웨어를 개발하는 방법론
* 모던 자바스크립트 Deep Dive ( 자바스크립트의 기본 개념과 동작 원리 ) / 이웅모 지음