This page was translated from English by the community. Learn more and join the MDN Web Docs community.

View in English Always switch to English

JavaScript ๊ธฐ์ˆ  ๊ฐœ์š”

๊ฐœ์š”

HTML์ด ์›น ํŽ˜์ด์ง€์˜ ๊ตฌ์กฐ์™€ ์ฝ˜ํ…์ธ ๋ฅผ, CSS๊ฐ€ ํ˜•์‹๊ณผ ๋ชจ์–‘์„ ๊ฒฐ์ •ํ•œ๋‹ค๋ฉด, JavaScript๋Š” ์ƒํ˜ธ์ž‘์šฉ์„ฑ์„ ์ถ”๊ฐ€ํ•˜์—ฌ ํ’๋ถ€ํ•œ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜, ์›น ๋ธŒ๋ผ์šฐ์ € ๋งฅ๋ฝ์—์„œ ํฌ๊ด„์ ์œผ๋กœ ์“ฐ์ด๋Š” ์šฉ์–ด๋กœ์„œ์˜ "JavaScript"๋Š” ์‚ฌ์‹ค ๋งค์šฐ ๋‹ค๋ฅธ ์š”์†Œ ์—ฌ๋Ÿฟ์„ ํฌํ•จํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ ์ค‘ ํ•˜๋‚˜๋Š” ํ•ต์‹ฌ ์–ธ์–ด(ECMAScript)๊ณ , ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” DOM(Document Object Model)์„ ํฌํ•จํ•œ Web API์ž…๋‹ˆ๋‹ค.

ํ•ต์‹ฌ ์–ธ์–ด, JavaScript(ECMAScript)

JavaScript์˜ ํ•ต์‹ฌ ์–ธ์–ด๋Š” ECMA TC39 ์œ„์›ํšŒ๊ฐ€ ECMAScript๋ผ๋Š” ์–ธ์–ด๋กœ ํ‘œ์ค€ํ™”ํ–ˆ์Šต๋‹ˆ๋‹ค. "ECMAScript"๋Š” ์–ธ์–ด ํ‘œ์ค€์„ ๋‚˜ํƒ€๋‚ด๋Š” ์šฉ์–ด์ด์ง€๋งŒ, "ECMAScript"์™€ "JavaScript"๋Š” ๊ฐ™์€ ์˜๋ฏธ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•ต์‹ฌ ์–ธ์–ด๋Š” Node.js ๋“ฑ ๋น„๋ธŒ๋ผ์šฐ์ € ํ™˜๊ฒฝ์—์„œ๋„ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

ECMAScript ๋ฒ”์œ„์— ํฌํ•จ๋˜๋Š” ๊ฒƒ์€ ๋ฌด์—‡์ธ๊ฐ€์š”?

๋ฌด์—‡๋ณด๋‹ค๋„, ECMAScript๋Š” ๋‹ค์Œ์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

  • ์–ธ์–ด ๊ตฌ๋ฌธ (๊ตฌ๋ฌธ ๋ถ„์„ ๊ทœ์น™, ํ‚ค์›Œ๋“œ, ํ๋ฆ„ ์ œ์–ด, ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด ์ดˆ๊ธฐํ™” ๋“ฑ)
  • ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ ์›๋ฆฌ (throw, try...catch, ์‚ฌ์šฉ์ž ์ •์˜ Error ํƒ€์ž… ๋“ฑ)
  • ์ž๋ฃŒํ˜• (๋ถˆ๋ฆฌ์–ธ, ์ˆซ์ž, ๋ฌธ์ž์—ด, ํ•จ์ˆ˜, ๊ฐ์ฒด, ...)
  • ํ”„๋กœํ† ํƒ€์ž… ๊ธฐ๋ฐ˜ ์ƒ์† ์›๋ฆฌ
  • ๋‚ด์žฅ ๊ฐ์ฒด ๋ฐ ํ•จ์ˆ˜ (JSON, Math, Array.prototype ๋ฉ”์„œ๋“œ, Object ๋‚ด์„ฑ๊ฒ€์‚ฌ ๋ฉ”์„œ๋“œ ๋“ฑ)
  • ์—„๊ฒฉ ๋ชจ๋“œ
  • ๋ชจ๋“ˆ ์‹œ์Šคํ…œ
  • ๊ธฐ๋ณธ ๋ฉ”๋ชจ๋ฆฌ ๋ชจ๋ธ

ํ‘œ์ค€ํ™” ๊ณผ์ •

ECMAScript ํŒ๋“ค์€ ๋งค๋…„ ECMA ์ดํšŒ์—์„œ ํ‘œ์ค€์œผ๋กœ ์Šน์ธ๋˜๊ณ  ๊ฒŒ์‹œ๋ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ฐœ๋ฐœ์€ ์ œ์•ˆ, ๊ณต์‹ ๋ช…์„ธ์„œ ๋ฌธ์„œ ๋ฐ ํšŒ์˜ ๋…ธํŠธ๋ฅผ ํ˜ธ์ŠคํŒ…ํ•˜๋Š” Ecma TC39 GitHub ์กฐ์ง์— ๊ณต๊ฐœ๋ฉ๋‹ˆ๋‹ค.

ECMAScript 6ํŒ(ES6์ด๋ผ๊ณ  ํ•จ) ์ด์ „์—๋Š”, ๋ช…์„ธ๊ฐ€ ๋ช‡ ๋…„์— ํ•œ ๋ฒˆ์”ฉ ๊ฒŒ์‹œ๋˜์—ˆ์œผ๋ฉฐ, ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฉ”์ด์ € ๋ฒ„์ „ ๋ฒˆํ˜ธ๋กœ(ES3, ES5 ๋“ฑ)๋กœ ์ฐธ์กฐ๋ฉ๋‹ˆ๋‹ค. ES6 ์ดํ›„์—๋Š” ๋ช…์„ธ์˜ ์ด๋ฆ„์ด ๊ฒŒ์‹œ ์—ฐ๋„์ธ ES2017, ES2018 ๋“ฑ์œผ๋กœ ์ง€์ •๋ฉ๋‹ˆ๋‹ค. ES6๋Š” ES2015์™€ ๋™์˜์–ด์ž…๋‹ˆ๋‹ค. "ESNext"๋Š” ์ž‘์„ฑ ๋‹น์‹œ์˜ ๋‹ค์Œ ๋ฒ„์ „์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋™์ ์ธ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. ์ •์˜์— ๋”ฐ๋ผ, ๋ช…์„ธ๊ฐ€ ์•„์ง ํ™•์ •๋˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์—, ESNext ๊ธฐ๋Šฅ์€ ์ œ์•ˆ์ด๋ผ๊ณ  ๋ถ€๋ฅด๋Š” ๊ฒƒ์ด ๋” ์ •ํ™•ํ•ฉ๋‹ˆ๋‹ค.

ECMA-262์˜ ํ˜„์žฌ ์œ„์›ํšŒ ์Šน์ธ ์Šค๋ƒ…์ƒท์€ PDF ํ˜•์‹ ๋ฐ HTML ํ˜•์‹์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ECMA-262 ๋ฐ ECMA-402 ๋ฒ„์ „์€ ๋ช…์„ธ ํŽธ์ง‘์ž๋“ค์ด ์ตœ์‹  ์ƒํƒœ๋กœ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. TC39 ์›น์‚ฌ์ดํŠธ๋Š” ์ตœ์‹  ECMA-262 ๋ฐ ECMA-402 ๋ฒ„์ „์„ ํ˜ธ์ŠคํŒ…ํ•ฉ๋‹ˆ๋‹ค.

์ƒˆ๋กœ์šด ๋ฌธ๋ฒ• ๋ฐ API ๋„์ž…, ๊ธฐ์กด ๋™์ž‘ ์ˆ˜์ • ๋“ฑ ์ƒˆ๋กœ์šด ์–ธ์–ด ๊ธฐ๋Šฅ์€ ์ œ์•ˆ ํ˜•์‹์œผ๋กœ ๋…ผ์˜๋ฉ๋‹ˆ๋‹ค. ๊ฐ ์ œ์•ˆ์€ 4๋‹จ๊ณ„ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฑฐ์น˜๋ฉฐ, ์ผ๋ฐ˜์ ์œผ๋กœ 3๋‹จ๊ณ„ ๋˜๋Š” 4๋‹จ๊ณ„์—์„œ JavavScript ์—”์ง„์— ์˜ํ•ด ๊ตฌํ˜„๋˜๋ฏ€๋กœ ๊ณต๊ฐœ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ECMAScript ๊ธฐ๋ก์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ Wikipedia ECMAScript ํ•ญ๋ชฉ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

๊ตญ์ œํ™” API

ECMAScript ๊ตญ์ œํ™” API ๋ช…์„ธ์€ Ecma TC39์—์„œ ํ‘œ์ค€ํ™”๋œ ๊ฒƒ๊ณผ ๊ฐ™์ด ECMAScript ์–ธ์–ด ๋ช…์„ธ์— ์ถ”๊ฐ€๋œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ตญ์ œํ™” API๋Š” JavaScript ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์œ„ํ•œ ์ฝœ๋ ˆ์ด์…˜(๋ฌธ์ž์—ด ๋น„๊ต), ์ˆซ์ž ํ˜•์‹ ๋ฐ ๋‚ ์งœ ๋ฐ ์‹œ๊ฐ„ ํ˜•์‹์„ ์ œ๊ณตํ•˜์—ฌ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์–ธ์–ด๋ฅผ ์„ ํƒํ•˜๊ณ  ํ•„์š”์— ๋งž๊ฒŒ ๊ธฐ๋Šฅ์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ์ดˆ๊ธฐ ํ‘œ์ค€์•ˆ์€ 2012๋…„ 12์›”์— ํ†ต๊ณผํ–ˆ์œผ๋ฉฐ ๋ธŒ๋ผ์šฐ์ € ๊ตฌํ˜„ ์ƒํƒœ๋Š” Intl ๊ฐ์ฒด ๋ฌธ์„œ์—์„œ ์ถ”์  ์ค‘์ž…๋‹ˆ๋‹ค. ์ตœ๊ทผ์—๋Š” ๊ตญ์ œํ™” ๋ช…์„ธ๋„ ๋งค๋…„ ๋น„์ค€ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ๋ธŒ๋ผ์šฐ์ € ๊ตฌํ˜„๋„ ๊ณ„์†ํ•˜์—ฌ ๊ฐœ์„  ์ค‘์ž…๋‹ˆ๋‹ค.

๊ด€๋ จ๋œ ์ฐธ๊ณ  ์ž๋ฃŒ

ECMAScript ์–ธ์–ด ๋ช…์„ธ ๋ฐ ECMAScript ๊ตญ์ œํ™” API ๋ช…์„ธ ๋ฐ ๊ด€๋ จ ๋ฆฌ์†Œ์Šค์— ์ฐธ์—ฌํ•˜๊ฑฐ๋‚˜ ํ˜„์žฌ ์ž‘์—…์„ ์ถ”์ ํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค.

DOM API

WebIDL

WebIDL ๋ช…์„ธ๋Š” DOM ๊ธฐ์ˆ ๊ณผ ECMAScript ์‚ฌ์ด๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

DOM์˜ ํ•ต์‹ฌ

DOM(Document Object Model)์€ HTML, XHTML, XML ๋ฌธ์„œ์˜ ๊ฐ์ฒด๋ฅผ ๋‚˜ํƒ€๋‚ด๊ณ  ์ƒํ˜ธ์ž‘์šฉํ•˜๊ธฐ ์œ„ํ•œ, ์–ธ์–ด์— ์ œ์•ฝ๋˜์ง€ ์•Š๋Š” ํฌ๋กœ์Šค ํ”Œ๋žซํผ ํ˜‘์•ฝ์ž…๋‹ˆ๋‹ค. DOM ํŠธ๋ฆฌ์˜ ๊ฐ์ฒด๋Š” ํ•ด๋‹น ๊ฐ์ฒด์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. W3C๋Š” HTML์™€ XML ๋ฌธ์„œ๋ฅผ ๊ฐ์ฒด๋กœ ์ถ”์ƒํ™”ํ•˜๋Š” Core Document Object Model์„ ํ‘œ์ค€ํ™”ํ•˜๊ณ , ์ถ”์ƒํ™”๋ฅผ ์กฐ์ž‘ํ•˜๊ธฐ ์œ„ํ•œ ์›๋ฆฌ๋„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. DOM์— ์ •์˜๋œ ๋‚ด์šฉ ์ค‘ ์ผ๋ถ€๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

ECMAScript์˜ ๊ด€์ ์—์„œ, DOM ๋ช…์„ธ์— ์ •์˜๋œ ๊ฐ์ฒด๋Š” "ํ˜ธ์ŠคํŠธ ๊ฐ์ฒด"๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค.

HTML DOM

์›น ๋งˆํฌ์—… ์–ธ์–ด์ธ HTML์€ DOM ์ฝ”์–ด์— ์ •์˜๋œ ์ถ”์ƒํ™” ๊ฐœ๋…์— ์—˜๋ฆฌ๋จผํŠธ์˜ ์˜๋ฏธ๋ฅผ ๋”ํ•œ ๋ ˆ์ด์–ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. HTML DOM์€ HTML ์š”์†Œ์˜ className ๊ฐ™์€ ์†์„ฑ๊ณผ document.body ๊ฐ™์€ API๋„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

HTML ๋ช…์„ธ๋Š” ๋ฌธ์„œ์˜ ์ œ์•ฝ๋„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ˆœ์„œ๊ฐ€ ์—†๋Š” ๋ฆฌ์ŠคํŠธ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” <ul> ์š”์†Œ์˜ ๋ชจ๋“  ์ž์‹๋“ค์€ ๋ฆฌ์ŠคํŠธ ์š”์†Œ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” <li> ์š”์†Œ์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ํ‘œ์ค€์— ์ •์˜๋˜์ง€ ์•Š์€ ์š”์†Œ์™€ ์†์„ฑ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋„ ๊ธˆ์ง€๋ฉ๋‹ˆ๋‹ค.

Document ๊ฐ์ฒด, Window ๊ฐ์ฒด๋‚˜ ๋‹ค๋ฅธ DOM ์š”์†Œ๋“ค์„ ์ฐพ์•„๋ณด์•˜๋‚˜์š”? DOM ๋ฌธ์„œ์„ ์ฝ์–ด๋ณด์„ธ์š”

์•Œ์•„๋‘˜๋งŒํ•œ ๋‹ค๋ฅธ API

  • setTimeout ๊ณผ setInterval ํ•จ์ˆ˜๋Š” HTML ํ‘œ์ค€์˜ Window ์ธํ„ฐํŽ˜์ด์Šค์— ์ฒ˜์Œ์œผ๋กœ ์ •์˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • XMLHttpRequest๋Š” ๋น„๋™๊ธฐ์  HTTP ์š”์ฒญ์„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” API์ž…๋‹ˆ๋‹ค.
  • Fetch API๋Š” ๋„คํŠธ์›Œํฌ ์š”์ฒญ์— ๋Œ€ํ•ด ๋ณด๋‹ค ์ธ์ฒด๊ณตํ•™์ ์ธ ์ถ”์ƒํ™”๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • CSS Object Model๋Š” CSS ๊ทœ์น™์„ ๊ฐ์ฒด์ฒ˜๋Ÿผ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋„๋ก ์ถ”์ƒํ™”ํ•ฉ๋‹ˆ๋‹ค.
  • WebWorkers๋Š” ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” API์ž…๋‹ˆ๋‹ค.
  • WebSockets๋Š” ์–‘๋ฐฉํ–ฅ ์ €์ˆ˜์ค€ ํ†ต์‹ ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” API์ž…๋‹ˆ๋‹ค.
  • Canvas 2D Context๋Š” <canvas> ์š”์†Œ์— ๊ทธ๋ฆด ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” API์ž…๋‹ˆ๋‹ค.
  • WebAssembly ์ธํ„ฐํŽ˜์ด์Šค๋Š” JavaScript ์ฝ”๋“œ์™€ WebAssembly ๋ชจ๋“ˆ ๊ฐ„์˜ ํ†ต์‹ ์„ ์œ„ํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๋น„ ๋ธŒ๋ผ์šฐ์ € ํ™˜๊ฒฝ(์˜ˆ: Node.js)์—๋Š” DOM API๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์€๋ฐ, ๋ฌธ์„œ์™€ ์ƒํ˜ธ ์ž‘์šฉํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. fetch() ๋ฐ setTimeout()๊ณผ ๊ฐ™์€ ๋งŽ์€ ์›น API๋ฅผ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

JavaScript ๊ตฌํ˜„์ฒด

๋ธŒ๋ผ์šฐ์ € ํ™˜๊ฒฝ๊ณผ ๊ทธ ๋„ˆ๋จธ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์„ธ ๊ฐ€์ง€ ์ฃผ์š” JavaScript ๊ตฌํ˜„์ฒด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

  • Firefox์—์„œ ์‚ฌ์šฉ๋˜๋Š” Mozilla์˜ SpiderMonkey๋Š” Netscape์˜ Brendan Eich๊ฐ€ ๋งŒ๋“  ์ตœ์ดˆ์˜ ever JavaScript ์—”์ง„์ด์—ˆ์Šต๋‹ˆ๋‹ค.
  • Google์˜ V8, Google Chrome, Opera, Edge, Node.js, Deno, Electron ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • Apple Safari์™€ ๊ฐ™์€ WebKit ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‚ฌ์šฉ๋˜๋Š” Apple์˜ JavaScriptCore(SquirrelFish/Nitro๋ผ๊ณ ๋„ ํ•จ) ๋ฐ Bun.

์œ„์˜ ๊ตฌํ˜„์ฒด ์™ธ์—๋„ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ธ๊ธฐ ์žˆ๋Š” ๋‹ค๋ฅธ JavaScript ์—”์ง„์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • Carakan, ์ด์ „ ๋ฒ„์ „์˜ Opera์—์„œ ์‚ฌ์šฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • Internet Explorer์—์„œ ์‚ฌ์šฉ๋˜๋Š” Microsoft์˜ Chakra ์—”์ง„(์ƒํ‘œ๊ถŒ ๋ฌธ์ œ๋ฅผ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ๊ตฌํ˜„ํ•˜๋Š” ์–ธ์–ด๋ฅผ ๊ณต์‹์ ์œผ๋กœ "JScript"๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค). ์ด์ „ ๋ฒ„์ „์˜ Edge๋Š” ํ˜ผ๋ž€์Šค๋Ÿฝ๊ฒŒ๋„ Chakra๋ผ๊ณ ๋„ ํ•˜๋Š” ์ƒˆ๋กœ์šด JavaScript ์—”์ง„์„ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.
  • LibJS, SerenityOS์˜ ๋ธŒ๋ผ์šฐ์ € ๊ตฌํ˜„์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • Mozilla์˜ Rhino ์—”์ง„, Java๋กœ ์ž‘์„ฑ๋œ JavaScript ๊ตฌํ˜„์œผ๋กœ ์ฃผ๋กœ Norris Boyd(์—ญ์‹œ Netscape)๊ฐ€ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

๋น„ ๋ธŒ๋ผ์šฐ์ €์šฉ์œผ๋กœ ํŠน๋ณ„ํžˆ ์ œ์ž‘๋œ ์ผ๋ถ€ ์—”์ง„์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • Engine262, JavaScript๋กœ ์ž‘์„ฑ๋œ JavaScript ์—”์ง„์ž…๋‹ˆ๋‹ค. JavaScript ๊ฐœ๋ฐœ์ž๊ฐ€ ์ƒˆ๋กœ์šด ์–ธ์–ด ๊ธฐ๋Šฅ์„ ํƒ์ƒ‰ํ•˜๊ณ  ๋ช…์„ธ์—์„œ ๋ฒ„๊ทธ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“ค์–ด์กŒ์Šต๋‹ˆ๋‹ค.
  • IoT์™€ ๊ฐ™์€ ์ž„๋ฒ ๋””๋“œ ์‹œ์Šคํ…œ์—์„œ ์‚ฌ์šฉ๋˜๋Š” Moddable XS.
  • QuickJS, ์ž‘๊ณ  ์‚ฝ์ž… ๊ฐ€๋Šฅํ•œ JavaScript ์—”์ง„์ž…๋‹ˆ๋‹ค.
  • Meta์˜ Hermes ์—”์ง„์€ React Native์— ์ตœ์ ํ™”๋œ ์—”์ง„์ž…๋‹ˆ๋‹ค.
  • Oracle์˜ GraalJS, Oracle Labs์—์„œ GraalVM์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌ์ถ•ํ•œ ๊ณ ์„ฑ๋Šฅ ๊ตฌํ˜„์ฒด์ž…๋‹ˆ๋‹ค.

JavaScript ์—”์ง„์€ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ๊ฐœ๋ฐœ์ž๊ฐ€ JavaScript๋ฅผ ์†Œํ”„ํŠธ์›จ์–ด์— ํ†ตํ•ฉํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ณต์šฉ API๋ฅผ ๋…ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ์ง€๊ธˆ๊นŒ์ง€ JavaScript์˜ ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ํ˜ธ์ŠคํŠธ ํ™˜๊ฒฝ์€ ์›น ๋ธŒ๋ผ์šฐ์ €์ž…๋‹ˆ๋‹ค. ์›น ๋ธŒ๋ผ์šฐ์ €๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๊ณต์šฉ API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ DOM์„ JavaScript์— ๋ฐ˜์˜ํ•˜๋Š” ํ˜ธ์ŠคํŠธ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

JavaScript์˜ ๋˜ ๋‹ค๋ฅธ ์ผ๋ฐ˜์ ์ธ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์€ (์›น) ์„œ๋ฒ„ ์ธก ์Šคํฌ๋ฆฝํŒ… ์–ธ์–ด์ž…๋‹ˆ๋‹ค. JavaScript ์›น ์„œ๋ฒ„๋Š” HTTP ์š”์ฒญ ๋ฐ ์‘๋‹ต ๊ฐ์ฒด๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ํ˜ธ์ŠคํŠธ ๊ฐ์ฒด๋ฅผ ๋…ธ์ถœํ•œ ๋‹ค์Œ JavaScript ํ”„๋กœ๊ทธ๋žจ์—์„œ ์กฐ์ž‘ํ•˜์—ฌ ์›น ํŽ˜์ด์ง€๋ฅผ ๋™์ ์œผ๋กœ ์ƒ์„ฑ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Node.js๊ฐ€ ์ด์— ๋Œ€ํ•œ ์ธ๊ธฐ ์žˆ๋Š” ์˜ˆ์ž…๋‹ˆ๋‹ค.

์‰˜

JavaScript ์‰˜์„ ์‚ฌ์šฉํ•˜๋ฉด ์›น ํŽ˜์ด์ง€๋ฅผ ๋‹ค์‹œ ๋กœ๋“œํ•˜์ง€ ์•Š๊ณ ๋„ JavaScript ์ฝ”๋“œ ์กฐ๊ฐ์„ ๋น ๋ฅด๊ฒŒ ํ…Œ์ŠคํŠธ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฝ”๋“œ ๊ฐœ๋ฐœ ๋ฐ ๋””๋ฒ„๊น…์— ๋งค์šฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋…๋ฆฝํ˜• JavaScript ์‰˜

๋‹ค์Œ JavaScript ์‰˜์€ Perl ๋˜๋Š” Python๊ณผ ๊ฐ™์€ ๋…๋ฆฝ ์‹คํ–‰ํ˜• ํ™˜๊ฒฝ์ž…๋‹ˆ๋‹ค.

  • Node.js - Node.js๋Š” ๋น ๋ฅด๊ณ  ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ๋„คํŠธ์›Œํฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‰ฝ๊ฒŒ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๋Š” ํ”Œ๋žซํผ์ž…๋‹ˆ๋‹ค.
  • ShellJS - Node.js์šฉ ํœด๋Œ€์šฉ Unix ์…ธ ๋ช…๋ น์ž…๋‹ˆ๋‹ค.

๋ธŒ๋ผ์šฐ์ € ๊ธฐ๋ฐ˜ JavaScript ์‰˜

๋‹ค์Œ JavaScript ์‰˜์€ ๋ธŒ๋ผ์šฐ์ €์˜ JavaScript ์—”์ง„์„ ํ†ตํ•ด ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  • Firefox์—๋Š” ์—ฌ๋Ÿฌ ์ค„ ํŽธ์ง‘์„ ์ง€์›ํ•˜๋Š” ๋‚ด์žฅ JavaScript ์ฝ˜์†”์ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • Babel REPL - ๋ฏธ๋ž˜์˜ JavaScript ์‹คํ—˜์„ ์œ„ํ•œ ๋ธŒ๋ผ์šฐ์ € ๊ธฐ๋ฐ˜ REPL์ž…๋‹ˆ๋‹ค.
  • TypeScript ํ”Œ๋ ˆ์ด๊ทธ๋ผ์šด๋“œ โ€” ์ƒˆ๋กœ์šด JavaScript ๊ธฐ๋Šฅ(tsc ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ํ†ตํ•ด)๊ณผ TypeScript ๋ฌธ๋ฒ•์„ ์‹คํ—˜ํ•˜๊ธฐ ์œ„ํ•œ ๋ธŒ๋ผ์šฐ์ € ๊ธฐ๋ฐ˜ ํ”Œ๋ ˆ์ด๊ทธ๋ผ์šด๋“œ์ž…๋‹ˆ๋‹ค.

๋„๊ตฌ ๋ฐ ๋ฆฌ์†Œ์Šค

JavaScript ์ฝ”๋“œ ์ž‘์„ฑ ๋ฐ ๋””๋ฒ„๊น…์— ์œ ์šฉํ•œ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.

Firefox ๊ฐœ๋ฐœ์ž ๋„๊ตฌ

์›น ์ฝ˜์†”, JavaScript ํ”„๋กœํŒŒ์ผ๋Ÿฌ, ๋””๋ฒ„๊ฑฐ ๋“ฑ.

JavaScript ๋ฐฐ์šฐ๊ธฐ

์›น ๊ฐœ๋ฐœ์ž ์ง€๋ง์ƒ์„ ์œ„ํ•œ ํƒ์›”ํ•œ ๋ฆฌ์†Œ์Šค โ€” ์ž๋™ํ™”๋œ ํ‰๊ฐ€ ์•ˆ๋‚ด์— ๋”ฐ๋ผ ์งง์€ ๊ฐ•์˜์™€ ๋Œ€ํ™”ํ˜• ํ…Œ์ŠคํŠธ๋ฅผ ํ†ตํ•ด ๋Œ€ํ™”ํ˜• ํ™˜๊ฒฝ์—์„œ JavaScript๋ฅผ ํ•™์Šตํ•ฉ๋‹ˆ๋‹ค. ์ฒ˜์Œ 40๊ฐœ ๋ ˆ์Šจ์€ ๋ฌด๋ฃŒ์ด๋ฉฐ ์†Œ์•ก์˜ ์ผํšŒ์„ฑ ๊ฒฐ์ œ๋กœ ์ „์ฒด ๊ณผ์ •์„ ์ˆ˜๊ฐ•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

TogetherJS

ํ˜‘์—…์ด ์‰ฌ์›Œ์ง‘๋‹ˆ๋‹ค. ์‚ฌ์ดํŠธ์— TogetherJS๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ์‚ฌ์šฉ์ž๊ฐ€ ์›น์‚ฌ์ดํŠธ์—์„œ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์„œ๋กœ ๋„์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค!

Stack Overflow

"JavaScript"๋กœ ํƒœ๊ทธ๊ฐ€ ์ง€์ •๋œ ์Šคํƒ ์˜ค๋ฒ„ํ”Œ๋กœ ์งˆ๋ฌธ์ž…๋‹ˆ๋‹ค.

JSFiddle

JavaScript, CSS ๋ฐ HTML์„ ํŽธ์ง‘ํ•˜๊ณ  ์‹ค์‹œ๊ฐ„ ๊ฒฐ๊ณผ๋ฅผ ์–ป์Šต๋‹ˆ๋‹ค. ์™ธ๋ถ€ ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์˜จ๋ผ์ธ์—์„œ ํŒ€๊ณผ ํ˜‘์—…ํ•˜์‹ญ์‹œ์˜ค.

Plunker

Plunker๋Š” ์›น ๊ฐœ๋ฐœ ์•„์ด๋””์–ด๋ฅผ ๋งŒ๋“ค๊ณ  ํ˜‘์—…ํ•˜๊ณ  ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋Š” ์˜จ๋ผ์ธ ์ปค๋ฎค๋‹ˆํ‹ฐ์ž…๋‹ˆ๋‹ค. JavaScript, CSS ๋ฐ HTML ํŒŒ์ผ์„ ํŽธ์ง‘ํ•˜๊ณ  ์‹ค์‹œ๊ฐ„ ๊ฒฐ๊ณผ ๋ฐ ํŒŒ์ผ ๊ตฌ์กฐ๋ฅผ ์–ป์œผ์‹ญ์‹œ์˜ค.

JSBin

JS Bin์€ ์˜คํ”ˆ ์†Œ์Šค ํ˜‘์—… ์›น ๊ฐœ๋ฐœ ๋””๋ฒ„๊น… ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.

Codepen

Codepen์€ ๋ผ์ด๋ธŒ ๊ฒฐ๊ณผ ๋†€์ดํ„ฐ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๋˜ ๋‹ค๋ฅธ ํ˜‘์—… ์›น ๊ฐœ๋ฐœ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.

StackBlitz

StackBlitz๋Š” React, Angular ๋“ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ „์ฒด ์Šคํƒ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํ˜ธ์ŠคํŒ…ํ•˜๊ณ  ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๋Š” ๋˜ ๋‹ค๋ฅธ ์˜จ๋ผ์ธ ๋†€์ดํ„ฐ/๋””๋ฒ„๊น… ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.

RunJS

RunJS๋Š” ๋…ธ๋“œ ๋ฐ ๋ธŒ๋ผ์šฐ์ € API ๋ชจ๋‘์— ๋Œ€ํ•œ ์‹ค์‹œ๊ฐ„ ๊ฒฐ๊ณผ์™€ ์•ก์„ธ์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” ๋ฐ์Šคํฌํƒ‘ ํ”Œ๋ ˆ์ด๊ทธ๋ผ์šด๋“œ/์Šคํฌ๋ž˜์น˜ํŒจ๋“œ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.