๋ณธ๋ฌธ์œผ๋กœ ๋ฐ”๋กœ๊ฐ€๊ธฐ

DOM ์–ด๋ ต๊ฒŒ ์ƒ๊ฐํ•˜์ง€๋งˆ

OM์€ Object Model, ๊ฐ์ฒด ์ง€ํ–ฅ ๋ชจ๋ธ์„ ๋œปํ•œ๋‹ค. ๋ญ”๊ฐ€๋ฅผ ๊ฐ์ฒด๋กœ ํ‘œํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋งํ•œ๋‹ค. ๋‚˜์•„๊ฐ€ Documnet๊ฐ€ ์ถ”๊ฐ€๋œ "D"OM์€ ์›น ํŽ˜์ด์ง€์˜ ๋‚ด์šฉ์„ ๊ฐ์ฒด๋กœ ํ‘œํ˜„ํ•˜๋Š” ํ˜•์‹์„ ๋งํ•œ๋‹ค. Brower๊ฐ€ ์ถ”๊ฐ€๋œ "B"OM์€ ์›น ๋ธŒ๋ผ์šฐ์ € ์ž์ฒด๋ฅผ ๊ฐ์ฒด๋กœ ํ‘œํ˜„ํ•˜๋Š” ํ˜•์‹์„ ๋งํ•œ๋‹ค. ์ด ๋‘˜์˜ ๊ฐ์ฒด๋“ค๋กœ๋ถ€ํ„ฐ ์ œ๊ณต๋˜๋Š” DOM API, BOM API๋ฅผ ํ†ตํ•ด JavaScript๊ฐ€ ์›น ํŽ˜์ด์ง€/๋ธŒ๋ผ์šฐ์ €๋ฅผ ์‰ฝ๊ฒŒ ์ œ์–ด ๋ฐ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

DOM

HTML๋ฌธ์„œ์˜ ๊ตฌ์กฐ์™€ ๋‚ด์šฉ์„ ๊ฐ์ฒด ํƒ€์ž…์œผ๋กœ ๋ณ€ํ™˜์‹œ์ผœ ์›น ํŽ˜์ด์ง€์— ๊ฐ์ฒด์ง€ํ–ฅ์  ์ ‘๊ทผ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ–ˆ๋‹ค. ๋‚  ๊ฒƒ ๊ทธ๋Œ€๋กœ์˜ Document๋ฅผ Object๋กœ ๋งŒ๋“ค๋ฉด(=DOM), ๊ตฌ์กฐ, ๋‚ด์šฉ, ์Šคํƒ€์ผ์˜ ์š”์†Œ๋“ค์„ ๊ตฌ์กฐ์ ์œผ๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

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

DOM์˜ ์ข…๋ฅ˜

CORE ๋”: ๋ชจ๋“  ๋ฌธ์„œ ํƒ€์ž…์„ ์œ„ํ•œ ๋”๋ชจ๋ธ
HTML ๋”: HTML๋ฌธ์„œ๋ฅผ ์กฐ์ž‘ํ•˜๊ณ  ์ ‘๊ทผํ•˜๋Š” ํ‘œ์ค€ํ™”๋œ ๋ฐฉ๋ฒ• ๋ชจ๋“  HTML์š”์†Œ๋Š” HTML DOM์„ ํ†ตํ•ด ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.
XML ๋”: XML๋ฌธ์„œ๋ฅผ ์กฐ์ž‘ํ•˜๊ณ  ๋ชจ๋“  XML์š”์†Œ๋Š” XML DOM์„ ํ†ตํ•ด ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.


HTML์—์„œ DOM์˜๋ฏธ
์›๋ณธ HTML ๋ฌธ์„œ๋ฅผ ๊ฐ์ฒดํ™” ์‹œํ‚ด์œผ๋กœ์จ ๊ตฌ์กฐ๊ฐ€ ๋ช…ํ™•ํ•ด์ง€๊ณ  ๊ด€๋ฆฌํ•˜๊ธฐ ์ˆ˜์›”ํ•ด์กŒ๋‹ค.
์›น ๋ธŒ๋ผ์šฐ์ €์˜ ์ œ์ž‘์‚ฌ๋ณ„, ๋ฒ„์ „๋ณ„, ํ”Œ๋žซํผ, ์–ธ์–ด ์ฐจ์ด์— ์˜์กดํ•˜์ง€ ์•Š๊ณ , ์›น ํŽ˜์ด์ง€์— ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•ด์กŒ๋‹ค.

Javascript์—์„œ DOM์˜๋ฏธ
์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์›น ํŽ˜์ด์ง€ ๋‚ด ๋ชจ๋“  ์š”์†Œ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.
ํŽ˜์ด์ง€์˜ ์ฝ˜ํ…์ธ  ๋ฐ ๊ตฌ์กฐ, ๊ทธ๋ฆฌ๊ณ  ์Šคํƒ€์ผ์„ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ์ˆ˜์ •์ด ๊ฐ€๋Šฅํ•ด์กŒ๋‹ค.

{ document: { html: { head: { title: ... }, body: { header: ... } } } }
  • window.document๋กœ ์ ‘๊ทผํ•˜๊ฑฐ๋‚˜, window๋Š” ์ƒ๋žต ๊ฐ€๋Šฅ(์ „์—ญ ๊ฐ์ฒด)ํ•˜๊ธฐ ๋•Œ๋ฌธ์— document๋กœ ์ ‘๊ทผํ•˜๋ฉด ๋œ๋‹ค.
  • document ๊ฐ์ฒด๋Š” ์ˆ˜ ๋งŽ์€ ์†์„ฑ๊ณผ ๋ฉ”์†Œ๋“œ๋“ค์ด ์žˆ๋‹ค.(DOM API)

BOM

DOM API์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ, BOM ๊ฐ์ฒด๋“ค๋กœ๋ถ€ํ„ฐ ์ œ๊ณต๋˜๋Š” API๋ฅผ BOM API๋ผ๊ณ  ํ•œ๋‹ค. ์ตœ์ƒ์œ„ BOM ๊ฐ์ฒด์— ํ•ด๋‹นํ•˜๋Š” window ๊ฐ์ฒด๋Š” ์›น ๋ธŒ๋ผ์šฐ์ € ํƒญ ํ•˜๋‚˜ ๋‹น ํ•˜๋‚˜ ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์—, BOM API๋Š” ์›น ๋ธŒ๋ผ์šฐ์ € ์ „์ฒด๊ฐ€ ์•„๋‹Œ ์›น ๋ธŒ๋ผ์šฐ์ € ํƒญ ํ•˜๋‚˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ•˜๊ณ  ์žˆ๋‹ค. DOM๊ณผ ๋‹ฌ๋ฆฌ BOM์€ ๊ณต์‹์ ์ธ ํ‘œ์ค€์ด ์—†๊ธฐ์— ์›น ๋ธŒ๋ผ์šฐ์ €๋งˆ๋‹ค BOM API๊ฐ€ ์กฐ๊ธˆ์”ฉ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์ง€๋งŒ ๋Œ€๋ถ€๋ถ„์˜ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋น„์Šทํ•œ BOM API๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

  • navigator: ๋ธŒ๋ผ์šฐ์ €๋‚˜, ์šด์˜์ฒด์ œ(OS) ๋Œ€ํ•œ ์ • ํ‘œ์‹œ
  • screen: ํ™”๋ฉด์— ๋Œ€ํ•œ ์ •๋ณด ํ‘œ์‹œ
  • location: ์ฃผ์†Œ์— ๋Œ€ํ•œ ์ •๋ณด ํ‘œ์‹œ
  • history: ์•ž์œผ๋กœ๊ฐ€๊ธฐ, ๋’ค๋กœ๊ฐ€๊ธฐ๋“ฑ ์ฃผ์†Œ์ด๋™ ์กฐ์ž‘

 

Web API

Web API๋Š” ์›น ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์˜๋ฏธํ•˜๋Š” ๊ฒƒ์œผ๋กœ, DOM API๋‚˜ BOM API ๋˜ํ•œ ์›น ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ œ๊ณตํ•˜๋Š” Web API์˜ ์ผ๋ถ€๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ECMAScript์—์„œ ์ •์˜ํ•˜๋Š” ๋ณธ์งˆ์ ์ธ JavaScript์—์„œ๋Š” Web API, ์ฆ‰ ์›น ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ๋“ค๊นŒ์ง€ ์ •์˜ํ•˜๊ณ  ์žˆ์ง€ ์•Š๋‹ค. ์ฆ‰ Web API๋Š” ์›น ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์ผ ๋ฟ, JavaScript ์ž์ฒด์˜ ๋ช…์„ธ์—๋Š” ํฌํ•จ๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ๋‹ค๋งŒ ๊ฐ ์›น ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋‚ด์žฅํ•˜๊ณ  ์žˆ๋Š” JavaScript ์—”์ง„์ด Web API๋„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋„๋ก ํ™•์žฅ์„ฑ ์žˆ๊ฒŒ ๊ตฌํ˜„์ด ๋˜์–ด ์žˆ์„ ๋ฟ์ด๋‹ค. ๊ทธ๋ž˜์„œ Node.js์˜ JavaScript ์—”์ง„์ด ํฌ๋กฌ์˜ V8 ์—”์ง„์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ๋‹ค๋Š” ๋ง์˜ ์˜๋ฏธ๋Š”, ํฌ๋กฌ์˜ V8 ์—”์ง„์ด ECMAScript์—์„œ ์ •์˜ํ•˜๋Š” JavaScript ์ž์ฒด์˜ ๋ช…์„ธ๋ฅผ ๊ตฌํ˜„ํ•œ ๋ถ€๋ถ„์„ ๊ทธ๋Œ€๋กœ ๊ฐ€์ ธ์™€์„œ ์—”์ง„์„ ๊ตฌ์ถ•ํ–ˆ๋‹ค๋Š” ๋ง์ด ๋œ๋‹ค. ๋‹ค๋งŒ Node.js ์—”์ง„๋„ console.log() ํ•จ์ˆ˜์™€ ๊ฐ™์€ ๋ช‡๋ช‡ Web API๋“ค์€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋„๋ก ์–ด๋А ์ •๋„ ํ™•์žฅ์„ฑ ์žˆ๊ฒŒ ๊ตฌ์ถ•๋ผ ์žˆ๊ธด ํ•˜๋‹ค.

๋ฐ˜์‘ํ˜•