ES2015, ES2016, ES2017, ES6, ES7, ES8 ? 자바스크립트 버전의 이해

자바스크립트는 함수형 스크립트 언어이고 사용되어 온지 오래된 언어이기 때문에 이런 저런 부족한 부분이 많았습니다.

언어의 특성상 헛점들도 많았고, 무엇보다 최신 언어들에서 지원되는 개념들을 거의 지원하지 못했습니다.

그런 자바스크립트가 2015년부터 지속적으로 기능이 확장되면서 기능 확장 단위를 구분하기 위해 버전 명칭을 부여하기 시작했습니다.

그런 자바스크립트 버전 명칭이 ES6, ES2015와 같은 식으로 붙은 것이고

ES2015 = ES6, ES2016 = ES7, ES2017 = ES8 입니다.

앞에 붙는 ES는 Ecma Script의 약자입니다.

그러니까 Ecma Script 2016 은 2016년도에 정한 ECMAScript 라는 뜻입니다.

년도가 아닌 6, 7, 8 과 같이 붙은 것은 버전 단위로 명칭을 붙이면서 파생된 버전형 명칭입니다.

초기에는 년도 방식 명칭과 메이저 버전 숫자 방식을 병기를 했고, 년도와 크게 무관했지만, 매년 기능 확장과 버전업을 하기로 하면서 현재는 ES2017과 같이 뒤에 년도를 붙이는 것을 기본 버전 명으로 사용합니다.

매년 6월에 새 규격이 나오고 있기 때문에 2020년 6월에 나오는 버전은 11버전이 되고, ES2020 이 됩니다.

잠깐 ECMA에 대해서 알아보자면

ECMA 는 ECMA International 을 줄여서 말하는 것이고, ECMA는 European Computer Manufacturers Association 의 줄임말입니다.

이름 그대로 하면 유럽 컴퓨터 생산자 연합? 그런 뜻이지만, 컴퓨터 시스템을 표준화하기 위해 세워진 유럽 표준화 기구였습니다.

기구가 국제적으로 확장을 하면서 컴퓨터 및 정보 통신 표준화 기구로 바뀌었고, 현재는 원래의 축약어와는 무관하게 Ecma International 로 고유 명사화해서 부르고 있습니다.

ECMA는 다양한 개발 언어의 표준 규격과 명세를 정했으며, 그중 하나의 표준이 ECMA-262(스크립팅 프로그래밍 언어의 표준 규격), 즉 ECMA Script 언어 규격이고 이 규격의 구현이 현재의 자바스크립트 버전이 되는 것입니다.

ECMA-262 규격을 따른다면 구지 자바스크립트가 아니어도 되지만, 애초에 ECMA-262를 만들 당시에 호환성이 떨어지는 여러 회사들의 자바스크립트를 표준화 하기 위해서 만든 것이기 때문에, 사실상 자바스크립트를 위해서 만든 표준이라고 봐도 무방합니다.

또 웹 기반의 시장에서, 또는 웹브라우저의 표준 스크립트 언어로 자바스크립트가 표준으로 정착을 했기 때문에 일부에서는 ECMAScript, Javascript 이 둘을 혼용해서 사용하기도 합니다.

자바스크립트는 표준화 이후 처음 메이저 업데이트가 있던 2015년에 발표된 ES2015에서 언어의 기반이 되는 개념들이 대폭 변경되거나 추가되었습니다.

기본 변수 선언 방식부터 달라졌기 때문에 보수적인 개발자들에게는 쉽게 적용이 어려웠기도 하고, 규격의 업그레이드는 좋았지만, 호환성 문제가 발목을 잡으면서 널리 사용되는데 생각보다 오랜 시간이 걸리고 있습니다.

현재 웹 프론트엔드의 표준 언어로 사용되고 있는 자바스크립트지만, 브라우저 호환성 문제로 인해(대부분은 인터넷 익스플로러가 원인) ES2015 조차도 완전히 정착을 하지 못한 상태입니다.

또 오래된 레거시 자바스크립트 코드와 라이브러리들이 너무 폭넓게 사용되다보니, 호환성 유지 차원에서 ES2015 의 전면적인 사용이 더 느리게 진행되고 있기도 합니다.

호환성 문제와는 별개로 자바스크립트의 버전업은 매년 이루어지고 있으며, ES2017 이후로는 자바스크립트의 기능이 대폭 확장되면서 내장 라이브러리가 방대해졌고, 많은 고급 개념들이 추가되면서 다른 최신 언어에 뒤지지 않는 언어가 되었습니다.

다만, 자바스크립트의 적은 자바스크립트라고 할 수 있을 정도로 자바스크립트의 구버전 웹브라우저 및 레거시 코드로 인한 호환성 문제는 심각합니다.

최신 기술을 가장 적극적으로 사용하는 인터넷 기업들 조차도 호환성 기준 최대치가 ES2015 이기 때문에, 그 이후 버전의 자바스크립트에서 추가된 기능들은 굉장히 제한적이고 신중하게 적용이 되고 있는 상황입니다.

물론 이런 호환성 문제를 개선하기 위한 시도도 있습니다. 

호환성 문제가 있는 구형 웹브라우저에서 최신의 자바스크립트 기능을 사용할 수 있도록 폴리필(Polyfill) - 기능을 지원하지 않는 웹브라우저 상의 기능을 구현해주는 코드, 또는 라이브러리를 말함 - 기능을 제공하는 자바스크립트 라이브러리들이 있습니다.

( 참조 Polyfill.js 링크 -> https://philipwalton.github.io/polyfill/ )

이들 라이브러리들은 ES2015부터 새로 추가된 Map, Set 이나 새로운 메쏘드등을 구형 웹브라우저에서 사용할 수 있도록 지원해줍니다.

자바스크립트 버전이 급격하게 올라감에 따라 일부 폴리필 라이브러리들도 계속 버전업이 되고 있지만, 몇몇 최신 기능들은 구현이 불가능한 경우도 있기 때문에 최신 자바스크립트 기능을 전면적으로 사용할 수 있게 해주는 만능툴은 아닙니다.

또, 최신 자바스크립트의 기능을 폴리필과 함께 사용할 경우에는 폴리필에서 지원하는 범위가 어디까지인지를 숙지하고 사용해야하기 때문에 이것 또한 개발자에게는 부담이 되는 요소가 되기도 합니다.