DOM๊ณผ Virtual DOM

nevermindยท2022๋…„ 12์›” 1์ผ
0

๊ธฐ์ˆ ๋ฉด์ ‘

๋ชฉ๋ก ๋ณด๊ธฐ
7/25

๐Ÿงฑ ์›น ํŽ˜์ด์ง€๊ฐ€ ๋งŒ๋“ค์–ด์ง€๋Š” ๊ณผ์ •

  1. ์›น๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์›๋ณธ HTML ๋ฌธ์„œ๋ฅผ ์ฝ๊ณ  ํŒŒ์‹ฑํ•˜์—ฌ ์ตœ์ข…์ ์œผ๋กœ ์–ด๋–ค ๋‚ด์šฉ์„ ํŽ˜์ด์ง€์— ๋žœ๋”๋งํ• ์ง€ ๊ฒฐ์ •(๋žœ๋”ํŠธ๋ฆฌ ์ƒ์„ฑ)
  2. ๋ธŒ๋ผ์šฐ์ €๋Š” ํ•ด๋‹น ๋žœ๋”๋ง์„ ์ˆ˜ํ–‰


์—ฌ๊ธฐ์„œ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋žœ๋”ํŠธ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ๋‘๊ฐœ์˜ ๋ชจ๋ธ์ด ํ•„์š”ํ•˜๋‹ค

  • DOM(Document Object Model) โ€“ HTML ์š”์†Œ๋“ค์˜ ๊ตฌ์กฐํ™”๋œ ํ‘œํ˜„
  • CSSOM(Cascading Style Sheets Object Model) โ€“ ์š”์†Œ๋“ค๊ณผ ์—ฐ๊ด€๋œ ์Šคํƒ€์ผ ์ •๋ณด์˜ ๊ตฌ์กฐํ™”๋œ ํ‘œํ˜„

๊ทธ์ค‘ DOM์— ๋Œ€ํ•ด ์ •๋ฆฌํ•ด๋ณด๊ณ  ๊ฐ€์ƒ DOM๊ณผ ๋น„๊ตํ•ด๋ณด๊ณ ์ž ํ•œ๋‹ค

๐Ÿ—จ DOM

  • DOM(Document Object Model): ๋ฌธ์„œ ๊ฐ์ฒด ๋ชจ๋ธ
  • ์›๋ณธ HTML๋ฌธ์„œ์˜ ๊ฐ์ฒด ๊ธฐ๋ฐ˜ ํ‘œํ˜„๋ฐฉ์‹์œผ๋กœ ๋‹จ์ˆœ ํ…์ŠคํŠธ๋กœ ๊ตฌ์„ฑ๋œ HTML ๋ฌธ์„œ์˜ ๋‚ด์šฉ๊ณผ ๊ตฌ์กฐ๊ฐ€ ๊ฐ์ฒด ๋ชจ๋ธ๋กœ ๋ณ€ํ™˜๋˜๋Š” ๊ฒƒ
    • ๋ทฐ ํฌํŠธ์— ๋ฌด์—‡์„ ๋žœ๋”๋งํ• ์ง€ ๊ฒฐ์ •ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ
    • ํŽ˜์ด์ง€์˜ ์ฝ˜ํ…์ธ  ๋ฐ ๊ตฌ์กฐ, ์Šคํƒ€์ผ์ด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ”„๋กœ๊ทธ๋žจ์— ์˜ํ•ด ์ˆ˜์ •๋˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋จ
  • DOM์˜ ๊ฐœ์ฒด๊ตฌ์กฐ๋Š” ๋…ธ๋“œ ํŠธ๋ฆฌ๋กœ ํ‘œํ˜„ (๋ถ€๋ชจ ์ค„๊ธฐ, ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ž์‹ ๋‚˜๋ญ‡๊ฐ€์ง€)

๐Ÿ“ข Virtual DOM์ด ํ•„์š”ํ•œ ์ด์œ 

  • Browser Rendering
  • HTML์„ ํŒŒ์‹ฑํ•˜์—ฌ DOM Tree ์ƒ์„ฑ, CSS ํŒŒ์‹ฑํ•˜์—ฌ ์Šคํƒ€์ผ ๊ทœ์น™์„ ์ƒ์„ฑ
  • Attachment ๊ณผ์ •์„ ํ†ตํ•ด Render Tree์ƒ์„ฑํ•˜์—ฌ ๋ฐฐ์น˜(Layout), ํ™”๋ฉด์— ๊ทธ๋ฆฌ๊ธฐ(Painting)

=> DOM์„ ์ˆ˜์ •ํ•  ๋•Œ๋งˆ๋‹ค ๋žœ๋” ์—”์ง„์ด ์œ„์™€ ๊ฐ™์ด ๋ณต์žกํ•œ ๊ณผ์ •์„ ๊ฑฐ์น˜๊ฒŒ ๋œ๋‹ค. ์›นํŽ˜์ด์ง€๊ฐ€ ์ปค์ง€๊ณ  ๋‹ค๋ค„์•ผํ•  ๋ฐ์ดํ„ฐ๋“ค์ด ๋งŽ์•„์ง€๊ณ  ๋ณ€๊ฒฝํ•ด์•ผํ•  ๊ฐ’๋“ค์ด ๋งŽ์•„์ง„๋‹ค๋ฉด ์„ฑ๋Šฅ๊ณผ ์†๋„์— ์˜ํ–ฅ์„ ์ฃผ๊ฒŒ ๋  ๊ฒƒ์ด๋‹ค. ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด Virtual DOM์ด ๋“ฑ์žฅ!

โšก Virtual DOM

  • ๊ฐ€์ƒ DOM์€ ์‹ค์ œ DOM์˜ ๋ณต์‚ฌ๋ณธ
  • ๊ฐ€์ƒ DOM์€ DOM์„ ๊ฐ€๋ณ๊ฒŒ ๋งŒ๋“  javascript ํ‘œํ˜„
  • ์ฃผ๋กœ React, Vue.js, Elm์— ์‚ฌ์šฉ๋จ
  • ๊ฐ€์ƒ DOM์€ ์‹ค์ œ๋กœ ์Šคํฌ๋ฆฐ์— ๋žœ๋”๋ง ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๊ธฐ์— DOM์„ ์ง์ ‘ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ์ƒ๋Œ€์ ์œผ๋กœ ๋น ๋ฆ„
  • ๊ฐ€์ƒ DOM์€ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ €์žฅ, ์ €์žฅ๋œ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ๋ฏธ๋ฆฌ ์ฒ˜๋ฆฌํ•˜๊ณ  ์ €์žฅํ•œ ํ›„ ์‹ค์ œ DOM๊ณผ ๋™๊ธฐํ™”ํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ


  • ๋ฐ์ดํ„ฐ๊ฐ€ ์—…๋ฐ์ดํŠธ ๋˜์—ˆ์„ ๋•Œ ์ „์ฒด UI๊ฐ€ ๊ฐ€์ƒ DOM์—์„œ ๋ฆฌ๋žœ๋”๋ง ๋˜๊ณ  ์‹ค์ œ DOM๊ณผ ์ฐจ์ด๋ฅผ ๊ณ„์‚ฐ ํ›„ ๋ณ€๊ฒฝ ๋ถ€๋ถ„๋งŒ ๋ณ€ํ™”์‹œํ‚ด

*์•„๋ž˜ ์ถœ์ฒ˜ ๋ธ”๋กœ๊ทธ ์ฐธ์กฐ

๐Ÿฃ ์˜ค๋Š˜ ์ •๋ฆฌํ•œ ๊ฒƒ ์ค‘ ์‹ค์ œ ๋ฉด์ ‘์—์„œ ๋‚˜์™”๋˜ ์งˆ๋ฌธ

  • ํŒŒ์‹ฑ์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€์š”
    - ์–ด๋–ค ํŽ˜์ด์ง€์—์„œ ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ํŠน์ • ํŒจํ„ด์ด๋‚˜ ์ˆœ์„œ๋กœ ์ถ”์ถœํ•ด์„œ ๊ฐ€๊ณตํ•˜๋Š” ๊ฒƒ์„ ๋งํ•ฉ๋‹ˆ๋‹ค.
    - xml, html ๋“ฑ์—์„œ ๊ตฌ์กฐํ™”๋œ ๋ฌธ์ž์—ด์„ ๋ฐ์ดํ„ฐํ™” ํ•˜๋Š” ๊ฒƒ์„ ๋งํ•ฉ๋‹ˆ๋‹ค
    - ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„ํ•ด ๋ถ„์„ํ•˜์—ฌ ์›ํ•˜๋Š” ํ˜•ํƒœ๋กœ ์กฐ๋ฆฝํ•˜๊ณ  ๋‹ค์‹œ ๋นผ๋‚ด๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ๋งํ•ฉ๋‹ˆ๋‹ค.
    => ์ฆ‰, ๊ตฌ์กฐํ™”๋œ ๋ฌธ์ž์—ด์„ ๋ฐ์ดํ„ฐํ™”ํ•˜์—ฌ ์›ํ•˜๋Š” ํ˜•ํƒœ๋กœ ์กฐ๋ฆฝํ•˜๊ณ  ๋นผ๋‚ด๋Š” ์ž‘์—…์„ ๋งํ•ฉ๋‹ˆ๋‹ค.

  • DOM์€ ๋ฌด์—‡์ธ๊ฐ€์š”?
    - ํ…์ŠคํŠธ ๋ฌธ์„œ์ธ HTML์„ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด๊ฐ€ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ฐ์ฒด ๋ชจ๋ธ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ์„ ๋งํ•ฉ๋‹ˆ๋‹ค.
    - DOM์€ ๋…ธ๋“œ ํŠธ๋ฆฌ ํ˜•์‹์œผ๋กœ ๋ถ€๋ชจ ์ค„๊ธฐ์—์„œ ์ž์‹ ๊ฐ€์ง€๋กœ ๋ป—์–ด๋‚˜๊ฐ€๋Š” ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค

์ถœ์ฒ˜: https://wit.nts-corp.com/2019/02/14/5522
https://velog.io/@kja/Virtual-DOM
https://doqtqu.tistory.com/316
https://kingpodo.tistory.com/8

profile
winwin

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