ahn heejong

ECMAScript와 TC39

2017-12-24
μžλ°”μŠ€ν¬λ¦½νŠΈ
ECMAScript
TC39

λ“€μ–΄κ°€λ©°

수 λ…„ μ „κΉŒμ§€λ§Œ 해도 μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” 기껏해야 λΈŒλΌμš°μ € μœ„μ— κ²½κ³  λŒ€ν™”μ°½μ„ λ„μš°κ±°λ‚˜ μ›Ή νŽ˜μ΄μ§€μ˜ μ‚¬μ΄λ“œλ°”λ₯Ό μ—΄κ³  λ‹«λŠ” μš©λ„λ‘œλ§Œ μ‚¬μš©λ˜λ˜, μž₯λ‚œκ° 같은 언어에 λΆˆκ³Όν–ˆλ‹€. μ˜€λŠ˜λ‚ , μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” ν”„λ‘ νŠΈμ—”λ“œλŠ” λ¬Όλ‘ μ΄κ±°λ‹ˆμ™€ μ„œλ²„, λͺ¨λ°”일 μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜, μ‹¬μ§€μ–΄λŠ” λ°μŠ€ν¬ν†± μ•±κΉŒμ§€ λͺ¨λ“  λΆ„μ•Όμ—μ„œ μ‚¬μš©λœλ‹€. λŒ€μ²΄ κ·Έ 사이에 무엇이 λ‹¬λΌμ‘ŒκΈΈλž˜ 이런 극적인 λ³€ν™”κ°€ μƒκΈ΄κ±ΈκΉŒ?

λ¬Όλ‘  이 μ§ˆλ¬Έμ— λŒ€ν•œ ν•˜λ‚˜μ˜ κ°„κ²°ν•œ λŒ€λ‹΅μ€ μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ”λ‹€. κ·Έ λ™μ•ˆ μ›Ή λΈŒλΌμš°μ €λ₯Ό μ‹€ν–‰ν•˜λŠ” κΈ°κΈ°λ“€μ˜ μŠ€νŽ™μ€ 맀우 λΉ λ₯Έ μ†λ„λ‘œ μ’‹μ•„μ‘Œκ³ , μ „μ„Έκ³„μ μœΌλ‘œ 인터넷 λ³΄κΈ‰μœ¨μ΄ μ¦κ°€ν–ˆμœΌλ©°, λ˜ν•œ V8μ΄λΌλŠ” κ±ΈμΆœν•œ μžλ°”μŠ€ν¬λ¦½νŠΈ λŸ°νƒ€μž„ 엔진이 λ“±μž₯ν•˜κΈ°λ„ ν–ˆλ‹€. 그리고 빼놓을 수 μ—†λŠ” λ˜λ‹€λ₯Έ 이유 쀑 ν•˜λ‚˜λ‘œ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄λ‘œμ„œμ˜ μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ λ°œμ „μ΄ μžˆλ‹€.

μ§€λ‚œ μ‹­μˆ˜λ…„κ°„, μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” μ˜ˆμ „κ³ΌλŠ” 거의 λ‹€λ₯Έ 언어라 해도 쒋을 μ •λ„λ‘œ 큰 λ³€ν™”λ₯Ό κ²ͺμ–΄μ™”λ‹€. 그리고 μ–Έμ–΄μ˜ ν‘œμ€€μ— μƒˆλ‘œμš΄ κΈ°λŠ₯이 μΆ”κ°€λ˜κ±°λ‚˜ 변경사항이 μžˆμ„ λ•Œλ§ˆλ‹€, λ§Žμ€ μ‚¬λžŒλ“€μ΄ 그에 λŒ€ν•œ μˆ˜λ§Žμ€ 글을 μ“°κ³ , λ°œν‘œλ₯Ό μ§„ν–‰ν–ˆλ‹€. ν•˜μ§€λ§Œ 그에 λΉ„ν•΄ 그런 λ³€ν™”κ°€ μ‹€μ œλ‘œ μ–΄λ–»κ²Œ νƒœλ™ν•˜κ³  λ°œμ „ν•΄ κ²°κ΅­ ν‘œμ€€μ— νŽΈμž…λ˜λŠ”μ§€κΉŒμ§€μ˜ 과정은 거의 닀루어지지 μ•ŠλŠ”λ‹€.

μ–Έμ–΄λŠ” 문법과 λ™μž‘ λ°©μ‹λ§ŒμœΌλ‘œ 이루어지지 μ•ŠλŠ”λ‹€. μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ„ λ§Œλ“œλŠ” λ°μ—λŠ” ν˜„μž¬ μ‘΄μž¬ν•˜λŠ” κΈ°λŠ₯을 μ•„λŠ” κ²ƒλ§ŒμœΌλ‘œ μΆ©λΆ„ν•œ κ²½μš°κ°€ λ§Žλ‹€. ν•˜μ§€λ§Œ μƒνƒœκ³„λ₯Ό 보닀 깊이 μ΄ν•΄ν•˜κ³  μ•žμœΌλ‘œ μ–Έμ–΄κ°€ λ‚˜μ•„κ°ˆ 길을 μ˜ˆμƒν•˜κΈ° μœ„ν•΄μ„  역사와 λ”λΆˆμ–΄ μ–Έμ–΄κ°€ λ°œμ „ν•˜λŠ” 과정에 λŒ€ν•œ 이해가 ν•„μš”ν•˜λ‹€. 세상을 집어삼킀고 μžˆλŠ” 이 μ–Έμ–΄μ˜ ν‘œμ€€μ΄ μ–΄λ–»κ²Œ λ°œμ „ν•˜λŠ”μ§€ μ‚΄νŽ΄λ³΄μž.

ECMAScript μ–Έμ–΄ ν‘œμ€€κ³Ό TC39

μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ 역사λ₯Ό κ·Ήλ‹¨μ μœΌλ‘œ κ°„λž΅νžˆ μ„œμˆ ν•΄λ³΄μžλ©΄ λ‹€μŒκ³Ό κ°™λ‹€. μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” 1990λ…„λŒ€ μ€‘λ°˜, (μ§€κΈˆμ€ 사라진) Netscape Navigator λΈŒλΌμš°μ €μ— 동적인 뢀뢄을 λ”ν•˜κΈ° μœ„ν•œ λͺ©μ μœΌλ‘œ Brianden Eich에 μ˜ν•΄ κ°œλ°œλ˜μ—ˆλ‹€. 인기λ₯Ό 끔에 따라 MicrosoftλŠ” (μƒν‘œκΆŒ 이슈λ₯Ό ν”Όν•˜κΈ° μœ„ν•΄) JScript라 이름 뢙인 μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ 방언을 κ°œλ°œν–ˆλ‹€. JScriptλŠ” 1996λ…„ 8μ›”, IE 3.0에 ν¬ν•¨λ˜μ–΄ λ°°ν¬λ˜μ—ˆλ‹€.

이후 NetscapeλŠ” μ–Έμ–΄μ˜ ν‘œμ€€ν™” 및 λͺ…μ„Έν™”λ₯Ό μœ„ν•΄ μžλ°”μŠ€ν¬λ¦½νŠΈλ₯Ό Ecma 인터내셔널(Ecma International)에 μ œμΆœν–ˆλ‹€. Netscape와 Microsoft λ“± μ΄ν•΄λ‹Ήμ‚¬μž κ°„μ˜ 이름을 λ‘˜λŸ¬μ‹Ό ν•©μ˜ 끝에 ECMAScriptλΌλŠ” 이름과 ECMA-262, "ECMAScript μ–Έμ–΄ ν‘œμ€€(ECMAScript Language Specification)"이 νƒ„μƒν–ˆλ‹€. μ˜€λŠ˜λ‚  μš°λ¦¬κ°€ λ§ν•˜λŠ” μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” ECMA-262을 λ§Œμ‘±ν•˜λŠ” κ΅¬ν˜„μ²΄λ₯Ό 가리킨닀. Ecma μΈν„°λ‚΄μ…”λ„μ˜ μ—¬λŸ¬ 기술 μœ„μ›νšŒ(Technial Committee, μ΄ν•˜ TC) 쀑 TC39 λΌλŠ” μœ„μ›νšŒκ°€ 이 λͺ…μ„Έλ₯Ό κ΄€λ¦¬ν•œλ‹€.

ECMAScript μ–Έμ–΄ ν‘œμ€€

1997λ…„ 6월에 λ°œν‘œλœ 첫 번째 판(edition)을 μ‹œμž‘μœΌλ‘œ 2017λ…„ 12μ›” ν˜„μž¬κΉŒμ§€ ECMA-262의 총 8개 판이 μ‘΄μž¬ν•œλ‹€. 각 νŒμ€ 판 번호 λ˜λŠ” λ°œν‘œλœ 연도λ₯Ό 따라 이름뢙여진닀. 예λ₯Ό λ“€μ–΄, 2015년에 λ°œν‘œλœ 6판의 경우 ECMAScript2015 λ˜λŠ” ECMAScript6 이라 (λ˜λŠ” ECMAScriptλ₯Ό ES둜 쀄여 ES2015 λ˜λŠ” ES6이라) λΆˆλ¦¬μš΄λ‹€.

κ·Έ 쀑 μ•½ 9λ…„λ§Œμ˜ 메이저 버전 업이 될 μ˜ˆμ •μ΄μ—ˆλ˜ ES4λŠ” ꡉμž₯히 많고 λ³΅μž‘ν•œ 변경사항을 ν¬ν•¨ν•˜κ³  μžˆμ—ˆλ‹€. κ·Έ λ³΅μž‘λ„μ™€ ν•˜μœ„ ν˜Έν™˜μ„±μ„ νŒŒκ΄΄ν•˜λŠ” 변경사항은 λ§Žμ€ λ…ΌμŸμ„ μ•ΌκΈ°ν–ˆκ³ , κ²°κ΅­ μ»¨μ„Όμ„œμŠ€λ₯Ό λΆˆλŸ¬μΌμœΌν‚€λŠ”λ° μ‹€νŒ¨ν•œ ES4λŠ” κΈ°κ°λ˜μ—ˆλ‹€. 비둝 4νŒμ€ 받아듀여지지 μ•Šμ•˜μ§€λ§Œ, λ‹Ήμ‹œ μ œμ•ˆλ˜μ—ˆλ˜ κΈ°λŠ₯ 쀑 λ‹€μˆ˜λŠ” 이후 μ μ§„μ μœΌλ‘œ ν‘œμ€€μ— μΆ”κ°€λ˜μ—ˆλ‹€.

Technical Committee 39

Ecma μΈν„°λ‚΄μ…”λ„μ˜ μ—¬λŸ¬ 기술 μœ„μ›νšŒ(Technial Committee, μ΄ν•˜ TC) 쀑 ECMA-262 λͺ…μ„Έμ˜ κ΄€λ¦¬λŠ” TC39 μœ„μ›νšŒκ°€ 맑고 μžˆλ‹€.. TC39의 ꡬ성원 λͺ©λ‘μ€ Mozilla, Google, Apple, Microsoft λ“±μ˜ 메이저 λΈŒλΌμš°μ € 벀더λ₯Ό λΉ„λ‘―ν•΄ Facebook, Twitter λ“±μ˜ λ‹€μ–‘ν•œ λ‹¨μ²΄λ‘œ 이루어져 μžˆλ‹€. λŒ€λΆ€λΆ„μ˜ ꡬ성원이 ν‘œμ€€μ„ μ˜¬λ°”λ₯΄κ²Œ κ΅¬ν˜„ν•΄μ•Ό ν•  μ±…μž„μ„ κ°–λŠ”, μ–Έμ–΄ ν‘œμ€€μ˜ 변화에 μ§μ ‘μ μœΌλ‘œ 영ν–₯을 λ°›λŠ” 단체닀. μ—„λ°€νžˆλŠ” κΈ°μ—…/단체가 κ΅¬μ„±μ›μ΄μ§€λ§Œ, 'TC39 ꡬ성원' μ΄λΌλŠ” μš©μ–΄κ°€ ν•΄λ‹Ή κΈ°μ—…/단체가 보낸 λŒ€λ¦¬μΈμ„ μ§€μΉ­ν•˜λŠ” κ²½μš°λ„ λ§Žλ‹€.

TC39λŠ” μ •κΈ°μ μœΌλ‘œ λ§Œλ‚˜ 회의λ₯Ό μ§„ν–‰ν•˜λŠ”λ°, νšŒμ˜λ‘μ€ λͺ¨λ‘ 웹상에 κ³΅κ°œλœλ‹€. TC39μ—μ„œ λ‚΄λ¦¬λŠ” 결정이 λ‹¨μˆœ λ‹€μˆ˜κ²°μ΄ μ•„λ‹Œ μ»¨μ„Όμ„œμŠ€ 체제둜 μ΄λ£¨μ–΄μ§„λ‹€λŠ” 점은 μ£Όλͺ©ν•  만 ν•˜λ‹€. λŒ€λΆ€λΆ„μ΄ λ™μ˜ν•˜λŠ” μ•ˆμ΄λΌλ„ ν•œ λͺ…이 κ°•ν•˜κ²Œ κ±°λΆ€κΆŒμ„ ν–‰μ‚¬ν•œλ‹€λ©΄ μ„£λΆˆλ¦¬ 결정을 내리기보단 ν•©μ˜λ₯Ό 이루어내기 μœ„ν•΄ 더 μ‹œκ°„μ„ κ°–κ³  λ…Όμ˜λ₯Ό ν•΄ λ³΄λŠ” 식이닀. TC39의 λͺ¨λ“  μ˜μ‚¬ 결정이 ꡬ성원 λŒ€λ‹€μˆ˜μ˜ 이해관계와 μ§κ²°λ˜μ–΄ μžˆλ‹€λŠ” 점을 κ°μ•ˆν–ˆμ„ λ•Œ, μ΄λŸ¬ν•œ 정책은 이둀적이닀.


TC39 ν”„λ‘œμ„ΈμŠ€

μ΄ν•˜ 1단계: μ œμ•ˆ 단계와 κ΅¬λΆ„ν•˜κΈ° μœ„ν•΄ μ•žμœΌλ‘œ 0λ‹¨κ³„μ—μ„œ 4단계에 이λ₯΄κΈ°κΉŒμ§€, 아직 ν‘œμ€€μ— νŽΈμž…λ˜μ§€λ„, λͺ…μ‹œμ μœΌλ‘œ κ±°μ ˆλ˜μ§€λ„ μ•Šμ€ μ œμ•ˆμ„ 톡틀어 ν”„λ‘œν¬μ ˆμ΄λΌ μΉ­ν•œλ‹€.

ECMA-262 ν‘œμ€€μ— μƒˆλ‘œμš΄ λͺ…μ„Έλ₯Ό μΆ”κ°€ν•˜κΈ° μœ„ν•œ 과정은 κ³΅μ‹μ μœΌλ‘œ λͺ…λ¬Έν™”λ˜μ–΄ μžˆλ‹€. TC39 ν”„λ‘œμ„ΈμŠ€λΌκ³ λ„ λΆˆλ¦¬λŠ” 이 과정은 0단계뢀터 4λ‹¨κ³„κΉŒμ§€ 총 5개의 λ‹¨κ³„λ‘œ λ‚˜λˆ„μ–΄μ Έ 있으며, 각 λ‹¨κ³„λ‘œμ˜ μŠΉκΈ‰μ„ μœ„ν•œ λͺ…μ‹œμ μΈ 쑰건듀이 μ‘΄μž¬ν•œλ‹€. ν•΄λ‹Ή 쑰건을 λ§Œμ‘±ν•œ 이후 μœ„μ›νšŒμ˜ λ™μ˜λ₯Ό 얻은 ν”„λ‘œν¬μ ˆλ§Œμ΄ λ‹€μŒ λ‹¨κ³„λ‘œ λ„˜μ–΄κ°„λ‹€. λ¬Όλ‘  κ·Έ κ³Όμ •μ—μ„œ μ΅œμ’…μ μœΌλ‘œ ν‘œμ€€μ— νŽΈμž…λ˜μ§€ μ•ŠκΈ°λ‘œ κ²°μ •λ˜μ–΄ λ²„λ €μ§€λŠ” μ œμ•ˆλ“€λ„ μ‘΄μž¬ν•œλ‹€.

λͺ¨λ“  ν”„λ‘œν¬μ ˆμ€ TC39의 κΉƒν—™ 단체 κ³„μ •μ˜ proposals μ €μž₯μ†Œμ— λ“±μž¬λœλ‹€. 2017.12.19 κΈ°μ€€, 0λ‹¨κ³„μ˜ 경우 stage-0-proposals.md νŒŒμΌμ—μ„œ, 4단계에 이λ₯΄λŸ¬ ν‘œμ€€μ— νŽΈμž…λœ ν”„λ‘œν¬μ ˆμ€ finished-proposals.md νŒŒμΌμ—μ„œ 확인할 수 μžˆλ‹€. ν™œμ„±ν™”λœ ν”„λ‘œν¬μ ˆ(active proposal)이라 λΆˆλ¦¬λŠ” 1-3단계 ν”„λ‘œν¬μ ˆμ˜ 경우 README.md에 λ“±μž¬λ˜μ–΄ μžˆλ‹€. λŒ€λΆ€λΆ„μ˜ ν”„λ‘œν¬μ ˆμ€ λ³„λ„μ˜ μ €μž₯μ†Œλ₯Ό κ°–κ³  있고, κ·Έ 곳에선 ν•΄λ‹Ή ν”„λ‘œν¬μ ˆμ„ μ–΄λ–»κ²Œ λ°œμ „μ‹œν‚¬μ§€, μ–΄λ–€ 어렀움이 μ˜ˆμƒλ˜λŠ”μ§€ λ“±μ˜ λ‹€μ–‘ν•œ λ…Όμ˜κ°€ 이루어진닀.

0단계: ν—ˆμˆ˜μ•„λΉ„ (stage 0: strawman)

TC39 ν”„λ‘œμ„ΈμŠ€μ— ν”„λ‘œν¬μ ˆμ„ 내놓기 μœ„ν•΄μ„  기본적으둜 별닀λ₯Έ μ œμ•½μ΄ μ—†λ‹€. λΌμ΄μ„ΌμŠ€ κ΄€λ ¨ 쑰항에 λ™μ˜ν•˜κ³  TC39의 μ»¨νŠΈλ¦¬λ·°ν„°λ‘œ λ“±λ‘ν•œ λˆ„κ΅¬λΌλ„ ν”„λ‘œν¬μ ˆμ„ 내놓을 수 μžˆλ‹€. ν•΄λ‹Ή ν”„λ‘œν¬μ ˆ 쀑 μ–΄λ–€ κ²½λ‘œλ‘œλ“  TC39의 회의의 μ•ˆκ±΄μœΌλ‘œ μƒμ •λ˜κ³  μ•žμ„œ μ–ΈκΈ‰λœ 0단계 λ¬Έμ„œμ— λ“±μž¬λ˜λ©΄ 0단계 μ œμ•ˆμ΄ λœλ‹€.

1단계: μ œμ•ˆ (stage 1: proposal)

1단계에 λ“€μ–΄μ˜€κΈ° μœ„ν•΄μ„  κ°€μž₯ λ¨Όμ € μ±”ν”Όμ–Έ(champion) 을 ꡬ해야 ν•œλ‹€. μ±”ν”Όμ–Έμ΄λž€ ν•΄λ‹Ή μ œμ•ˆμ„ μ±…μž„μ§€κ³  λ‹€μŒ λ‹¨κ³„λ‘œ 끌고 λ‚˜μ•„κ°ˆ TC39 ꡬ성원을 μΌμ»«λŠ”λ‹€. λ˜ν•œ, 1단계 ν”„λ‘œν¬μ ˆμ€ ν’€κ³ μž ν•˜λŠ” λ¬Έμ œμ™€ ν•˜μ΄ 레벨 API 및 잠재적 μž₯애물을 μ œμ‹œν•΄μ•Ό ν•œλ‹€. κ΅¬ν˜„μƒμœΌλ‘œλŠ” 폴리필, 데λͺ¨ 등을 ν•„μš”λ‘œ ν•œλ‹€.

μœ„μ—μ„œ μ‚΄νŽ΄λ³΄μ•˜λ“― 0λ‹¨κ³„λŠ” 기본적으둜 TC39 νšŒμ˜μ—μ„œ μ•ˆκ±΄μœΌλ‘œ λ…Όμ˜λ˜μ–΄μ•Ό ν•œλ‹€λŠ” 것 μ΄μ™Έμ—λŠ” μ œμ•½μ΄ μ „λ¬΄ν•˜λ‹€μ‹œν”Ό ν•˜λ‹€. μ–΄λ–€ ν”„λ‘œν¬μ ˆμ΄ 1단계에 μ§„μž…ν•œλ‹€λŠ” 것은 본격적으둜 μœ„μ›νšŒ μˆ˜μ€€μ—μ„œ μ‹œκ°„κ³Ό λ…Έλ ₯을 νˆ¬μžν•΄ ν•΄λ‹Ή ν”„λ‘œν¬μ ˆμ— κ΄€ν•΄ λ…Όμ˜ν•  μ˜μ‚¬λ₯Ό ν‘œλͺ…ν•œ κ²ƒμœΌλ‘œ 해석할 수 μžˆλ‹€. 1단계 μ œμ•ˆμ€ μΆ”ν›„ 단계λ₯Ό 거치며 λ§Žμ€ λΆ€λΆ„ λ³€ν™”ν•  수 μžˆλ‹€.

2단계: 초고 (stage 2: draft)

2단계에 올라였기 μœ„ν•΄μ„  ECMAScript ν‘œμ€€μ˜ ν˜•μ‹ μ–Έμ–΄(formal description)둜 μž‘μ„± 된 ν˜•μ‹μ μΈ μ„œμˆ (formal description) μ΄ˆμ•ˆμ΄ ν•„μš”ν•˜λ‹€. 이 μ΄ˆμ•ˆμ€ λ§Œμ•½ ν”„λ‘œν¬μ ˆμ΄ μ‹€μ œλ‘œ ν‘œμ€€μ— νŽΈμž… 될 경우 μ‚¬μš©ν•  λͺ…μ„Έμ˜ 초기 버전이닀. 2λ‹¨κ³„κΉŒμ§€λŠ” μ•žμœΌλ‘œ ν•΄μ•Ό ν•  일 등을 TODO 마크 λ“±μœΌλ‘œ ν‘œμ‹œν•΄ λ†“λŠ” λ“±μ˜ 일뢀 λΆˆμ™„μ „ν•œ λͺ…μ„Έκ°€ ν—ˆμš©λœλ‹€. λ˜ν•œ μ‹€ν—˜μ μΈ(ν”Œλž˜κ·Έμ— μ˜ν•΄ μΌœμ§€κ³  κΊΌμ§€λŠ”) κ΅¬ν˜„μ΄ μš”κ΅¬λœλ‹€.

μ–΄λ–€ ν”„λ‘œν¬μ ˆμ΄ 2단계에 μ˜¬λΌμ™”λ‹€λŠ” 것은 μœ„μ›νšŒκ°€ 이 ν”„λ‘œν¬μ ˆμ„ λ°œμ „μ‹œμΌœ κΆκ·Ήμ μœΌλ‘œλŠ” ν‘œμ€€μ— ν¬ν•¨μ‹œν‚€κ³ μž ν•˜λŠ” μ˜μ§€κ°€ μžˆλ‹€κ³  해석할 수 μžˆλ‹€. 2단계 μ΄ν›„λ‘œλŠ” μƒλŒ€μ μœΌλ‘œ 적은 λ³€κ²½λ§Œμ΄ ν—ˆμš©λœλ‹€.

3단계: 후보 (stage 3: candidate)

3단계 ν”„λ‘œν¬μ ˆμ€ λŒ€λΆ€λΆ„ 완성에 가깝고, κ΅¬ν˜„ μ£Όμ²΄λ‚˜ μ‚¬μš©μžλ“€λ‘œλΆ€ν„° ν”Όλ“œλ°±μ„ μ’€ 더 λ°›μ•„λ³΄λŠ” 일만이 남은 μƒνƒœλ‹€. 3단계에 λ“€μ–΄μ˜€κΈ° μœ„ν•΄μ„œλŠ” 2λ‹¨κ³„μ˜ μ΄ˆμ•ˆκ³ΌλŠ” λ‹€λ₯΄κ²Œ 빈칸 없이 문법, λ™μž‘, 그리고 APIκΉŒμ§€ λͺ¨λ“  뢀뢄이 κΈ°μˆ λ˜μ–΄ μžˆλ„λ‘ 마무리 된 λͺ…μ„Έκ°€ ν•„μš”ν•˜λ‹€.

3λ‹¨κ³„κΉŒμ§€ 올라온 ν”„λ‘œν¬μ ˆμ€ 이후 κ΅¬ν˜„μƒ μ‹¬κ°ν•œ λ¬Έμ œκ°€ λ°œκ²¬λ˜μ§€ μ•ŠλŠ” 이상 변경이 ν—ˆμš©λ˜μ§€ μ•ŠλŠ”λ‹€. 이 μ‹œμ μ—μ„œλŠ” μ‹€μ œλ‘œ ECMA-262 ν‘œμ€€μ— νŽΈμž…μ‹œν‚€κ³ μž ν•˜λŠ” ν•΄λ‹Ή ν‘œμ€€μ˜ λͺ…μ„Έκ°€ 거의 마무리 된 μƒνƒœμ—¬μ•Ό ν•œλ‹€.

4단계: μ™„λ£Œλ¨ (stage 4: finished)

λ§ˆμ§€λ§‰ 4λ‹¨κ³„λŠ” λͺ¨λ“  단계λ₯Ό 거치고 λ§ˆμΉ¨λ‚΄ μ œμ•ˆμ΄ 수락되고 λ‹€μŒ ν‘œμ€€μ— ν¬ν•¨λ˜μ–΄ λ°œν‘œλ˜κΈ°λ§Œμ„ κΈ°λ‹€λ¦¬λŠ” 단계이닀. 3λ‹¨κ³„μ˜ ν”„λ‘œν¬μ ˆμ΄ ECMA-262의 λ‹¨μœ„ ν…ŒμŠ€νŠΈ 슈트인 Test262에 κ΄€λ ¨ ν…ŒμŠ€νŠΈκ°€ μž‘μ„±λ˜κ³ , μ΅œμ†Œ 2개 μ΄μƒμ˜ κ΅¬ν˜„μ΄ μ œκ³΅λ˜λŠ” λ“±μ˜ κΉŒλ‹€λ‘œμš΄ μΆ”κ°€ 쑰건을 λͺ¨λ‘ λ§Œμ‘±ν•˜λ©΄ λ§ˆμΉ¨λ‚΄ 4λ‹¨κ³„λ‘œ 올라올 수 μžˆλ‹€.

4λ‹¨κ³„κΉŒμ§€ 올라온 ν”„λ‘œν¬μ ˆμ€ 별닀λ₯Έ 이변이 μ—†λŠ” 이상 λ‹€κ°€μ˜€λŠ” μƒˆ ν‘œμ€€μ— ν¬ν•¨λ˜μ–΄ λ°œν‘œλœλ‹€. 2015년을 기점으둜 맀년 6μ›” μƒˆλ‘œμš΄ ECMAScript ν‘œμ€€μ΄ λ°œν‘œλ˜λŠ”λ°, λ‹Ήν•΄ 3μ›” μ „κΉŒμ§€ 4단계λ₯Ό λ‹¬μ„±ν•˜κ³  3μ›” νšŒμ˜μ—μ„œ μ΅œμ’… 승인된 μ œμ•ˆλ“€μ΄ μƒˆ ν‘œμ€€μ— ν¬ν•¨λœλ‹€.

각 과정에 λŒ€ν•œ 보닀 μžμ„Έν•œ μ„€λͺ…은 곡식 λ¬Έμ„œμ— κΈ°μž¬λ˜μ–΄ μžˆλ‹€. λ˜ν•œ, μ–Έμ œλ“ μ§€ μ•žμ„œ μ–ΈκΈ‰ν•œ proposals μ €μž₯μ†Œμ—μ„œ ν˜„μž¬ 진행쀑인 λͺ¨λ“  ECMAScript ν‘œμ€€μ— κ΄€ν•œ ν”„λ‘œν¬μ ˆκ³Ό κ·Έ μƒνƒœλ₯Ό 확인할 수 μžˆλ‹€.


μ‹€μ œ μ˜ˆμ‹œ – Array.prototype.includes

TC39 ν”„λ‘œμ„ΈμŠ€κ°€ ꡬ체적으둜 μ–΄λ–»κ²Œ μ§„ν–‰λ˜λŠ”μ§€ μ’€ 더 ꡬ체적인 감각을 κ°–κΈ° μœ„ν•΄, μ‹€μ œ μ˜ˆμ‹œλ₯Ό λ“€μ–΄ μ‚΄νŽ΄λ³΄μž. 였늘의 μ΄ˆλŒ€ μ†λ‹˜μ€ Array.prototype.includes λ©”μ†Œλ“œλ‹€. 이 λ©”μ†Œλ“œλŠ” 이름이 μ•”μ‹œν•˜λ“― 배열에 μ–΄λ–€ μ›μ†Œκ°€ λ“€μ–΄μžˆλŠ”μ§€ κ²€μ‚¬ν•œλ‹€.

맀우 ν”ν•œ μš”κ΅¬μ‚¬ν•­μΈ 것을 κ°μ•ˆν•˜λ©΄ λ†€λžκ²Œλ„ 이 λ©”μ†Œλ“œλŠ” 2016년이 λ˜μ–΄μ„œμ•Ό ν‘œμ€€ – ECMAScript 2016 – 에 μΆ”κ°€λ˜μ—ˆλ‹€. 이 ν”„λ‘œν¬μ ˆμ˜ 챔피언은 Google의 Domenic Denicola이 λ§‘μ•˜κ³ , 2014λ…„ 4μ›” 9일 νšŒμ˜μ—μ„œ 처음 μ–ΈκΈ‰λ˜μ—ˆλ‹€.

0단계: ν—ˆμˆ˜μ•„λΉ„ (stage 0: strawman)

μ•žμ„œ μ–ΈκΈ‰λœ 2014λ…„ 4μ›” 9일 νšŒμ˜λ‘μ—μ„œ Rick Waldron은 ES6에 좔가될 μ˜ˆμ •μΈ String.prototype.contains 와 λΉ„μŠ·ν•œ λ©”μ†Œλ“œ Array.prototype.contains λ₯Ό λ°°μ—΄ ν”„λ‘œν† νƒ€μž…μ— μΆ”κ°€ν•˜λŠ” 것이 μ–΄λ–»κ² λƒλŠ” μ œμ•ˆμ„ μ œμ‹œν•œλ‹€. 메일링 λ¦¬μŠ€νŠΈμ—μ„œ λ…Όμ˜λ˜λ˜ 이 ν”„λ‘œν¬μ ˆμ€ μ΄λ‘œμ„œ 0단계 ν”„λ‘œν¬μ ˆμ΄ λœλ‹€.

1단계: μ œμ•ˆ (stage 1: proposal)

이 ν”„λ‘œν¬μ ˆμ€ 2014λ…„ 7μ›” 31일 νšŒμ˜μ—μ„œ λ‹€μŒμœΌλ‘œ λ“±μž₯ν•œλ‹€. λ™μž‘μ— λŒ€ν•œ κ°„λ‹¨ν•œ λ…Όμ˜ (인자둜 λ°›λŠ” 게 λ°°μ—΄μ˜ μ›μ†Œμ—¬μ•Ό ν•˜λŠ”μ§€ μ„œλΈŒ 배열이어야 ν•˜λŠ”μ§€)와 넀이밍에 λŒ€ν•œ λ…Όμ˜ 후에 1단계 승격이 κ²°μ •λœλ‹€. 이후 λ…Όμ˜μ—μ„œ μƒλŒ€μ μœΌλ‘œ κ°„λ‹¨ν•œ μ œμ•ˆμΈ 만큼 ν”„λ‘œμ„ΈμŠ€λ₯Ό TC39 회의 λ°–μ—μ„œ λΉ„λ™κΈ°μ μœΌλ‘œ μ§„ν–‰ν•˜κ³  μ‹Άλ‹€λŠ” 의견이 λ‚˜μ˜€λŠ”λ°, Allen Wirfs-Brock와 Mark Miller에 μ˜ν•΄ κΈ°κ°λœλ‹€.

1단계 ν”„λ‘œν¬μ ˆλ‘œ 승격된 μ‹œμ μ˜ μ €μž₯μ†Œλ₯Ό 보면, 이 ν”„λ‘œν¬μ ˆμ΄ ν•„μš”ν•œ μ΄μœ μ™€ API, 그리고 λ§Žμ΄λ“€ κΆκΈˆν•΄ ν•  λ²•ν•œ 질문과 μ‚¬μš© μ˜ˆμ‹œ λͺ¨λ‘κ°€ README.md 에 μ •λ¦¬λ˜μ–΄ 있으며, 데λͺ¨ κ΅¬ν˜„ λ˜ν•œ μ €μž₯μ†Œμ— ν¬ν•¨λ˜μ–΄ μžˆλ‹€. μŠΉκ²©μ— ν•„μš”ν•œ μš”κ±΄μ˜ μ²΄ν¬λ¦¬μŠ€νŠΈλŠ” 6번 μ΄μŠˆμ—μ„œ λ³Ό 수 μžˆλ‹€.

이후 이 μ œμ•ˆμ€ 2014λ…„ 11μ›” 18일 회의의 μ•ˆκ±΄μœΌλ‘œ μ˜¬λΌμ˜¨λ‹€. 이 μ•ˆκ±΄μ—μ„œλŠ” Array.prototype.contains κ°€ ν‘œμ€€μ— ν¬ν•¨λ˜λ©΄ 이λ₯Ό κ΅¬ν˜„ν•œ λΈŒλΌμš°μ €μ—μ„œ MootoolsλΌλŠ” 라이브러리λ₯Ό μ‚¬μš©ν•˜κ³  μžˆλŠ” κΈ°μ‘΄ μ›Ήμ‚¬μ΄νŠΈκ°€ 깨질 κ²ƒμ΄λΌλŠ” λ¬Έμ œκ°€ μ œκΈ°λœλ‹€. 당일 챔피언이 λ„μ°©ν•˜κ³  이어진 λ…Όμ˜μ—μ„œ κ²°κ΅­ String.prototype.contains 와 Array.prototype.contains 의 λ©”μ†Œλ“œ λͺ…을 includes 둜 λ³€κ²½ν•˜λŠ” 결정이 λ‚œλ‹€. 회의 전에 이루어진 κ΄€λ ¨ λŒ€ν™” μ“°λ ˆλ“œλ₯Ό 읽어보면 μ„€λ Ή μœ μš©ν•œ μƒˆ κΈ°λŠ₯을 ν¬κΈ°ν•˜λ”λΌλ„ (그리고 그것이 TC39λ‚˜ λΈŒλΌμš°μ €μ˜ 잘λͺ»μœΌλ‘œ μΈν•œ 상황이 μ•„λ‹ˆλ”λΌλ„) 이미 μ‘΄μž¬ν•˜λŠ” 웹을 κΉ¨νŠΈλ¦¬μ§€ μ•Šκ² λ‹€λŠ” μ°Έμ—¬μžλ“€μ˜ μ˜μ§€λ₯Ό μ—Ώλ³Ό 수 μžˆμ–΄ ν₯λ―Έλ‘­λ‹€.

2단계: 초고 (stage 2: draft)

이름을 λ°”κΎΈκΈ°λ‘œ κ²°μ •ν•œ λ…Όμ˜μ˜ 이틀 후인 2014λ…„ 11μ›” 20일, 이 ν”„λ‘œν¬μ ˆμ„ 2λ‹¨κ³„λ‘œ μŠΉκ²©μ‹œν‚€λŠ” μ•ˆκ±΄μ΄ 올라였고, ν†΅κ³Όλœλ‹€. 1단계와 λ§ˆμ°¬κ°€μ§€λ‘œ 2λ‹¨κ³„λ‘œ 승격된 μ‹œμ μ˜ μ €μž₯μ†Œμ™€ 체크리슀트λ₯Ό 담은 이슈λ₯Ό κΉƒν—™ μ €μž₯μ†Œμ—μ„œ 확인할 수 μžˆλ‹€.

μ €μž₯μ†Œλ₯Ό 확인해보면 μŠ€νŽ™ μ΄ˆμ•ˆμ€ 사싀 1단계가 λ˜λŠ” μ‹œμ μ—μ„œ 이미 μ€€λΉ„λ˜μ–΄ μžˆλ‹€. 2λ‹¨κ³„μ˜ λ˜λ‹€λ₯Έ μš”κ΅¬μ‚¬ν•­μΈ (예λ₯Ό λ“€μ–΄ V8μ—μ„œ --harmony-array-includesλ“±μ˜ ν”Œλž˜κ·Έμ— μ˜ν•΄ μ œμ–΄λ˜λŠ”) μ‹€ν—˜μ μΈ κ΅¬ν˜„μ΄ μ™„μ„±λœ μ‹œμ μ—μ„œ μ•ˆκ±΄μ— 올라온 κ²ƒμœΌλ‘œ 보인닀. μ•žμœΌλ‘œ νŒ¨μΉ˜κ°€ μ’€ 더 μžˆμ„ μ˜ˆμ •μ΄λ―€λ‘œ 3λ‹¨κ³„λ‘œ 올릴 μˆ˜λŠ” μ—†λ‹€λŠ” λ‚΄μš©μ΄ μ–ΈκΈ‰λœλ‹€.

3단계: 후보 (stage 3: candidate)

2λ‹¨κ³„λ‘œ 승격된 지 μ—¬λŸ 달이 μ§€λ‚œ 2015λ…„ 7μ›” 28일, 이 μ œμ•ˆμ€ 3λ‹¨κ³„λ‘œ μŠΉκ²©λœλ‹€. (μ €μž₯μ†Œ, 이슈)

각쒅 엣지 μΌ€μ΄μŠ€λ“€μ— λŒ€ν•œ λ””μžμΈ 문제λ₯Ό ν•΄κ²°ν•œ ν›„ λͺ…μ„Έ λ¬Έμ„œκ°€ μ™„μ „νžˆ μ •λ¦¬λœ μƒνƒœλ‹€. λ˜ν•œ 지λͺ…λœ 리뷰어와 ECMAScript νŽΈμ§‘μžμ˜ μŠΉμΈλ„ 받은 것을 λ³Ό 수 μžˆλ‹€. μ‹€μ œλ‘œ λͺ…μ„Έλ₯Ό λ‹΄κ³  μžˆλŠ” spec.html 파일의 νžˆμŠ€ν† λ¦¬λ₯Ό 보면 3λ‹¨κ³„λ‘œ 승격된 μ΄ν›„μ—λŠ” λͺ…μ„Έλ₯Ό 적은 λ§ˆν¬μ—…μ˜ 문법 버전 변경을 μ œμ™Έν•˜λ©΄ λ³€κ²½ 사항이 거의 μ „λ¬΄ν•˜λ‹€.

4단계: μ™„λ£Œλ¨ (stage 4: finished)

2015λ…„ 11μ›” 17일 νšŒμ˜μ—μ„œ Array.prototype.includes λ©”μ†Œλ“œ ν”„λ‘œν¬μ ˆμ€ μ΅œμ’…μ μœΌλ‘œ 4λ‹¨κ³„λ‘œ μŠΉκ²©λœλ‹€. 이 ν”„λ‘œν¬μ ˆμ€ 2016λ…„ 6월에 λ°œν‘œλœ ECMAScript 2016 ν‘œμ€€μ— κ±°λ“­μ œκ³± μ—°μ‚°μž(**)와 ν•¨κ»˜ μ–Έμ–΄μ˜ ν‘œμ€€ κΈ°λŠ₯으둜 ν¬ν•¨λ˜μ–΄ λ°°ν¬λœλ‹€.


맺으며

μ΄λ ‡κ²Œ ECMA-262 ν‘œμ€€κ³Ό TC39, 그리고 TC39 ν”„λ‘œμ„ΈμŠ€μ— λŒ€ν•΄ λ‹€λ£¨μ–΄λ³΄μ•˜λ‹€. 글을 끝맺기 μ „ λ§ˆμ§€λ§‰μœΌλ‘œ 이 λͺ¨λ“  과정은 TC39의 ꡬ성원인 큰 κΈ°μ—…λ§Œ μ°Έκ°€ν•  수 μžˆλŠ” β€˜κ·Έλ“€λ§Œμ˜ 리그’가 μ•„λ‹ˆλΌλŠ” 점을 κ°•μ‘°ν•˜κ³  μ‹Άλ‹€. μ•žμ„œ μ–ΈκΈ‰ν–ˆλ“― λͺ¨λ“  회의둝과 ν”„λ‘œν¬μ ˆμ˜ 진행상황은 μ „λΆ€ 깃헙을 톡해 μ–Έμ œλ“  μ‘°νšŒν•  수 μžˆλ‹€. λˆ„κ΅¬λ“  챔피언을 ꡬ해 ν”„λ‘œν¬μ ˆμ„ μ œμΆœν•  수 있으며, 진행쀑인 ν”„λ‘œν¬μ ˆ/ν˜„ ν‘œμ€€μ— λŒ€ν•œ μ˜κ²¬μ„ μ €μž₯μ†Œ, 메일링 리슀트 λ˜λŠ” 포럼λ₯Ό 톡해 밝힐 수 μžˆλ‹€.

μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” 맀우 λͺ…λ°±ν•œ 결점과 고유의 맀λ ₯을 λ™μ‹œμ— 가진 μ–Έμ–΄λ‘œ μΆœλ°œν–ˆλ‹€. κ·Έ ν›„ μ§€λ‚œ 20μ—¬λ…„ κ°„ κΎΈμ€€ν•˜κ³  λΉ λ₯΄κ²Œ 더 λ‚˜μ€ λ°©ν–₯을 ν–₯ν•΄ λ°œμ „ν•΄μ™”λ‹€. 이 μ• μ¦μ˜ μ–Έμ–΄μ˜ 결점을 고치고 더 맀λ ₯적인 λͺ¨μŠ΅μœΌλ‘œ λ°”κΎΈμ–΄ λ‚Ό κΈ°νšŒλŠ” μƒνƒœκ³„μ˜ λͺ¨λ“  μ°Έμ—¬μžμ—κ²Œ μ—΄λ € μžˆλ‹€. (λ¬Όλ‘  Array.prototype.includes의 μ‚¬λ‘€μ—μ„œ λ³΄μ•˜λ“― κ·Έ 길은 ν—˜λ‚œν•˜κ³  ꡴곑져 μžˆλŠ” κ²½μš°κ°€ λ§Žλ‹€.) 이 언어와 웹에 애착을 가진 ν•œ κ°œλ°œμžλ‘œμ„œ, 그건 ꡉμž₯히 멋진 일이라 μƒκ°ν•œλ‹€.