yunicornlab

JavaScript의 역사 본문

카테고리 없음

JavaScript의 역사

yunicornlab 2024. 7. 9. 23:56
반응형

JavaScript는 이름에 Java가 들어가있지만, Java와는 전혀 관련이 없다!

 

JavaScript 탄생 배경

1995년, 내가 태어나기 1년 전의 일이다.

당시 웹 브라우저 시장을 약 90%의 점유율로 지배하던 "넷스케이프 커뮤니케이션즈"라는 기업이 있었다.

이미 선도적인 위치를 차지하고 있었지만, 경쟁력을 유지하기 위해 웹 페이지의 동적인 기능을 수행할 가벼운 프로그래밍 언어를 필요로 했다.

 

이걸 브랜든 아이크(Brendan Eich) 아저씨가 해내셨다. (이분은 후에 Firefox도 개발하신 분이고, 지금도 살아계신다. 대단한 분이시다...)

처음에는 함수형 프로그래밍 언어인 Scheme로 만들라고 했던 것 같은데, 브랜든 아이크씨가 10일 만에 새로운 언어를 개발해버리셨다.

(10일 만에 새로운 프로그래밍 언어 창조라니.. 어떤 인생을 살아오신 겁니까)

이게 바로 자바스크립트인데, 처음엔 이름이 "Mocha"였다.

 

1995년 10월, 브랜든 아이크(Brendan Eich)씨가 10일 만에 Mocha라는 이름으로 언어를 완성하셨다.

1995년 9월, LiveScript로 이름이 변경되었다.

1995년 12월 4일, 최종적으로 JavaScript라는 이름으로 변경되었다.

사실, Java와 크게 상관이 없는데 왜 자바스크립트인가 하면, 당시 Java의 유명세가 강했기 때문에 마케팅 차원에서 이 유명세를 타기 위한 목적이었다고 한다.

 

표준화의 필요성

각 기업마다 자사 브라우저의 시장 점유율을 높이기 위해 자사 브라우저에서만 동작하는 기능이 추가되기 시작했다.

그러다보니 브라우저 종류에 따라 동작이 다르게 발생하는 문제가 발생했다. 이런 문제를 "크로스 브라우징 이슈"라고 한다.

그래서 모든 브라우저에서 의도한대로 동작할 수 있도록 표준화하는 작업의 필요성이 대두되었다.

그래서 JavaScript의 표준화를 정보와 통신 시스템을 위한 국제적 비영리 표준화 기구인 ECMA 인터내셔널에 요청하게 된다.

ECMA 인터내셔널이란?
유럽 컴퓨터 제조업체 협회(European Computer Manufacturers Association)로 시작된 표준화 기구로,
전 세계적으로 정보 통신 기술 표준을 제정하는 국제적인 비영리 표준화 기구이다.
1994년에 ECMA 인터내셔널로 개명해서 활동 범위를 전 세계로 확장했다고 한다.

 

표준화 이후 ECMAScript 버전 역사

1997년 7월, 표준화된 자바스크립트 초판인 ECMAScript 1(ES1)이 완성되었다.

이후, 버전을 업데이트하면서 현재는 ECMAScript 2024(ES15)까지 나왔다.

 

발전 단계는 다음과 같다. 

  • 1997년 ES1 : 최초 표준화 버전으로, JavaScript 1.1을 기반으로 기본 문법과 기능을 정의했다. 브라우저간 호환성을 개선하는 것이 목표였다.
  • 1998년 ES2 : 주로 ES1을 국제 표준에 맞게 수정한 작업이다. ISO/IEC 국제 표준과의 일치를 유지하기 위한 목적이었다.
  • 1999년 ES3 : 정규표현식과 try/catch 예외처리 등의 기능이 추가되었다.
  • 중간에 ES4도 있었지만, 합의에 도달하지 못해서 공식적으로 발표되지는 못했다고 한다.
  • ES3가 1999년인데 ES4는 취소되고 ES5는 10년 뒤인 2009년에 발표된다. 그래도 늦게 나온 만큼 아주 중요한 기능들이 많이 포함되었다. 현재도 많이 사용하는 배열 메서드(forEach, map, filter, reduce, some, every 등)와 JSON을 지원하는 기능과 엄격 모드(strict mode)등의 기능들이 추가되었다.
  • 2015년 대망의 ES6!!
    2015년에 아주 큰 변화가 일어난 ECMAScript 2015 (ES6)가 등장했다. 아래와 같은 기능들이 추가된, 그야말로 어마어마한 변화다.
    • let/const: 새로운 변수 선언 키워드 (블록 스코프)
    • 화살표 함수: 간결한 함수 표현식
    • 클래스(Class): 객체 지향 프로그래밍 지원
    • 모듈: 모듈화 지원(import/export)
    • 템플릿 리터럴(Template Literal): 백틱(``)을 사용한 문자열 리터럴
    • 디스트럭처링(Distructuring, 구조분해할당): 배열 및 객체 분해
    • 프라미스(Promise): 비동기 작업 처리를 위한 객체.
    • Spread/Rest 연산자
    • 함수 매개변수에 기본값 설정
    • for...of
    • Map과 Set
    • Symbol
    • Iterable
    • 제너레이터
    • Proxy
  • 2016년 ES7 : 지수 연산자(**), includes 메서드 등이 추가되었다.
  • 2017년 ES8 : 비동기 함수인 async/await, Object.values, Object.entries 메서드 등이 추가되었다.
  • 2018년 ES9 : rest/spread property, iteration, Promise.finally 메서드 등이 추가되었다.
    참고로 Rest/Spread 연산자는 이미 ES6에서 도입되었지만 이때에는 배열에서만 사용할 수 있었다.
    이후 ES9에서 객체에서도 사용할 수 있게 기능이 확장되었다고 보면 된다.
  • 2019년 ES10 : Object.fromEntries, flat, flatMap 등이 추가되었다.
  • 2010년 ES11 : globalThis, null 병합 연산자(??)옵셔널 체이닝(?), BigInt 등이 추가되었다.

 

그런데 연도와 버전 이름이 안맞아서 약간 헷갈린다. 2015년에 발표했지만 ES6이고, 2017년에 발표했지만 ES8이다. 😅

 

ECMAScript VS JavaScript

JavaScript 얘기하다가 왜 갑자기 ECMAScript를 말하게 되었을까?

결론부터 말하자면, JavaScript는 일반적으로 ECMAScript를 포함하는 개념이다.

ECMAScript는 Ecma 인터내셔널에 의해 제정된 ECMA-262 기술 규격에 의해 정의된 스크립트 언어이고,

JavaScript는 ECMAScript 사양을 준수하는 스크립트 언어이다.

하지만 JavaScript가 ECMAScript 보다 먼저 나왔다.

그래서 좀 혼동이 있을 수 있다.

ECMAScript는 JavaScript를 기반으로 하는 동시에, JavaScript 역시 ECMAScript를 기반으로 하기 때문이다.

하지만 평소에는 굳이 구분해서 말할 필요는 없는 것 같다.

유명한 책인 "모던 자바스크립트"에 따르면, ECMAScript와 Web API 등을 아우르는 개념이 JavaScript라고 한다.

 

JavaScript를 왜 배워야 할까?

그럼, 마지막으로 JavaScript를 배워야하는 이유에 대해 알아보자.

JavaScript에 대해 검색하면 "웹 브라우저에서 동작하는 유일한 프로그래밍 언어"라고 나온다.

즉, 브라우저를 만들기 위해 사실상 필수적으로 요구되는 언어인 것이다.

자바스크립트를 사용하면 웹 페이지의 동적인 기능과 사용자와의 상호작용을 구현할 수 있다.

더욱이 이제는 Node.js와 같은 런타임 환경 덕분에 자바스크립트로 백엔드 기능까지 구현할 수 있어, 풀스택이 가능해진 언어가 되었다.

그리고 React, Vue.js, Angular와 같은 다양한 프레임워크와 라이브러리는 대부분 JavaScript 기반이다.

요즘 거의 필수로 요구되는 TypeScript 또한 JavaScript의 확장된 언어이다.

다른 언어 기반의 프레임워크로 웹페이지를 만든다고 해도, 프론트엔드 프로그래밍 언어의 근본은 역시 JavaScript가 아닐까?

그러니... 열심히 공부해보자 (<- 결론ㅋㅋ)

 

추가적인 궁금증 - Django

하지만 여기서 의문이 들었다.

Python 기반의 Django 프레임워크도 등장했으니, 꼭 유일한 프로그래밍 언어라고 할 수는 없지 않을까?

그래서 더 찾아보니, 정확히는 "클라이언트 측에서 실행되는 유일한 프로그래밍 언어"가 JavaScript라고 한다.

Python의 Django는 클라이언트 측이 아니라 서버 측에서 실행되는 것이었다!

Django뿐 아니라 PHP, Ruby, Java, C# 등의 언어가 서버 측에서 HTML 페이지를 생성하고 이를 클라이언트에 전송하게 된다.

하지만 오직 JavaScript만이 유일하게 클라이언트 측, 즉 브라우저에서 직접 실행되어 페이지의 동작을 제어하고 사용자와 상호작용한다.

물론, 이제는 서버 측에서도 JavaScript를 실행한다.

Node.js에 대해서도 다음에 좀 더 깊게 알아봐야겠다.

 

반응형