ECMAScript 에 대해 보다보면 TC39 라는 용어가 나오는데 이게 무엇인지에 대해 이번 포스팅에서 살펴보도록 하겠습니다.
참고한 블로그의 링크를 같이 남겨놓도록 하겠습니다.
- TC39
매년 ECMAScript 스펙이 하나의 스펙으로 릴리즈되는데, 여기엔 지난 에디션 이후로 승인된 모든 새로운 기능 혹은 변경이 포함되어 있습니다. TC39 는 the 39nth Technical Committee 의 약자로 Javascript 개발자, 학자 등으로 구성된 ECMA 멤버들을 포함한 ECMA International 이라는 조직의 산하 그룹입니다.이 위원회는 커뮤니티와 협력해 ECMAScript 스펙의 정의를 유지하고 발전시켜 나갑니다.
ECMAScript 의 스펙을 변경하는 프로세스는 TC39 에 의해 이뤄지며 이를 TC39 Process 라고 합니다.
TC39 Process 는 stage 0 부터 시작해 다섯 스테이지로 구성되어 있습니다. 하나의 stage 에서 다음 stage 로 넘어가기 위해선 위원회의 승인이 필요하며 ECMAScript 스펙을 변경하는 모든 제안은 예외없이 이 과정을 거치게 됩니다.
TC39 github 에 적혀있는 여러 제안들을 보면 위와 같이 stage 3, stage2 이런식으로 나눠져 있는데 각 stage 가 의미하는 바는 무엇인지 알아보도록 하겠습니다.
- Stage 0 : Strawperson
첫번째 스테이지는 "Strawperson" 이라고 불리기도 합니다. 번역하면 하찮은사람 이라는 뜻인데..
이 스테이지에 있는 제안들은 정식 제안은 아니며 스펙에 추가 혹은 변경을 위한 초기 아이디어 입니다.
아무리 초기 아이디어라고해도, 이 스테이지에 대한 제안은 TC39 멤버 혹은 등록된 Contributor 만 할 수 있습니다.
- Stage 1 : Proposal
이 스테이지부터 정식 제안입니다. 그 제안들은 개별 문제점 또는 일반적인 요구사항에 대해 설명하거나, 어떠한 형태의 솔루션을 제안하거나, 잠재적인 문제점을 지적하는 내용들이어야 합니다. (잠재적 문제점은 다른 기능 또는 복잡한 구현의 cross-cutting 문제)
그 솔루션의 설명에는 구체적인 예시와 함께 high-level API 가 포함되어 있어야 하며, 또한 알고리즘과 추상화 및 의미에 대해 논의해야 합니다.
이 스테이지에 있는 제안은 TC39 멤버 중 한명이 책임을 갖고 진행하는 소유자로 정해지며 이 인원을 챔피언 이라고 한다네요.
챔피언은 항상 그렇진 않지만 일반적으로 해당 제안을 처음 작성한 사람입니다.
만약 제안이 스테이지 1 의 기준을 충족하고 위원회가 이를 진행할 의지가 있으면 Draft 스테이지로 넘어가게 됩니다.
- Stage 2 : Draft
이 스테이지는 ECMAScript 언어로 표현된 스펙에 있는 제안의 초기 Draft(초안) 입니다.
초안은 문법, 의미, API 에 대해 가능한 정확하게 설명해야 합니다. 물론 TODO 주석이나 대체텍스트 같은게 있을 순 있습니다.
실험적인 구현 또한 필요하며, 브라우저 혹은 Babel 과 같은 빌드 타임 트랜스파일러에서 실행이 가능해야 합니다.
여기서 다음 스테이지로 넘어간다는 것은 위원회가 이 제안을 개발할 것이고 결국 공식적인 스펙에 포함될 것으로 예상한다는 뜻 입니다.
이때는 점진적 변경만 예상되긴 합니다.
- Stage 3 : Candidate
이제 거의 최종 스테이지입니다. 마치 관문을 하나씩 클리어하는 게임 같네요. 최종 단계이기는 하나 구현 및 유저로부터의 피드백과 개선의 준비가 된 제안입니다. 스펙에 대한 추가 작업이나 추가 피드백이 없을 때 완전히 최종인 것 으로 정의합니다.
모든 ECMAScript 에디터들과 지정된 리뷰어들은 이 스펙에 서명해야 합니다. 추가로, 승인 테스트를 통과하는 두개의 독립적인 스펙을 호환하는 구현을 포함해야 합니다.
- Stage 4 : Finished
이제 정말 라스트 스테이지입니다. 스펙의 최신 초안에 포함될 준비가 된 제안이 된 것 입니다.
또한 다음 에디션에 함께 제공됩니다.
이렇게 각 단계에 대해 알아보니 새삼 TC39 의 멤버들에 약간의 존경심과 그 일원이 되고 싶다는 생각이 들게 된 것 같습니다.
'Backend > Javascript' 카테고리의 다른 글
ES9 (ES2018) (0) | 2022.02.19 |
---|---|
ECMAScript (0) | 2022.02.12 |
ES2022 (0) | 2022.01.30 |
Javascript 내장 클래스 확장 (0) | 2021.12.25 |
Javascript - Closure (클로저) 에 대해 (1) | 2021.07.17 |