1장 ES2015부터 ES2020까지 그리고 그 이후의 새로운 장난감

2023.06.16

1.1 정의, 이해관계자, 용어

1.1.1 Ecma? ECMAScript? TC39?

  • 우리가 생각하는 "자바스크립트"는 여러 컴퓨팅 표준을 담당하는 표준 기관인 Ecma International'에 의해 "ECMAScript"로 표준화되었다.
  • ECMAScript 표준은 ECMA-262이다.
  • 표준 담당자는 Ecma International 기술위원회 39(Technical Committee 39, “TC39")의 회원으로 "일반 목적, 교차 플랫폼, 벤더 중립적 프로그래밍 언어 ECMAScript의 표준화를 담당한다.
  • 여기에는 언어 구문, 의미론, 라이브러리, 언어를 지원하는 보완 기술이 포함된다.

1.1.2 ES6? ES7? ES2015? ES2020?

  • 이렇게 다양한 약어는 혼란스러울 수 있다. 특히 일부에는 판 번호가 있지만 다른 일부에는 연도가 있기 때문이다. 5판까지는 TC39는 판 번호로 버전을 참조했다.

표준 ECMA-262 5판 / 2009년 12월 ECMAScript 언어 사양

  • ECMAScript 5판은 말하기에 좀 긴편이라서 ES5라고 말하는 것이 자연스러운 일이었다.
  • 2015년 6판부터 TC39는 지속적인 개선 프로세스를 채택하여 언어 이름에 연도를 추가했다.

표준 ECMA-262 6판 / 2015년 6월 ECMAScript 2015 언어 사양

  • 따라서 ECMAScript 6판 표준(”ES6”)은 ECMAScript 2015 또는 줄여서 ES2015로 정의한다.
  • 발표 이전부터 ES6은 그 자체로 유행어가 되었으며 여전히 일반적으로 사용되고 있다.
  • 그래서 판 번호를 사용하는 스타일(ES6, ES7, …)과 연도를 사용하는 스타일(ES2015, ES2016, …) 두 가지 스타일이 있다.
  • 또한 예정된 변경 사항을 참조하는 데 때때로 사용되는 ESnext 또는 ES.next도 사용된다.

1.1.3 자바스크립트 “엔진”, 브라우저, 그 외

  • 자바스크립트 엔진은 다음 기능을 갖고 있어야 한다.
    1. 자바스크립트 구문 분석하기
    2. 인터프리트하거나 기계어로 컴파일하기
    3. 사양대로 작동하는 환경 내에서 결과 실행하기
  • 자바스크립트 엔진을 찾을 수 있는 일반적인 장소 중 하나는 당연히 웹 브라우저다.
    • 구글의 크롬 브라우저는 IOS를 제외한 V8 엔진(크로미움, 오페라, 마이크로소프트 엣지 v79 이상에서도 사용됨)을 사용한다.
    • 애플의 사파리 브라우저(macOS와 iOS용)는 JavaScriptCore 엔진을 사용한다.
    • 모질라 파이어폭스는 iOS를 제외하고는 SpiderMonkey 엔진을 사용한다.
    • 마이크로소프트의 인터넷 익스플로러는 자체 JScript 엔진을 사용하는데, 보안 수정만 하고 있어 점점 구식이 되고 있다.
    • 마이크로소프트 엣지 v44와 이전 버전("레거시 엣지")은 마이크로소프트의 차크라(Chakra) 엔진을 사용한다.
    • 2020년 1월에 iOS를 제외한 크로미움 프로젝트를 기반으로 하고 V8 엔진 을 사용하는 엣지 v79가 출시되었다(크로미움에 맞추기 위해 버전 번호가 44에서 79로 변경됨).

1.2 “새로운 장난감”은 무엇인가?

  • 새로운 기능을 사용할 준비가 되어 있지 않거나 필요하지 않는 한 새로운 기능을 채택할 필요는 없다.
  • TC39가 준수하는 핵심 원칙 중 하나는 ”웹을 망가뜨리지 말라”이다 → 다시 말해 오늘날 세계에 이미 존재하는 엄청난 양의 코드와 호환되어야 함

1.3 새로운 장난감은 어떻게 만들어지는가?

1.3.1 누가 만드는가?

  • 위원회는 아래와 같은 사람들로 구성된다.
    • 자바스크립트 개발자
    • 프레임워크 작성자
    • 대규모 웹사이트 작성자/관리자
    • 프로그래밍 언어 연구원
    • 모든 주요 자바스크립트 엔진 대표
    • 영향력 있는 자바스크립트 작성자
    • 기타 자바스크립트의 성공과 미래에 대한 이해관계자로 구성

1.3.2 표준이 제정되는 과정

  • TC39는 제안을 0단계에서 4단계까지 단계별로 처리한다.
    • 0단계: 누구라도 고려할 가치가 있다고 생각하는 아이디어가 생기면 구체화하고 간단하게 작성해 제출할 수 있다. 제안자가 TC39 위원이 아니더라도 누구나 일반인 기여자로 등록할 수 있다.
    • 1단계(제안): 제안이 위원회에 제출되고 더 연구하기로 합의가 이루어지면 위원회는 대변인의 책임하에 다음 단계인 1단계로 이동된다. 커뮤니티 구성원들이 토론하고 추가로 개발하며 다른 언어나 환경의 유사한 기술을 연구하고 범위를 다듬으며 아이디어를 구체화한다.
    • 2단계(초안): 제안이 진행되어야 한다는 합의를 구하고 전체 과정을 통과할 것으로 예상한다는 것을 의미한다. 커뮤니티가 정확한 구문, 의미 체계, API 등을 구체화하고 공식 사양 언어를 사용하여 해결 방법을 자세히 설명하는 단계이다.
    • 3단계(후보): 제안이 자바스크립트 엔진에서 구현될 준비가 되어 있다는 합의가 이루어 졌다는 의미이다. 3단계에서 제안 자체는 거의 변경되지 않는다.
    • 4단계(완료): 이 단계에서는 기능이 완료된 상태로 해당 단계로 도달하기 위해서는 두 개 이상의 별개의 호환(브라우저) 구현에서 TC39의 test262 테스트 목록에 있는 인수 테스트 통과가 필요하다.
  • 하지만 모든 변경이 이런 과정을 거치지는 것은 아니다.
    • 편집 변경, 사양에 없는 현실을 반영하는 변경 또는 웹 호환에 필요한 변경 등이 있다.

1.3.3 참여하기

  • 핵심은 일찍 참여하는 것이다.
  • 참여하기 가장 좋은 시기는 0, 1, 2 단계이다.
  • 로 3단계에서는 일반적으로 자바스크립트 엔진에서 구현하는 사람이 문제를 발견하지 않는 한 변경 사항을 제안하지 않는다.

1.4 새로운 장난감을 따라가기

  • 프로세스가 새 기능이 사양에 추가되기 전에 현실 세계에 적용되는 것을 보장
  • 반드시 새 장난감을 따라 가지 않아도 된다.
  • 예전 방식의 작업 방식이 사라지지 않는다.

1.5 오늘의 장난감을 과거의 환경에서, 내일의 장난감을 오늘의 환경에서 사용하기

  • ES5가 출시되었을 때 문제가 되었다.
    • 당시 출시된 자바스크립트 엔진에서는 해당 스펙 사항이 거의 구현되지 않았기 때문
  • 대부분의 ES5는 구문이 크게 변경된 것이 아니라 새로운 표준 라이브러리 기능이어서 es5-shim.jscore-jses-shims 또는 비슷한 다양한 프로젝트를 사용하여 “폴리필”할 수 있었다.
  • 바벨에는 진행 중인 거의 모든 기능에 대한 변환이 있다.
  • 심지어 앞으로 변화가 많을 1단계에 대한 변환도 있다.
    • 따라서 위험을 감수하고 사용하자.
    • 3단계 이후는 사용하기에 상당히 안전하다.

1.6 정리하며

  • 자바스크립트는 지난 몇 년 동안, 특히 2015년 이후에 엄청나게 변경되었다.
  • 자바스크립트는 항상 이전 버전과 호환되므로 새로운 기능을 사용할 준비가 될 때까지 필요하지 않다면 새로운 기능을 채택하지 않아도 된다.
  • 궁극적으로 자바스크립트의 발전을 담당하는 사람들은 자바스크립트 개발자, 프로그래밍 언어 연구자, 라이브러리 및 대규모 웹사이트 작성자, 주요 자바스크립트 엔진의 대표자, 자바스크립트 개발자 그리고 자바스크립트의 성공과 미래에 다양한 이해관계자들로 구성된 TC39의 워원이다.