๋ณธ๋ฌธ์œผ๋กœ ๊ฑด๋„ˆ๋›ฐ๊ธฐ

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ž€ ๋ฌด์—‡์ธ๊ฐ€

๊ฐ„์ถ”๋ฆฐ ์—ญ์‚ฌ#

2020-04-16-์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ž€-๋ฌด์—‡์ธ๊ฐ€-image-0

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ํƒ„์ƒ#

์›น์ด ์ธ๊ธฐ๋ฅผ ์–ป์œผ๋ฉด์„œ ํด๋ผ์ด์–ธํŠธ ์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด์— ๋Œ€ํ•œ ์š”๊ตฌ๊ฐ€ ์ ์  ์ปค์กŒ๋‹ค. ์›น ํŽ˜์ด์ง€๊ฐ€ ์ปค์ง€๊ณ  ๋ณต์žกํ•ด์ง€๋Š” ์ค‘์—๋„ ์ „ํ™”์„ ์„ ์ด์šฉํ•œ 28.8kbps ๋ชจ๋Ž€์ด ๋„๋ฆฌ ์“ฐ์˜€๊ธฐ ๋•Œ๋ฌธ์—๋‹จ์ˆœํ•œ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ์œ„ํ•ด ๋งค๋ฒˆ ์„œ๋ฒ„๊นŒ์ง€ ์™•๋ณตํ•ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ์ด ๋ฐœ์ƒํ–ˆ๋‹ค.

๋„ท์Šค์ผ€์ดํ”„๊ฐ€์ด๋Ÿฌํ•œ ํด๋ผ์ด์–ธํŠธ ์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด์˜ ํ•„์š”์„ฑ์„ ๋Š๊ผˆ๊ณ  ๋„ท์Šค์ผ€์ดํ”„์—์„œ ์ผํ•˜๊ณ  ์žˆ๋˜ Brendan Eich์— ์˜ํ•ด Mocha๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ์ตœ์ดˆ์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ํƒ„์ƒํ–ˆ๋‹ค. Mocha๋Š” 1995๋…„ 3์›” ๋„ท์Šค์ผ€์ดํ”„์˜ ์›น ๋ธŒ๋ผ์šฐ์ €์ธ Netscape Navigator 2์— ํƒ‘์žฌ๋˜์—ˆ๊ณ  ๊ทธ ํ•ด 9์›” LiveScript๋ผ๋Š” ์ด๋ฆ„์„ ๊ฑฐ์ณ 12์›”์—์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ์ตœ์ข… ๋ช…๋ช…๋˜์—ˆ๋‹ค.

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ผ๋Š” ์ด๋ฆ„์€ ๋‹น์‹œ ์ž๋ฐ”๊ฐ€ ์–ป๊ณ  ์žˆ๋˜ ์ธ๊ธฐ์— ํŽธ์Šนํ•˜๊ธฐ ์œ„ํ•จ์ด์—ˆ๊ณ , ์ž๋ฐ”์™€ ํŠน๋ณ„ํ•œ ์—ฐ๊ด€์„ฑ์ด ์žˆ๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค.

๋„ท์Šค์ผ€์ดํ”„์— ๋„์ž…๋œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋Œ€์„ฑ๊ณต์„ ๊ฑฐ๋‘๋ฉด์„œ ๋„ท์Šค์ผ€์ดํ”„๋Š” ์›น์„ ์„ ๋„ํ•˜๋Š”ํšŒ์‚ฌ๋กœ ์ž๋ฆฌ๋งค๊น€ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋งˆ์ดํฌ๋กœ์†Œํ”„ํŠธ๊ฐ€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ํŒŒ์ƒ ๋ฒ„์ „์ธ JScript๋ฅผ ํƒ‘์žฌํ•˜์—ฌ Internet Explorer 3๋ฅผ ์ถœ์‹œํ•˜๋ฉด์„œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ํ‘œ์ค€ํ™”๋˜์ง€ ๋ชปํ•˜๋‹ค๋Š” ์ด์Šˆ๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค.

์ด์— 1996๋…„ 11์›”, ๋„ท์Šค์ผ€์ดํ”„๋Š” ๋น„์˜๋ฆฌ ํ‘œ์ค€ํ™” ๊ธฐ๊ตฌ์ธ ECMA ์ธํ„ฐ๋„ค์…”๋„(European Computer Manufacturers Association)์— ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ํ‘œ์ค€ํ™”๋ฅผ ์š”์ฒญํ•˜์˜€๋‹ค. ECMA๋Š” ๋„ท์Šค์ผ€์ดํ”„, ๋งˆ์ดํฌ๋กœ์†Œํ”„ํŠธ, ์„  ๋“ฑ๋“ฑ ์ด ์Šคํฌ๋ฆฝํŠธ์˜ ๋ฏธ๋ ˆ์— ํฅ๋ฏธ๋ฅผ ๊ฐ€์ง„ ํšŒ์‚ฌ๋“ค์—์„œ ํ”„๋กœ๊ทธ๋ž˜๋จธ๋“ค์„ ํˆฌ์ž…ํ•˜์—ฌ ๊ธฐ์ˆ ์œ„์›ํšŒ TC39๋ฅผ ๊ตฌ์„ฑํ–ˆ๋‹ค. TC39๊ฐ€ ๋ช‡ ๋‹ฌ์— ๊ฑธ์ณ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ 1.1 ์„ ์†์งˆํ•œ ๋์— 1997๋…„ 7์›”, ECMA-262๋ผ ๋ถˆ๋ฆฌ๋Š” ํ‘œ์ค€ํ™”๋œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ดˆํŒ, ECMAScript 1์˜ ๋ช…์„ธ๋ฅผ ์™„์„ฑํ•˜์˜€๋‹ค. ๋‹น์‹œ Sun ์‚ฌ๊ฐ€ 'Java'๋ฅผ ์ƒํ‘œ ๋“ฑ๋กํ•ด๋†จ๊ธฐ ๋•Œ๋ฌธ์— 'JavaScript'๋ผ๊ณ  ๋ช…๋ช…ํ•  ์ˆ˜ ์—†์–ด ํ‘œ์ค€ ์–ธ์–ด์˜ ์ด๋ฆ„์„ ECMAScript๋ผ๊ณ  ๋ถ€๋ฅด๊ฒŒ ๋˜์—ˆ๊ณ ๋Œ€์™ธ์ ์œผ๋กœ ์•Œ๋ฆฌ๊ธฐ ์œ„ํ•ด์„œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ผ๊ณ  ๋ถˆ๋ €๋‹ค.

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ตฌํ˜„#

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

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๊ตฌ์„ฑ

  • ์ฝ”์–ด(ECMAScript)

  • ๋ฌธ์„œ ๊ฐ์ฒด ๋ชจ๋ธ(DOM)

  • ๋ธŒ๋ผ์šฐ์ € ๊ฐ์ฒด ๋ชจ๋ธ(BOM)

ECMAScript#

ECMAScript๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ํ‘œ์ค€ ๋ช…์„ธ์ธ ECMA-262๋ฅผ ๋งํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋‹จ์ˆœํžˆ ๋ช…์„ธ์—์„œ์„ค๋ช…ํ•˜๋Š” ๋ถ€๋ถ„๋“ค์„ ๊ตฌํ˜„ํ•œ ์–ธ์–ด๋ฅผ ๋ถ€๋ฅด๋Š” ๋ง์ด๋‹ค. ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜ ํƒ€์ž…, ๊ฐ’, ๊ฐ์ฒด์™€ ํ”„๋กœํผํ‹ฐ, ํ•จ์ˆ˜, ๋นŒํŠธ์ธ ๊ฐ์ฒด ๋“ฑ ํ•ต์‹ฌ ๋ฌธ๋ฒ•(core syntax)์„ ๊ทœ์ •ํ•˜๋ฉฐ ๊ฐ ๋ธŒ๋ผ์šฐ์ €์ œ์กฐ์‚ฌ๊ฐ€ ๋ธŒ๋ผ์šฐ์ €์— ๋‚ด์žฅ๋˜๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์„ ๊ตฌํ˜„ํ•  ๋•Œ ์ค€์ˆ˜ํ•ด์•ผ ํ•  ํ‘œ์ค€์ด ๋œ๋‹ค.

ECMAScript๋Š” ์›น ๋ธŒ๋ผ์šฐ์ €์— ์ข…์†๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๊ณ  ์›น ๋ธŒ๋ผ์šฐ์ €๋Š” ECMAScript๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” 'ํ˜ธ์ŠคํŠธ ํ™˜๊ฒฝ'์ผ ๋ฟ์ด๋‹ค. (ํ˜ธ์ŠคํŠธ ํ™˜๊ฒฝ์—๋Š” ์›น ๋ธŒ๋ผ์šฐ์ €, NodeJS, ์–ด๋„๋น„ ํ”Œ๋ž˜์‹œ๋“ฑ์ด ์žˆ๋‹ค.)

ECMAScript 'ํŒ'#

ECMAScript์˜ ์—ฌ๋Ÿฌ ๋ฒ„์ „์„ 'ํŒ'์ด๋ผ๊ณ  ๋ถ€๋ฅด๋Š”๋ฐ ์ด๋Š” ECMA-262์˜ ๊ฐœ๋ณ„ ๊ตฌํ˜„์„ ๊ฐ€๋ฆฌํ‚จ๋‹ค. ์ดˆํŒ์€ ๋„ท์Šค์ผ€์ดํ”„์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ 1.1๊ณผ ๊ฑฐ์˜ ๊ฐ™์ง€๋งŒ ๋ธŒ๋ผ์šฐ์ € ์ข…์†์ ์ธ ์ฝ”๋“œ๋ฅผ์‚ญ์ œํ•˜๊ณ  ์„ธ์„ธํ•œ ๋ถ€๋ถ„์„ ๋ณ€๊ฒฝํ–ˆ๋‹ค. ECMA-262 2ํŒ์€ ๊ต์ •๋ณธ์œผ๋กœ์„œ ๊ตญ์ œ ํ‘œ์ค€์ธ ISO/IEC-16262์— ์™„์ „ํžˆ ์ผ์น˜ํ•˜๋„๋ก ์—…๋ฐ์ดํŠธํ–ˆ์„ ๋ฟ์ด๋‹ค. 3ํŒ์—์„œ๋Š” ๋ฌธ์ž์—ด์„ ๋‹ค๋ฃจ๋Š”๋ฐฉ๋ฒ•, ์—๋Ÿฌ ์ •์˜, ์ˆซ์žํ˜• ์ถœ๋ ฅ์„ ์—…๋ฐ์ดํŠธํ–ˆ๊ณ , ์ •๊ทœ ํ‘œํ˜„์‹๊ณผ ์ƒˆ๋กœ์šด ์ œ์–ด๋ฌธ, try-catch๋ฅผ ์ด์šฉํ•œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ์ง€์›ํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค. ์ด ๋•Œ๋ถ€ํ„ฐ ECMAScript๊ฐ€ ์ง„์ •ํ•œํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ ๊ฐ„์ฃผ๋˜๊ธฐ ์‹œ์ž‘ํ•œ๋‹ค.

4ํŒ์€ ์–ธ์–ด๋ฅผ ์™„์ „ํžˆ ์ƒˆ๋กœ ๋ฐ”๊พธ์—ˆ๋‹ค. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์›น์—์„œ ์ธ๊ธฐ๋ฅผ ์–ป์ž ECMAScript ๋ฅผ ๊ฐœ์ •ํ•ด ์›น ๊ฐœ๋ฐœ์— ํ•„์š”ํ•œ ๋ถ€๋ถ„์„ ์ถฉ์กฑํ•˜๋ ค ํ–ˆ๋‹ค. TC39 ๋‚ด๋ถ€์—์„œ 4ํŒ์ด ๋„ˆ๋ฌด ๊ธ‰๊ฒฉํ•œ๋„์•ฝ์ด๋ผ๊ณ  ์ƒ๊ฐํ•œ ์‚ฌ๋žŒ๋“ค์ด ECMAScript 3ํŒ์„ ์ผ๋ถ€ ๊ฐœ์ •ํ•˜์—ฌ ECMAScript 3.1 ์ด๋ผ ๋ถˆ๋ฆฌ๋Š” ๋ณ„๋„์˜ ๋ช…์„ธ๋กœ ์ œ์•ˆํ–ˆ๋‹ค. ๊ฒฐ๊ตญ TC39์—์„œ ECMAScript 3.1์ด ์ฑ„ํƒ๋˜์–ด 4ํŒ์€ ๊ณต์‹์ ์œผ๋กœ ๋ฐœํ–‰๋˜์ง€ ์•Š์€ ์ƒํƒœ์—์„œ ํ๊ธฐ๋˜์—ˆ๋‹ค. ECMAScript 3.1์ด 5ํŒ์ด๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ 2009๋…„ 12์›” ๊ณต์‹ ๋ฐœํ‘œ๋˜์—ˆ๋‹ค. ์ด ๋•Œ JSON ๋ฐ์ดํ„ฐ๋ฅผ ํŒŒ์‹ฑํ•˜๊ณ  ์ง๋ ฌํ™”ํ•˜๋Š” ๋„ค์ดํ‹ฐ๋ธŒ JSON ๊ฐ์ฒด, ์ƒ์†๊ณผ ๊ณ ๊ธ‰ ํ”„๋กœํผํ‹ฐ ์ •์˜์— ์“ฐ์ด๋Š” ๋ฉ”์„œ๋“œ, ECMAScript ์—”์ง„์ด ์ฝ”๋“œ๋ฅผํ•ด์„ํ•˜๊ณ  ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ผ๋ถ€ ํ™•์žฅํ•œ ์ŠคํŠธ๋ฆญํŠธ ๋ชจ๋“œ๊ฐ€ ๋„์ž…๋˜์—ˆ๋‹ค.

๋ฒ„์ „์ถœ์‹œ๋…„๋„ํŠน์ง•
ES11997์ดˆํŒ
ES21998ISO/IEC 16262 ๊ตญ์ œ ํ‘œ์ค€๊ณผ ๋™์ผํ•œ ๊ทœ๊ฒฉ์„ ์ ์šฉ
ES31999์ •๊ทœ ํ‘œํ˜„์‹, tryโ€ฆcatch ์˜ˆ์™ธ ์ฒ˜๋ฆฌ
ES52009HTML5์™€ ํ•จ๊ป˜ ์ถœํ˜„ํ•œ ํ‘œ์ค€์•ˆ. JSON, strict mode, ์ ‘๊ทผ์ž ํ”„๋กœํผํ‹ฐ(getter, setter), ํ–ฅ์ƒ๋œ ๋ฐฐ์—ด ์กฐ์ž‘ ๊ธฐ๋Šฅ(forEach, map, filter, reduce, some, every)
ES6 (ECMAScript 2015)2015let, const, class, ํ™”์‚ดํ‘œ ํ•จ์ˆ˜, ํ…œํ”Œ๋ฆฟ ๋ฆฌํ„ฐ๋Ÿด, ๋””์ŠคํŠธ๋Ÿญ์ฒ˜๋ง ํ• ๋‹น, spread ๋ฌธ๋ฒ•, rest ํŒŒ๋ผ๋ฏธํ„ฐ, Symbol, Promise, Map/Set, iterator/generator, module import/export
ES7 (ECMAScript 2016)2016์ง€์ˆ˜(**) ์—ฐ์‚ฐ์ž, Array.prototype.includes, String.prototype.includes
ES8 (ECMAScript 2017)2017async/await, Object ์ •์  ๋ฉ”์†Œ๋“œ(Object.values, Object.entries, Object.getOwnPropertyDescriptors)
ES9 (ECMAScript 2018)2018Object Rest/Spread ํ”„๋กœํผํ‹ฐ

์›น ๋ธŒ๋ผ์šฐ์ €์˜ ECMAScript ์ง€์›#

๋‹ค์Œ์˜ ์ฃผ์†Œ์—์„œ ES6์˜ ์ง€์› ํ˜„ํ™ฉ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

2020-04-16-์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ž€-๋ฌด์—‡์ธ๊ฐ€-image-1

ECMAScript 6 compatibility table

IE๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋˜ ๋ธŒ๋ผ์šฐ์ €์—์„œ 96~99% ์ •๋„๋กœ ES6๋ฅผ ์ง€์›ํ•˜๊ณ  ์žˆ๋‹ค. ํ•˜์ง€๋งŒ IE๋‚˜ ๊ตฌํ˜• ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ES6๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๋“ค์„ ๊ณ ๋ คํ•œ๋‹ค๋ฉด babel๊ณผ ๊ฐ™์€ ํŠธ๋žœ์ŠคํŒŒ์ผ๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ES6๋กœ ๊ตฌํ˜„ํ•œ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ES5 ์ดํ•˜์˜ ๋ฒ„์ „์œผ๋กœ ๋‹ค์šด๊ทธ๋ ˆ์ด๋“œํ• ํ•„์š”๊ฐ€ ์žˆ๋‹ค. ๋˜ํ•œ ES6์—์„œ ๋„์ž…๋œ ๋ชจ๋“ˆ import/export๋Š” ์•„์ง ๋Œ€๋ถ€๋ถ„์˜ ๋ธŒ๋ผ์šฐ์ €๊ฐ€์ง€์›ํ•˜์ง€ ์•Š๊ณ  ์žˆ์–ด์„œ ํ”„๋กœ์ ํŠธ์—์„œ ๋ชจ๋“ˆ์„ ๋„์ž…ํ•˜๋ ค๋ฉด Webpack๊ณผ ๊ฐ™์€ ๋ชจ๋“ˆ ๋ฒˆ๋“ค๋Ÿฌ๋ฅผ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.


๋ฌธ์„œ ๊ฐ์ฒด ๋ชจ๋ธ(Document Object Model)#

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ์„œ์˜ ์ฝ”์–ด๊ฐ€ ๋˜๋Š” ECMAScript์— ๋”ํ•ด ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋ณ„๋„ ์ง€์›ํ•˜๋Š” ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ Web API, ์ฆ‰ DOM, BOM, Canvas, XMLHttpRequest, Fetch, requestAnimationFrame, SVG, Web Storage, Web Component, Web worker ๋“ฑ์„๋ชจ๋‘ ํฌํ•จํ•˜๋Š” ๊ฐœ๋…์ด๋‹ค.

์ด ์ค‘ ๋ฌธ์„œ ๊ฐ์ฒด ๋ชจ๋ธ(DOM)์€ XML์ด๋‚˜ HTML ๋ฌธ์„œ์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ธํ„ฐํŽ˜์ด์Šค(API)์ด๋‹ค. ์ด ๊ฐ์ฒด ๋ชจ๋ธ์€ ๋ฌธ์„œ ๋‚ด์˜ ๋ชจ๋“  ์š”์†Œ๋ฅผ ์ •์˜ํ•˜๊ณ , ๊ฐ๊ฐ์˜ ์š”์†Œ์— ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•œ๋‹ค. DOM์€ ์ „์ฒด ํŽ˜์ด์ง€๋ฅผ ๋…ธ๋“œ์˜ ๊ณ„์ธต ๊ตฌ์กฐ๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.

2020-04-16-์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ž€-๋ฌด์—‡์ธ๊ฐ€-image-2

DOM์€ ๋ฌธ์„œ๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ํŠธ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ๊ฐœ๋ฐœ์ž๋Š” DOM API๋ฅผ ํ†ตํ•ด ๋ฌธ์„œ์˜ ์ฝ˜ํ…์ธ ์™€๊ตฌ์กฐ๋ฅผ ์ž์œ ๋กญ๊ฒŒ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

DOM์ด ํ•„์š”ํ•œ ์ด์œ #

IE 4์™€ ๋„ท์Šค์ผ€์ดํ”„ ๋‚ด๋น„๊ฒŒ์ดํ„ฐ 4๊ฐ€ ๊ฐ๊ธฐ ๋‹ค๋ฅธ ๋™์  HTML(DHTML)์„ ์ง€์›ํ•˜๋ฉด์„œ ์›น ํŽ˜์ด์ง€๋ฅผ ์ƒˆ๋กœ๊ณ ์นจํ•˜์ง€ ์•Š๊ณ ๋„ ์ฝ˜ํ…์ธ ์˜ ๋ชจ์–‘์„ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์ง€๋งŒ, ๋‘ ๋ธŒ๋ผ์šฐ์ €์˜ DHTML์ด ์™„์ „ํžˆ ๋‹ฌ๋ž๊ธฐ ๋•Œ๋ฌธ์— ๊ฐœ๋ฐœ์ž๊ฐ€ HTML์„ ๋‹จ ํ•˜๋‚˜๋งŒ ๋งŒ๋“ค๋ฉด ๋ชจ๋“  ๋ธŒ๋ผ์šฐ์ €์—์„œ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋˜ ์‹œ๋Œ€๋Š” ๋๋‚ฌ๋‹ค.

ํ”Œ๋žซํผ ๋…๋ฆฝ์ ์ธ ์›น์˜ ๋ณธ์„ฑ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด World Wide Web Consortium์—์„œ DOM ํ‘œ์ค€์„ ๋งŒ๋“ค๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค.

๋ธŒ๋ผ์šฐ์ € ๊ฐ์ฒด ๋ชจ๋ธ(Browser Object Model)#

๋ธŒ๋ผ์šฐ์ € ๊ฐ์ฒด ๋ชจ๋ธ์€ ๋ธŒ๋ผ์šฐ์ € ์ฐฝ์— ์ ‘๊ทผํ•˜๊ณ  ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค ์ด๋‹ค. ๋ธŒ๋ผ์šฐ์ €์— ํ‘œ์‹œ๋˜๋Š” ๋ฌธ์„œ(Document)์™€๋Š” ๋ณ„๊ฐœ์˜ ์ปจํ…์ŠคํŠธ์—์„œ ๋ธŒ๋ผ์šฐ์ €์™€ ์ƒํ˜ธ์ž‘์šฉํ• ์ˆ˜ ์žˆ๋‹ค. BOM์€ ์ฃผ๊ด€ํ•˜๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ‘œ์ค€์ด ์กด์žฌํ•˜์ง€ ์•Š๋‹ค๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๋Š”๋ฐ, HTML5๊ฐ€ ๋“ฑ์žฅํ•˜๋ฉด์„œ BOM์„ ๊ณต์‹ ๋ช…์„ธ์˜ ์ผ๋ถ€๋กœ ํ‘œ์ค€ํ™”ํ•˜๊ณ  ์žˆ๊ณ , ์ด๋Ÿฌํ•œ ํ˜ผ๋ž€์Šค๋Ÿฌ์›€์ดํฌ๊ฒŒ ๊ฐœ์„ ๋˜์—ˆ๋‹ค.

BOM์€ ์ผ์ฐจ์ ์œผ๋กœ ๋ธŒ๋ผ์šฐ์ € ์ฐฝ๊ณผ ํ”„๋ ˆ์ž„์„ ๋‹ค๋ฃจ๋Š” ์ธํ„ฐํŽ˜์ด์Šค์ด๊ธด ํ•˜์ง€๋งŒ ์ผ๋ฐ˜์ ์œผ๋กœ๋Š” ๋ธŒ๋ผ์šฐ์ €์— ๊ณ ์œ ํ•œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ™•์žฅ๋„ BOM์˜ ์ผ๋ถ€๋กœ ๊ฐ„์ฃผํ•œ๋‹ค.

  • ๋ธŒ๋ผ์šฐ์ € ์ฐฝ์„ ์ƒˆ๋กœ ๋„์›€

  • ๋ธŒ๋ผ์šฐ์ € ์ฐฝ์„ ์›€์ง์ด๊ฑฐ๋‚˜ ํฌ๊ธฐ๋ฅผ ์กฐ์ ˆํ•˜๊ณ  ๋‹ซ์Œ

  • ๋ธŒ๋ผ์šฐ์ €์˜ ์ƒ์„ธ ์ •๋ณด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” navigator ๊ฐ์ฒด

  • ๋ถˆ๋Ÿฌ์˜จ ํŽ˜์ด์ง€์˜ ์ƒ์„ธ ์ •๋ณด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” location ๊ฐ์ฒด

  • ์‚ฌ์šฉ์ž์˜ ํ™”๋ฉด ํ•ด์ƒ๋„์— ๋Œ€ํ•ด ์ƒ์„ธ ์ •๋ณด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” screen ๊ฐ์ฒด

  • ์ฟ ํ‚ค ์ง€์›

  • XMLHttpRequest์™€ ์ธํ„ฐ๋„ท ์ต์Šคํ”Œ๋กœ๋Ÿฌ์˜ ActiveXObject ๊ฐ™์€ ์ปค์Šคํ…€ ๊ฐ์ฒด

์˜ค๋žซ๋™์•ˆ ํ‘œ์ค€์ด ์—†์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ธŒ๋ผ์šฐ์ €๋งˆ๋‹ค ๋…์ž์ ์ธ BOM์„ ๊ตฌํ˜„ํ–ˆ๋‹ค. window ๊ฐ์ฒด๋‚˜ navigator ๊ฐ์ฒด ๊ฐ™์€ ์‚ฌ์‹ค์ƒ์˜ ํ‘œ์ค€์ด ์กด์žฌํ•˜๊ธด ํ•˜์ง€๋งŒ ๊ฐ ๋ธŒ๋ผ์šฐ์ €๋Š” ์ด๋“ค์„ ํฌํ•จํ•œ ๋‹ค๋ฅธ ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ์™€ ๋ฉ”์„œ๋“œ๋ฅผ ์ €๋งˆ๋‹ค ๋‹ค๋ฅด๊ฒŒ ์ •์˜ํ–ˆ๋‹ค. HTML5๊ฐ€ ๋“ฑ์žฅํ•˜๋ฉด์„œ BOM ๊ตฌํ˜„์„ ์ƒ์„ธํžˆ ๋ช…์„ธํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ ์•ž์œผ๋กœ๋Š” ํ˜ธํ™˜์„ฑ์ด ํ›จ์”ฌ ์ข‹์•„์งˆ ๊ฒƒ์œผ๋กœ ๊ธฐ๋Œ€๋œ๋‹ค.

์š”์•ฝ#

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ์›น ํŽ˜์ด์ง€์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜๋„๋ก ๋””์ž์ธ๋œ ์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด์ด๋ฉฐ ๋‹ค์Œ ์„ธ ๋ถ€๋ถ„์œผ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.

  • ECMA-262์—์„œ ์ •์˜ํ•˜๋Š” ECMAScript ํ•ต์‹ฌ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.

  • ๋ฌธ์„œ ๊ฐ์ฒด ๋ชจ๋ธ(DOM), ์›น ํŽ˜์ด์ง€ ์ฝ˜ํ…์ธ ๋ฅผ ์กฐ์ž‘ํ•˜๋Š” ๋ฉ”์„œ๋“œ์™€ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

  • ๋ธŒ๋ผ์šฐ์ € ๊ฐ์ฒด ๋ชจ๋ธ(BOM), ๋ธŒ๋ผ์šฐ์ €์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š” ๋ฉ”์„œ๋“œ์™€ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

์ฐธ๊ณ ์ž๋ฃŒ#

Introduction | PoiemaWeb

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—ญ์‚ฌ

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ํƒ„์ƒ๊ณผ ECMAScript ์—ญ์‚ฌ ์ •๋ฆฌ