fffo
자바스크립트 개요 본문
결국 프로그래밍은 요구사항의 집합을 분석해서 적절한 자료구조와 함수의 집합으로 변환한 후, 그 흐름을 제어하는 것이다.
js의 탄생
- 넷스케이프 커뮤니케이션즈에서 웹페이지의 보조적인 기능을 수행하기 위해 브라우저에서 동작하는 경량 프로그래밍 언어를 도입 → Brendan Eich의 자바스크립트
- 마이크로소프트에서 자바스크립트의 파생 버전인 JScript를 IE3.0에 탑재. 크로스 브라우징 이슈 발생. 표준화 필요성 대두
- 컴퓨터 시스템의 표준을 관리하는 비영리 표준화 기구 ECMA 인터네셔널의 자바스크립트 표준화 → ECMAScript
js 성장 역사
- 초창기 js는 웹페이지의 보조적 기능 수행을 위한 한정적 용도로 사용. 대부분의 로직은 웹서버에서 실행. 브라우저는 서버로부터 받은 html, css를 단순히 렌더링하는 수준
Ajax
- 1999년, js를 이용해 서버와 브라우저가 비동기방식으로 데이터교환 가능한 통신기능인 Ajax가 XMLHttpRequest라는 이름으로 등장
- 2005년 웹브라우저에서 js와 Ajax를 기반으로 동작하는 구글 맵스가 데스크톱 애플리케이션과 비슷한 성능과 부드러운 화면 전환 효과를 보여줌 →웹 애플리케이션 프로그래밍 언어로서 js의 가능성을 확인하는 계기를 마련
jQuery
- 2006년 jQuery 등장. 이전까지 제어가 번거로웠던 DOM을 쉽게 제어할 수 있게 하였고 크로스 브라우징 이슈도 어느 정도 해결됨.
V8 자바스크립트 엔진
- 구글 맵스를 시작으로 js로 웹앱을 구축하려는 시도가 늘면서 더욱 빠르게 동작하는 js엔진의 필요성 대두
- 2008년 구글의 V8 js엔진 등장. 빠른 성능으로 js가 데스크톱 앱과 유사한 UX제공할 수 있는 웹앱언어로 정착
- V8으로 촉발된 js의 발전으로 과거 웹서버에서 수행되던 로직들이 대거 클라이언트(브라우저)로 이동. 이는 웹앱에서 프론트엔드단이 주목받는 계기가 됨
Node.js
- 2009년, Ryan Dahl이 V8로 빌드된 자바스크립트 런타임 환경 Node.js를 발표
- Node.js는 브라우저의 js엔진에서만 동작하던 js를 브라우저 이외의 환경에도 동작하게끔 js엔진을 브라우저로부터 독립시킨 js 실행 환경임
- 주로 서버 사이드 애플리케이션 개발에 사용. 이에 필요한 모듈, 파일 시스템, HTTP 등 built-in API를 제공
- Node.js는 비동기 I/O를 지원, single thread event loop 기반으로 동작하여 request 처리 성능이 좋음
- 데이터를 실시간으로 처리하기 위해 I/O가 빈번하게 발생하는 SPA(Single Page Application)에 적합하나 CPU 사용률이 높은 앱에서는 권장하지 않음
SPA 프레임 워크
- 모던 웹 앱은 데스크톱 앱과 비슷한 성능과 UI를 제공하는 것이 필수가 되어 개발 규모와 복잡도 상승
- 이에 따라 많은 패턴과 라이브러리 출현했지만 변경에 유연하면서 확장 쉬운 앱 아키텍처의 구축을 어렵게 함 → 프레임워크 등장
자바스크립트와 ECMAScript
- ECMAScript는 자바스크립트의 표준 사항인 ECMA-262를 말하며 핵심 문법을 규정, 각 브라우저 제조사는 ECMAScript 사양을 준수하여 브라우저에 내장되는 js엔진을 구현함
- 자바스크립트는 일반적으로 ECMAScript와 브라우저가 별도 지원하는 클라이언트사이드 Web API (DOM, BOM 등)을 아우르는 개념임
- 클라이언트 사이드 Web API는 ECMAScript와 별도로 W3C에서 별도의 사양으로 관리 중
자바스크립트 특
- 웹브라우저에서 동작하는 유일한 프로그래밍 언어
- 개발자가 별도의 컴파일 작업을 수행하지 않는 인터프리터 언어
- 대부분의 모던 js 엔진은 인터프리터와 컴파일러의 장점을 결합해 인터프리터의 처리 속도 단점을 보완함
- 명령형, 함수형, 프로토타입 기반 객체지향 프로그래밍을 지원하는 멀티 패러다임 프로그래밍 언어
'Programming > Javascript' 카테고리의 다른 글
제어문 (0) | 2021.09.23 |
---|---|
연산자 (0) | 2021.09.22 |
데이터 타입 (0) | 2021.09.21 |
표현식과 문 (0) | 2021.09.20 |
js 실행환경, 변수 (0) | 2021.09.19 |
Comments