# [[DOM]] ## ๐Ÿ“Œ Brief Summary DOM(Document Object Model)์€ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ˆ˜์‹ ํ•œ HTML ๋ฌธ์„œ๋ฅผ ๊ตฌ๋ฌธ ๋ถ„์„ํ•˜์—ฌ ๊ตฌ์„ฑํ•˜๋Š” ๋ฌธ์„œ์˜ ๊ตฌ์กฐ์™€ ์ฝ˜ํ…์ธ ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ณ„์ธต์  ํŠธ๋ฆฌ ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค [1-3]. ์ด๋Š” ๋ธŒ๋ผ์šฐ์ €์˜ ๋ Œ๋”๋ง ๊ณผ์ •์ธ ํฌ๋ฆฌํ‹ฐ์ปฌ ๋ Œ๋”๋ง ํŒจ์Šค(CRP)์—์„œ CSSOM๊ณผ ๊ฒฐํ•ฉํ•˜์—ฌ ํ™”๋ฉด์— ๊ทธ๋ ค์งˆ ๋ Œ๋” ํŠธ๋ฆฌ(Render Tree)๋ฅผ ์ƒ์„ฑํ•˜๋Š” ํ•ต์‹ฌ ๊ธฐ์ดˆ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค [4-6]. JavaScript๋ฅผ ํ†ตํ•œ ์ง์ ‘์ ์ธ DOM ์กฐ์ž‘์€ ๋ ˆ์ด์•„์›ƒ(Reflow)๊ณผ ํŽ˜์ธํŠธ ์ž‘์—…์„ ์œ ๋ฐœํ•ด ์„ฑ๋Šฅ์„ ์ €ํ•˜์‹œํ‚ค๋ฏ€๋กœ, ์ตœ์‹  ํ”„๋ ˆ์ž„์›Œํฌ์ธ React๋Š” ์ด๋ฅผ ์ตœ์ ํ™”ํ•˜๊ธฐ ์œ„ํ•ด Virtual DOM์„ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค [7]. ## ๐Ÿ“– Core Content * **DOM ํŠธ๋ฆฌ์˜ ์ ์ง„์  ๊ตฌ์ถ•:** ๋ธŒ๋ผ์šฐ์ €๋Š” HTML ์‘๋‹ต์„ ๋ฐ›์œผ๋ฉด ๋ฐ”์ดํŠธ(bytes)๋ฅผ ๋ฌธ์ž, ํ† ํฐ(token), ๋…ธ๋“œ(node)๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •์„ ๊ฑฐ์ณ DOM ํŠธ๋ฆฌ๋ฅผ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค [3, 8, 9]. HTML์˜ ์‹œ์ž‘ ํƒœ๊ทธ์™€ ์ข…๋ฃŒ ํƒœ๊ทธ๋Š” ๋…ธ๋“œ ๊ฐ„์˜ ๋ถ€๋ชจ, ์ž์‹, ํ˜•์ œ ๊ด€๊ณ„์™€ ๊ฐ™์€ ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ์ •์˜ํ•˜๋ฉฐ, `` ์š”์†Œ๊ฐ€ ๋ฌธ์„œ ํŠธ๋ฆฌ์˜ ๋ฃจํŠธ ๋…ธ๋“œ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค [3, 9]. DOM์˜ ๊ตฌ์ถ•์€ ์ ์ง„์ (incremental)์œผ๋กœ ์ด๋ฃจ์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์—, ๋ธŒ๋ผ์šฐ์ €๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์‹ ํ•˜๋Š” ๋„์ค‘์—๋„ ํŠธ๋ฆฌ๋ฅผ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [8, 9]. * **๋ Œ๋” ํŠธ๋ฆฌ(Render Tree)์˜ ํ˜•์„ฑ:** DOM์€ ํŽ˜์ด์ง€์˜ '์ฝ˜ํ…์ธ '๋ฅผ ๋‹ด๊ณ  ์žˆ์œผ๋ฉฐ, ํŽ˜์ด์ง€์˜ '์Šคํƒ€์ผ'์„ ๋‹ด๊ณ  ์žˆ๋Š” CSSOM(CSS Object Model)๊ณผ ๊ฒฐํ•ฉํ•˜์—ฌ ๋ Œ๋” ํŠธ๋ฆฌ๋ฅผ ์™„์„ฑํ•ฉ๋‹ˆ๋‹ค [5, 6, 10, 11]. ์ด ๋ Œ๋” ํŠธ๋ฆฌ๋Š” ํ™”๋ฉด์— ์‹ค์ œ๋กœ ๊ทธ๋ ค์ง€๋Š” ๊ฐ€์‹œ์ ์ธ ๋…ธ๋“œ๋งŒ์„ ํฌํ•จํ•˜๋ฉฐ, `` ํƒœ๊ทธ๋‚˜ `display: none` ์Šคํƒ€์ผ์ด ์ ์šฉ๋œ DOM ๋…ธ๋“œ๋Š” ๋ Œ๋” ํŠธ๋ฆฌ์— ํฌํ•จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค [4, 5, 12, 13]. * **DOM ์กฐ์ž‘๊ณผ ๋ Œ๋”๋ง ์„ฑ๋Šฅ(Reflow & Repaint):** DOM ๋…ธ๋“œ์˜ ์ˆ˜๊ฐ€ ๋งŽ๊ณ  ๊นŠ์ด๊ฐ€ ๊นŠ์„์ˆ˜๋ก ๋ ˆ์ด์•„์›ƒ ๋ฐ ํŽ˜์ธํŠธ์™€ ๊ฐ™์€ ํ›„์† ๋ Œ๋”๋ง ๋‹จ๊ณ„์— ๊ฑธ๋ฆฌ๋Š” ์—ฐ์‚ฐ ๋ถ€๋‹ด์ด ํฌ๊ฒŒ ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค [2, 3, 10, 14]. ๋˜ํ•œ, JavaScript๋กœ DOM์˜ ๊ตฌ์กฐ๋ฅผ ์ถ”๊ฐ€/์‚ญ์ œํ•˜๊ฑฐ๋‚˜ ํฌ๊ธฐ, ์œ„์น˜ ์†์„ฑ์„ ๋ณ€๊ฒฝํ•˜๋ฉด ๋ธŒ๋ผ์šฐ์ €๋Š” ํ™”๋ฉด์˜ ๋ ˆ์ด์•„์›ƒ์„ ๋‹ค์‹œ ๊ณ„์‚ฐํ•˜๋Š” Reflow(๋˜๋Š” Layout)๋ฅผ ์‹คํ–‰ํ•˜๊ณ , ์ด์–ด ํ”ฝ์…€์„ ๋‹ค์‹œ ๊ทธ๋ฆฌ๋Š” Repaint ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์น˜๊ฒŒ ๋˜์–ด ๋ง‰๋Œ€ํ•œ ์—ฐ์‚ฐ ๋น„์šฉ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค [7, 14-17]. * **์„ฑ๋Šฅ ์ตœ์ ํ™” ๋ฐ ์ ‘๊ทผ ์ตœ์†Œํ™” ๋ฐฉ๋ฒ•:** DOM ์กฐ์ž‘์œผ๋กœ ์ธํ•œ ์„ฑ๋Šฅ ์ €ํ•˜๋ฅผ ๋ง‰๊ธฐ ์œ„ํ•ด DOM ๋…ธ๋“œ๋‚˜ ์†์„ฑ๊ฐ’์„ ๋ณ€์ˆ˜์— ์บ์‹ฑ(Caching)ํ•˜์—ฌ ์žฌ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜, ์—ฐ์‚ฐ์„ ๋ฐ˜๋ณต๋ฌธ ์™ธ๋ถ€๋กœ ๋นผ๋‚ด์–ด DOM ์ƒํ˜ธ์ž‘์šฉ ํšŸ์ˆ˜๋ฅผ ์ตœ์†Œํ™”ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [18, 19]. ํŠนํžˆ, DOM ๊ฐ’์„ ์ฝ๋Š” ์ž‘์—…(Phase 1)๊ณผ ์ˆ˜์ •ํ•˜๋Š” ์ž‘์—…(Phase 2)์„ ๊ต์ฐจ๋กœ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ ˆ์ด์•„์›ƒ ์Šค๋ž˜์‹ฑ(Layout thrashing)์„ ๋ฐฉ์ง€ํ•˜๋„๋ก ์ฝ”๋“œ๋ฅผ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค [19-21]. * **React์˜ Virtual DOM ๋„์ž… ๋ฐฐ๊ฒฝ:** ์œ„์™€ ๊ฐ™์€ ์ง์ ‘์ ์ธ DOM ์กฐ์ž‘์˜ ๋น„ํšจ์œจ์„ฑ์„ ๊ทน๋ณตํ•˜๊ธฐ ์œ„ํ•ด React๋Š” ๋ฉ”๋ชจ๋ฆฌ์ƒ์— ์กด์žฌํ•˜๋Š” ๊ฐ€๋ฒผ์šด ๋ณต์‚ฌ๋ณธ์ธ Virtual DOM(VDOM)์„ ๋„์ž…ํ–ˆ์Šต๋‹ˆ๋‹ค [7, 22]. ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด React๋Š” ์ƒˆ๋กœ์šด Virtual DOM์„ ์ƒ์„ฑํ•˜๊ณ  ์ด์ „๊ณผ ๋น„๊ต(Diffing/Reconciliation)ํ•˜์—ฌ ๋ณ€๊ฒฝ๋œ ์ตœ์†Œํ•œ์˜ ๋ถ€๋ถ„๋งŒ์„ ์‹ค์ œ DOM์— ๋ฐ˜์˜ํ•จ์œผ๋กœ์จ ๋ Œ๋”๋ง ์„ฑ๋Šฅ์„ ๊ทน๋Œ€ํ™”ํ•ฉ๋‹ˆ๋‹ค [7, 22, 23]. ## ๐Ÿ”— Knowledge Connections - **Related Topics:** [[Virtual DOM]], [[CSSOM]], [[Render Tree]], [[Reflow ๋ฐ Repaint]], [[Critical Rendering Path (CRP)]] - **Projects/Contexts:** [[React ๋ Œ๋”๋ง ์ตœ์ ํ™”]], [[๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง ๊ณผ์ •]], [[์›น ์„ฑ๋Šฅ ๊ฐ€์ด๋“œ(Web Performance)]] - **Contradictions/Notes:** DOM์˜ ๊ตฌ์ถ•์€ HTML ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์‹ ํ•จ๊ณผ ๋™์‹œ์— '์ ์ง„์ (incremental)'์œผ๋กœ ์ด๋ฃจ์–ด์ง€๋ฉฐ ๋ Œ๋”๋ง์„ ์ฐจ๋‹จํ•˜์ง€ ์•Š๋Š” ๋ฐ˜๋ฉด, ์Šคํƒ€์ผ์„ ์ •์˜ํ•˜๋Š” CSSOM์˜ ๊ตฌ์ถ•์€ ํ›„์† ๊ทœ์น™์ด ์ด์ „ ๊ทœ์น™์„ ๋ฎ์–ด์“ธ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์™„์ „ํžˆ ๊ตฌ๋ฌธ ๋ถ„์„๋  ๋•Œ๊นŒ์ง€ ๋ Œ๋”๋ง์„ ์ฐจ๋‹จ(render-blocking)ํ•œ๋‹ค๋Š” ์ ์—์„œ ์ž‘๋™ ๋ฐฉ์‹์˜ ์ฐจ์ด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค [2, 8-10]. --- *Last updated: 2026-04-25*