๐Ÿ—บ๏ธ JavaScript์™€ ECMAScript์˜ ํƒ„์ƒ

thumb_hyeokยท2022๋…„ 9์›” 18์ผ
2

๐ŸŸกย JavaScript

๋ชฉ๋ก ๋ณด๊ธฐ
14/15
post-thumbnail

๐Ÿค” ECMAScript๋ž€ ๋ฌด์—‡์ผ๊นŒ?

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐœ๋ฐœ์ž๋ผ๋ฉด ECMAScript์— ๋Œ€ํ•ด์„œ๋Š” ๋ชจ๋‘ ๋“ค์–ด๋ดค์„ ๊ฒƒ์ด๋‹ค. ์ž์„ธํžˆ ์•Œ์•„๋ณด๋Š” ๊ฒƒ์€ ์•„๋ž˜์˜ ๋ชฉ์ฐจ์—์„œ ์‚ดํŽด๋ณด๊ณ , ์ด ๊ณณ์—์„œ๋Š” Javascript์™€ ECMAScript์˜ ์ฐจ์ด๋งŒ ๊ฐ€๋ณ๊ฒŒ ์งš๊ณ  ๋„˜์–ด๊ฐ€์ž.
Javascript๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜ ์ด๋ฆ„์ด๊ณ , ECMAScript๋Š” ์–ธ์–ด ๋ช…์„ธ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์ด๋ฆ„์œผ๋กœ, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ‘œ์ค€ํ™”ํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์–ด์กŒ๋‹ค.


๐Ÿผ JavaScript์™€ ECMAScript๋Š” ์™œ ํƒ„์ƒํ–ˆ์„๊นŒ?

1๏ธโƒฃ JavaScript์˜ ํƒ„์ƒ

์ด๋ฅผ ์•Œ๊ธฐ์œ„ํ•ด์„œ๋Š” 1993๋…„, ๋„๋ฆฌ ์ธ๊ธฐ๋ฅผ ์–ป๋Š” ์ฒซ๋ฒˆ์งธ ์›น ๋ธŒ๋ผ์šฐ์ €์˜ NSCA์˜ Mosaic๊ฐ€ ํƒ„์ƒํ•œ ์‹œ์ ์œผ๋กœ ๊ฑฐ์Šฌ๋Ÿฌ ์˜ฌ๋ผ๊ฐ€์•ผํ•œ๋‹ค. Mosaic์˜ ๊ฐœ๋ฐœ์ž ์ค‘ ํ•œ ๋ช…์ธ Marc Andreesen์€ Mosaic Communications Corporation ์„ ๊ณต๋™ ์„ค๋ฆฝํ•˜๊ณ  Mosaic Netscape ๋ผ๋Š” ์ƒˆ๋กœ์šด ์›น ๋ธŒ๋ผ์šฐ์ €๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ดํ›„์—, NCSA์™€ ๊ด€๋ จ๋œ ๋ฒ•์  ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ํšŒ์‚ฌ ์ด๋ฆ„์€ Netscape Communications Corporation ์œผ๋กœ, ๋ธŒ๋ผ์šฐ์ €๋Š” Netscape Navigator ๋กœ ๋ณ€๊ฒฝํ–ˆ๋‹ค.

Netscape๋Š” ์›น์ด ๋” ๋™์ ์ด์–ด์•ผ ํ•จ์„ ๋นจ๋ฆฌ ๊นจ๋‹ฌ์•˜๋‹ค. ๋‹น์‹œ์—๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ๋‹จ์ˆœํžˆ ํผ์— ์ •ํ™•ํ•œ ๊ฐ’์„ ์ž…๋ ฅํ–ˆ๋Š”์ง€ ์ฒดํฌํ•˜๊ธฐ๋งŒ ํ•  ๋•Œ๋„ ์„œ๋ฒ„์— ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด๊ณ  ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›์•„์•ผํ–ˆ๋‹ค.

๊ทธ๋ž˜์„œ Netscape๋Š” 1995๋…„ Brianden Eich๋ฅผ ๊ณ ์šฉํ•˜๊ณ , ์ด๋Ÿฐ์ €๋Ÿฐ ์—ด๋ค ํ† ๋ก  ๋์— Brianden Eich๋Š” ๋‹จ 10์ผ ๋งŒ์—, ์ž๋ฐ”์™€ ๋ฌธ๋ฒ•์ด ๋น„์Šทํ•ด๋ณด์ด๋Š” ์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด ์‹œ์ œํ’ˆ Mocha ๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค. ์ดํ›„ Mocha ๋Š” LiveScript ๋ผ๋Š” ์ด๋ฆ„์„ ๊ฑฐ์ณ ์ตœ์ข…์ ์œผ๋กœ JavaScript ๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ํ˜„์žฌ๊นŒ์ง€ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋‹ค.

2๏ธโƒฃ ECMAScript์˜ ํƒ„์ƒ

1996๋…„ 3์›”, Netscape๋Š” Netscape Navigator 2.0์„ ์ถœ์‹œํ•˜๋ฉด์„œ, JavaScript๋ฅผ ์ง€์›ํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค. ์›น ํŽ˜์ด์ง€์˜ ๋™์ž‘์„ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ์–ธ์–ด๋กœ์„œ JavaScript์˜ ์„ฑ๊ณต์€ ๋งˆ์ดํฌ๋กœ์†Œํ”„ํŠธ๊ฐ€ ์ด์™€ ์ ๋‹นํžˆ ํ˜ธํ™˜๋˜๋Š” JScript๋ฅผ ๊ฐœ๋ฐœํ•˜๋Š” ๊ณ„๊ธฐ๊ฐ€ ๋˜์—ˆ๊ณ , ์ด๋Š” 1996๋…„ 8์›”์— Internet Explorer 3.0์— ํฌํ•จ๋˜์–ด ์ถœ์‹œ๋˜์—ˆ๋‹ค.

๋งˆ์ดํฌ๋กœ์†Œํ”„ํŠธ๋ฅผ ๊ฒฌ์ œํ•˜๋ ค๋Š” ์˜๋„๋ฅผ ์–ด๋Š ์ •๋„ ํฌํ•จํ•ด์„œ, Netscape๋Š” ํ‘œ์ค€ ๊ธฐ๊ด€์ธ Ecma International ์— ํ‘œ์ค€ํ™”๋ฅผ ์ฃผ๊ด€ํ•ด๋‹ฌ๋ผ๊ณ  ์š”์ฒญํ–ˆ๊ณ , ECMA-262 ๋ช…์„ธ๋Š” 1996๋…„ 11์›”์— ์‹œ์ž‘๋˜์–ด, 1997๋…„ 6์›”, ECMA ์ผ๋ฐ˜ ํšŒ์˜์—์„œ ECMA-262์˜ ์ดˆํŒ์ด ์ฑ„ํƒ๋๋‹ค.

์ฌ(์ง€๊ธˆ์˜ ์˜ค๋ผํด)์—์„œ Java๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ์ƒํ‘œ๋ฅผ ์†Œ์œ ํ•˜๊ณ  ์žˆ์—ˆ์œผ๋ฏ€๋กœ ํ‘œ์ค€ ์–ธ์–ด์˜ ๊ณต์‹ ์ด๋ฆ„์„ JavaScript๋ผ๊ณ  ๋ถ€๋ฅผ ์ˆ˜๋Š” ์—†์—ˆ์œผ๋ฏ€๋กœ, JavaScript์™€ ECMA๋ฅผ ํ•ฉ์ณ, ECMAScript ๋ผ๋Š” ์ด๋ฆ„์„ ๋ถ™์˜€๋‹ค.

ECMAScript ๋Š” ECMA-262์— ์˜ํ•ด ํ‘œ์ค€ํ™”๋œ ์–ธ์–ด์˜ ์ด๋ฆ„์ด๋‹ค. JavaScript์™€ JScript๋Š” ๋ชจ๋‘ ECMAScript ์™€์˜ ํ˜ธํ™˜์„ ๋ชฉํ‘œ๋กœ ํ•˜๋ฉด์„œ, ECMA ๊ทœ๊ฒฉ์— ํฌํ•จ๋˜์ง€ ์•Š๋Š” ํ™•์žฅ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค. ์˜ค๋Š˜๋‚  JavaScript๋Š” ECMA-262์„ ๋งŒ์กฑํ•˜๋Š” ๊ตฌํ˜„์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.


๐Ÿ‘จโ€๐Ÿ’ป ECMAScript์™€ TC39

ECMAScript๋Š” Ecma International์˜ ์—ฌ๋Ÿฌ ๊ธฐ์ˆ  ์˜์›ํšŒ(Technial Comittee, ์ดํ•˜ TC) ์ค‘ TC39 ๋ผ๋Š” ์˜์›ํšŒ๊ฐ€ ์ด ๋ช…์„ธ๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค. 1997๋…„ 6์›” ECMAScript 1์ด ๋“ฑ์žฅํ•œ ์ดํ›„๋กœ 2022๋…„ 6์›”๊นŒ์ง€ ECMAScript 13 ๊นŒ์ง€ ์ž‘์„ฑ๋˜์—ˆ๋‹ค. ECMAScript๊ฐ€ ์–ด๋–ป๊ฒŒ ๊ด€๋ฆฌ๋˜๋Š”์ง€ ๊ถ๊ธˆํ•˜์ง€ ์•Š์€๊ฐ€?
์ด๋ฒˆ ์žฅ์—์„œ๋Š” TC39์™€ ECMA-262 ํ‘œ์ค€์— ์ƒˆ๋กœ์šด ๋ช…์„ธ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•œ ๊ณผ์ •์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž.

1๏ธโƒฃ Technical Comittee 39

TC39์—๋Š” ๋งˆ์ดํฌ๋กœ์†Œํ”„ํŠธ, ๋ชจ์งˆ๋ผ, ๊ตฌ๊ธ€ ๊ฐ™์€ ํšŒ์‚ฌ๊ฐ€ ๋“ค์–ด๊ฐ”๊ณ , ์ด ํšŒ์‚ฌ์—์„œ ์ผํ•˜๋˜ ์‚ฌ๋žŒ๋“ค, ์ฆ‰ ๋ธŒ๋ Œ๋˜ ์•„์ดํฌ, ์•จ๋Ÿฐ ์›Œํ”„์Šค-๋ธŒ๋ก(ECMA-262 ํŽธ์ง‘์ž), ๋ฐ์ด๋“œ ํ—ˆ๋จผ ๋“ฑ์ด ์œ„์›ํšŒ ์ž‘์—…์— ์ฐธ์—ฌํ–ˆ๋‹ค.
TC39๋Š” ECMAScript์˜ ๋””์ž์ธ์„ ๋ฐœ์ „์‹œํ‚ค๊ธฐ ์œ„ํ•ด es-discuss๋ฅผ ๋งŒ๋“ค์—ˆ๊ณ , ์ •๊ธฐ์ ์œผ๋กœ ํšŒํ•ฉ์„ ์—ด์—ˆ๋‹ค. ์ด ํšŒํ•ฉ์—๋Š” TC39 ๋ฉค๋ฒ„์™€ ์ดˆ๋Œ€๋œ ์ „๋ฌธ๊ฐ€๊ฐ€ ์ฐธ์—ฌํ–ˆ๊ณ , ํšŒ์˜๋ก์€ ์›น์ƒ์— ๋ชจ๋‘ ๊ณต๊ฐœ๋œ๋‹ค.

2๏ธโƒฃ The TC39 Process

ECMA-262 ํ‘œ์ค€์— ์ƒˆ๋กœ์šด ๋ช…์„ธ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•œ ๊ณผ์ •์€ The TC39 Process์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๋‚˜๋Š” ์—ฌ๊ธฐ์— ์žˆ๋Š” ๋‚ด์šฉ๋“ค์„ ์•„์ฃผ ๊ฐ„๋žตํ•˜๊ฒŒ ์š”์•ฝํ•˜์—ฌ ํฌ์ŠคํŒ…ํ•  ์˜ˆ์ •์ด๋‹ค.
TC39 Process ๋Š” ๋ˆ„๊ตฌ๋‚˜(๋ผ์ด์„ผ์Šค ๊ด€๋ จ ์กฐํ•ญ์— ๋™์˜ํ•˜๊ณ  TC39์˜ ์ปจํŠธ๋ฆฌ๋ทฐํ„ฐ๋กœ ๋“ฑ๋กํ•œ) ์ œ์•ˆ์„ ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ๋Š” ํ—ˆ์ˆ˜์•„๋น„ ๋‹จ๊ณ„์ธ 0๋‹จ๊ณ„์™€ ๋‚˜๋จธ์ง€ 4๋‹จ๊ณ„๊นŒ์ง€ 5๋‹จ๊ณ„๋กœ ๋‚˜๋‰˜์–ด์ ธ์žˆ์œผ๋ฉฐ, ๊ฐ ๋‹จ๊ณ„๋กœ์˜ ์Šน๊ธ‰์„ ์œ„ํ•œ ๋ช…์‹œ์ ์ธ ์กฐ๊ฑด๋“ค์ด ์กด์žฌํ•œ๋‹ค.
ํ•ด๋‹น ์กฐ๊ฑด์„ ๋งŒ์กฑํ•œ ์ดํ›„ ์œ„์›ํšŒ์˜ ๋™์˜๋ฅผ ์–ป์€ ์ œ์•ˆ๋งŒ์ด ๋‹ค์Œ ๋‹จ๊ณ„๋กœ ๋„˜์–ด๊ฐ„๋‹ค.

๊ทธ๋ ‡๊ฒŒ ์ œ์•ˆ์ด ์ˆ˜๋งŽ์€ ๋‹จ๊ณ„๋“ค์„ ๊ฑฐ์ณ ๋‹นํ•ด 3์›” ์ „๊นŒ์ง€ 4๋‹จ๊ณ„๋ฅผ ๋‹ฌ์„ฑํ•˜๋ฉด, March TC39 Meeting ์—์„œ 4๋‹จ๊ณ„ ์ œ์•ˆ๋“ค์ด ํ†ตํ•ฉ๋˜๊ณ  ์ตœ์ข… ์Šน์ธ๋˜๋ฉด ์ƒˆ ์‚ฌ์–‘ ๋ฒ„์ „์ด ๋งˆ์Šคํ„ฐ์—์„œ ๋ถ„๊ธฐ๋œ๋‹ค.

์ด ์‹œ์ ๋ถ€ํ„ฐ๋Š” ํŽธ์ง‘์ƒ์˜ ๋ณ€๊ฒฝ๋งŒ ํ—ˆ์šฉ๋˜๊ณ , ์ดํ›„ 4~6์›” ๋™์•ˆ ๊ฒ€ํ†  ๊ธฐ๊ฐ„์„ ๊ฐ€์ง„ ํ›„์— 7์›”์— ECMA ์ดํšŒ์—์„œ ์ƒˆ๋กœ์šด ํ‘œ์ค€์„ ์Šน์ธํ•ด ์ œ์•ˆ์ด ECMAScript์˜ ์ƒˆ๋กœ์šด ๋ฒ„์ „์— ์ถ”๊ฐ€๋œ๋‹ค.


๐Ÿง ์ •๋ฆฌ

์ด๋ ‡๊ฒŒ JavaScript ์™€ ECMAScript ์˜ ํƒ„์ƒ๊ณผ ์˜๋ฏธ, ECMAScript์— ์ƒˆ๋กœ์šด ๋ช…์„ธ๊ฐ€ ์ถ”๊ฐ€๋˜๋Š” ๊ณผ์ •๊นŒ์ง€ ์•Œ์•„๋ดค๋‹ค. ๊ธ€์ด ๋„ˆ๋ฌด ๋ฌด๊ฑฐ์›Œ์ง€๋Š” ๊ฒƒ์„ ๋ง‰๊ธฐ ์œ„ํ•ด์„œ ๊ฐ„๋žตํžˆ ์ ์€ ๋ถ€๋ถ„์ด ๋งŽ์œผ๋‹ˆ ๊ด€์‹ฌ์ด ์žˆ๋Š” ์‚ฌ๋žŒ์ด๋ผ๋ฉด ์•„๋ž˜์— ์ ์–ด๋†“์€ ์ฐธ๊ณ ์ž๋ฃŒ๋ฅผ ํ†ตํ•ด ์ถ”๊ฐ€์ ์œผ๋กœ ๊ณต๋ถ€ํ•ด๋ณด๊ธธ ๋ฐ”๋ž€๋‹ค!


๐Ÿ“– ์ฐธ๊ณ  ์ž๋ฃŒ

  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋งํ•˜๋‹ค
    • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ์–ด๋–ป๊ฒŒ ๋งŒ๋“ค์–ด์กŒ๋Š”๊ฐ€? (p97~)
    • ECMAScript ํ‘œ์ค€ํ™” (p99~)
  • JavaScript
  • Ecma International
  • ECMAScript
  • Browser wars
  • The TC39 Process
profile
์šฐ์•„ํ•œํ…Œํฌ์ฝ”์Šค 4๊ธฐ ์›น ํ”„๋ก ํŠธ์—”๋“œ

0๊ฐœ์˜ ๋Œ“๊ธ€