--- category: Unified tags: [auto-consolidated, technical-documentation] title: [[Virtual DOM|Virtual DOM]] last_updated: 2026-05-02 --- # [[Virtual DOM|Virtual DOM]] ## ๐Ÿ“Œ Brief Summary Virtual DOM(VDOM)์€ ๋ฉ”๋ชจ๋ฆฌ์— ์œ ์ง€๋˜๋Š” ๊ฐ€๋ณ๊ณ  ์ด์ƒ์ ์ธ UI์˜ ํ‘œํ˜„(๋ณดํ†ต React ์—˜๋ฆฌ๋จผํŠธ ํ˜•ํƒœ์˜ ๋‹จ์ˆœํ•œ [[JavaScript|JavaScript]] ๊ฐ์ฒด)์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค [1-3]. React์™€ ๊ฐ™์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์˜ํ•ด ์‹ค์ œ DOM๊ณผ ๋™๊ธฐํ™”๋˜๋ฉฐ, ์ด ๊ณผ์ •์„ '์žฌ์กฐ์ •([[Reconciliation|Reconciliation]])'์ด๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค [1-3]. ์ด๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์ˆ˜๋™์œผ๋กœ DOM์„ ์—…๋ฐ์ดํŠธํ•˜๊ณ  ์†์„ฑ์„ ์กฐ์ž‘ํ•˜๋Š” ๋น„ํšจ์œจ์„ฑ์„ ์ถ”์ƒํ™”ํ•˜์—ฌ, ์„ ์–ธ์ ์ธ UI ๊ฐœ๋ฐœ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ํ•ต์‹ฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฐœ๋…์ž…๋‹ˆ๋‹ค [1, 3]. --- > ์‹ค์ œ DOM์„ ๋งค๋ฒˆ ์ง์ ‘ ์กฐ์ž‘ํ•˜๋Š” ๋Œ€์‹ , ๋ฉ”๋ชจ๋ฆฌ ์ƒ์— UI์˜ ๊ฐ€์ƒ ํ‘œํ˜„์„ ๊ตฌ์ถ•ํ•œ ๋’ค ์ด์ „ ์ƒํƒœ์™€ ๋น„๊ต(Diffing)ํ•˜์—ฌ ์‹ค์ œ ๋ณ€๊ฒฝ์ด ํ•„์š”ํ•œ ์ตœ์†Œํ•œ์˜ ๋ถ€๋ถ„๋งŒ DOM์— ๋ฐ˜์˜ํ•จ์œผ๋กœ์จ ๋ Œ๋”๋ง ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•˜๋Š” React์˜ ํ•ต์‹ฌ ์•„ํ‚คํ…์ฒ˜์ž…๋‹ˆ๋‹ค. ## ๐Ÿ“– Core Content * **DOM ์กฐ์ž‘์˜ ๋น„ํšจ์œจ์„ฑ ํ•ด๊ฒฐ:** ์‹ค์ œ ๋ธŒ๋ผ์šฐ์ €์˜ DOM์„ ์ง์ ‘ ์ˆ˜์ •ํ•˜๋Š” ์ž‘์—…์€ ๋ณธ์งˆ์ ์œผ๋กœ ๋А๋ฆฝ๋‹ˆ๋‹ค. DOM ๋ณ€๊ฒฝ์€ ๋ธŒ๋ผ์šฐ์ €์˜ ์ค‘์š” ๋ Œ๋”๋ง ๊ฒฝ๋กœ([[Critical Rendering Path|Critical Rendering Path]])์— ์žˆ๋Š” ๋ ˆ์ด์•„์›ƒ(Reflow)๊ณผ ํŽ˜์ธํŠธ(Repaint) ๋‹จ๊ณ„๋ฅผ ๋ฐ˜๋ณต์ ์œผ๋กœ ํŠธ๋ฆฌ๊ฑฐํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค [1]. ๋ณต์žกํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์—ฌ๋Ÿฌ ๋…ธ๋“œ๋ฅผ ๊ฐœ๋ณ„์ ์œผ๋กœ ์—…๋ฐ์ดํŠธํ•˜๋ฉด ๊ณผ๋„ํ•œ ์žฌ๊ณ„์‚ฐ์ด ๋ฐœ์ƒํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค [1]. Virtual DOM์€ ์‹ค์ œ DOM์ด ์—…๋ฐ์ดํŠธ๋  ํ•„์š”๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ๋ฅผ ๊ฑธ๋Ÿฌ๋‚ด์–ด, ์ด๋Ÿฌํ•œ ๋ฌด๊ฑฐ์šด ๋ Œ๋”๋ง ๊ณผ์ •์„ ์ตœ์†Œํ™”ํ•จ์œผ๋กœ์จ ๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง์„ ์ตœ์ ํ™”ํ•ฉ๋‹ˆ๋‹ค [1, 4]. * **์žฌ์กฐ์ •(Reconciliation)๊ณผ Diffing ์•Œ๊ณ ๋ฆฌ์ฆ˜:** ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด React๋Š” ๋ฉ”๋ชจ๋ฆฌ์ƒ์—์„œ ์ด์ „ ๋ฒ„์ „์˜ Virtual DOM๊ณผ ์ƒˆ๋กœ์šด Virtual DOM์„ ๋น„๊ต(diff)ํ•˜์—ฌ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ฐ์ง€ํ•ฉ๋‹ˆ๋‹ค [2, 5]. ๋‘ ํŠธ๋ฆฌ๋ฅผ ๋น„๊ตํ•˜๋Š” ์ผ๋ฐ˜์ ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ $O(n^3)$์˜ ๋ณต์žก๋„๋ฅผ ๊ฐ€์ง€์ง€๋งŒ, React๋Š” ์—˜๋ฆฌ๋จผํŠธ์˜ ํƒ€์ž…์ด ๋‹ค๋ฅด๋ฉด ํŠธ๋ฆฌ๋ฅผ ์ƒˆ๋กœ ๊ตฌ์ถ•ํ•˜๊ณ  ์ž์‹ ์š”์†Œ๋“ค์€ `key` ์†์„ฑ์„ ํ†ตํ•ด ์‹๋ณ„ํ•œ๋‹ค๋Š” ๋‘ ๊ฐ€์ง€ ๊ฐ€์ •์„ ๊ธฐ๋ฐ˜์œผ๋กœ $O(n)$ ๋ณต์žก๋„์˜ ํœด๋ฆฌ์Šคํ‹ฑ(heuristic) ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค [6-8]. ์ด๋ฅผ ํ†ตํ•ด ์‹ค์ œ DOM์„ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์ตœ์†Œํ•œ์˜ ์—ฐ์‚ฐ๋งŒ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค [1]. * **Virtual DOM์˜ ๋ฒ”์œ„์™€ ๊ตฌํ˜„์ฒด:** React ์„ธ๊ณ„์—์„œ Virtual DOM์€ ์ฃผ๋กœ UI๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” 'React ์—˜๋ฆฌ๋จผํŠธ' ๊ฐ์ฒด๋ฅผ ์ง€์นญํ•˜์ง€๋งŒ, React 16๋ถ€ํ„ฐ ๋„์ž…๋œ ์ƒˆ๋กœ์šด ์žฌ์กฐ์ • ์—”์ง„์ด์ž ์ปดํฌ๋„ŒํŠธ ํŠธ๋ฆฌ์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ๋‚ด๋ถ€ ๊ฐ์ฒด์ธ 'ํŒŒ์ด๋ฒ„(Fiber)' ์—ญ์‹œ Virtual DOM ๊ตฌํ˜„์˜ ์ผ๋ถ€๋กœ ๊ฐ„์ฃผ๋ฉ๋‹ˆ๋‹ค [9, 10]. * **Shadow DOM๊ณผ์˜ ์ฐจ์ด์ :** Virtual DOM์€ ์›น ์ปดํฌ๋„ŒํŠธ์˜ ๋ณ€์ˆ˜ ๋ฐ CSS ์Šค์ฝ”ํ•‘์„ ์œ„ํ•ด ์„ค๊ณ„๋œ ๋ธŒ๋ผ์šฐ์ € ๊ธฐ์ˆ ์ธ Shadow DOM๊ณผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. Virtual DOM์€ ๋ธŒ๋ผ์šฐ์ € API ์œ„์— JavaScript ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ†ตํ•ด ๊ตฌํ˜„๋œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฐœ๋…์ž…๋‹ˆ๋‹ค [9]. --- **1. ๊ฐ€์ƒ DOM์˜ ์ž‘๋™ ์›๋ฆฌ (๋””ํ•‘ ์•Œ๊ณ ๋ฆฌ์ฆ˜)** React๋Š” ๋ Œ๋”๋ง ์‹œ **์‹ค์ œ DOM์„ ์ง์ ‘ ์กฐ์ž‘ํ•˜์ง€ ์•Š๊ณ , UI๊ฐ€ ์–ด๋–ป๊ฒŒ ๋ณด์—ฌ์•ผ ํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ๊ฐ€์ƒ ํŠธ๋ฆฌ(Virtual Tree)๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ๊ตฌ์ถ•**ํ•ฉ๋‹ˆ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด ์ƒˆ๋กœ์šด ๊ฐ€์ƒ DOM์„ ์ƒ์„ฑํ•˜๊ณ , ์ด๋ฅผ ์‹ค์ œ DOM์˜ ๋ณต์‚ฌ๋ณธ ์—ญํ• ์„ ํ•˜๋Š” ์ด์ „ ๊ฐ€์ƒ DOM๊ณผ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค. ์ด ๋น„๊ต ๊ณผ์ •์„ ํ†ตํ•ด ๋‘ ํŠธ๋ฆฌ ๊ฐ„์˜ ์ฐจ์ด์ ์„ ์ฐพ์•„๋‚ด๊ณ , **์˜ค์ง ๋ณ€๊ฒฝ์ด ๋ฐœ์ƒํ•œ ๋…ธ๋“œ๋‚˜ ์†์„ฑ๋งŒ์„ ์‹ค์ œ DOM์— ์—…๋ฐ์ดํŠธ**ํ•˜์—ฌ ์—ฐ์‚ฐ ๊ณผ์ •์„ ๋” ๋น ๋ฅด๊ณ  ํšจ์œจ์ ์œผ๋กœ ๋งŒ๋“ญ๋‹ˆ๋‹ค. **2. ๋ Œ๋” ๋‹จ๊ณ„(Render Phase)์™€ ์ปค๋ฐ‹ ๋‹จ๊ณ„(Commit Phase)** ๊ฐ€์ƒ DOM์„ ํ™œ์šฉํ•œ ์—…๋ฐ์ดํŠธ๋Š” ๋ช…ํ™•ํžˆ ๋‘ ๋‹จ๊ณ„๋กœ ๋‚˜๋‰˜์–ด ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. - **๋ Œ๋” ๋‹จ๊ณ„:** React๊ฐ€ ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์ƒˆ๋กœ์šด ๊ฐ€์ƒ ํŠธ๋ฆฌ๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๊ณผ์ •์ž…๋‹ˆ๋‹ค. - **์ปค๋ฐ‹ ๋‹จ๊ณ„:** ๊ณ„์‚ฐ๋œ ์ตœ์†Œํ•œ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ๋“ค์„ ์‹ค์ œ DOM์— ์ ์šฉํ•˜๋Š” ๊ณผ์ •์ž…๋‹ˆ๋‹ค. **3. ์‹ค์ œ DOM ์กฐ์ž‘ ๋น„์šฉ์˜ ์ตœ์†Œํ™”** ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‹ค์ œ DOM์„ ์กฐ์ž‘ํ•˜๊ณ  ๋ ˆ์ด์•„์›ƒ์„ ๋‹ค์‹œ ๊ณ„์‚ฐํ•˜๋Š” ์ž‘์—…์€ ๋งค์šฐ ๋ฌด๊ฒ๊ณ  ๋น„์šฉ์ด ๋งŽ์ด ๋“ญ๋‹ˆ๋‹ค. ๊ฐ€์ƒ DOM์€ ์ด๋Ÿฌํ•œ ๊ฐ’๋น„์‹ผ DOM ์กฐ์ž‘ ํšŸ์ˆ˜๋ฅผ ์ตœ์†Œํ™”ํ•˜์—ฌ ์„ฑ๋Šฅ์„ ํฌ๊ฒŒ ๋†’์—ฌ์ค๋‹ˆ๋‹ค. **4. ๊ฐ€์ƒ DOM ์—ฐ์‚ฐ์˜ ํ•œ๊ณ„์™€ ์ฃผ์˜์ ** ๊ฐ€์ƒ DOM์ด ์‹ค์ œ DOM ์กฐ์ž‘ ๋น„์šฉ์„ ์ค„์—ฌ์ฃผ์ง€๋งŒ, ๊ฐ€์ƒ DOM์„ ์—…๋ฐ์ดํŠธํ•˜๋Š” ์—ฐ์‚ฐ ์ž์ฒด๋„ ๋น„์šฉ์ด ๋“ญ๋‹ˆ๋‹ค. ์ปดํฌ๋„ŒํŠธ ํŠธ๋ฆฌ๊ฐ€ ๋„ˆ๋ฌด ๊นŠ๊ฒŒ ์ค‘์ฒฉ๋˜์–ด ์žˆ๊ฑฐ๋‚˜, ๋ฌด์˜๋ฏธํ•œ ์ƒํƒœ ๋ณ€ํ™”๋กœ ์ธํ•ด ๋„ˆ๋ฌด ๋งŽ์€ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ๋ฆฌ๋ Œ๋”๋ง๋  ๊ฒฝ์šฐ ๊ฐ€์ƒ DOM ํŠธ๋ฆฌ ์ƒ์„ฑ ๋ฐ ๋น„๊ต ๊ณผ์ •์—์„œ ์„ฑ๋Šฅ ๋ณ‘๋ชฉ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ## โš–๏ธ Trade-offs & Caveats - **๊ณผ๊ฑฐ ๋ฐ์ดํ„ฐ์™€์˜ ์ถฉ๋Œ:** ์ž๋™ํ™” ์—”์ง„์— ์˜ํ•ด ๋งคํ•‘๋œ ์ง€์‹์œผ๋กœ, ์ถ”ํ›„ ์ •๋ฐ€ ๊ฒ€์ฆ ํ•„์š”. - **์ •์ฑ… ๋ณ€ํ™”:** Design & Experience ๋ถ„์•ผ์˜ ์ž๋™ ์ž์‚ฐํ™” ์ˆ˜ํ–‰. ## ๐Ÿ”— Knowledge Connections - **Related Topics:** [[Reconciliation|Reconciliation]], DOM, Critical Rendering Path, Reflow / Repaint, [[Fiber Architecture|Fiber Architecture]] - **Projects/Contexts:** [[React Performance Optimization|React Performance Optimization]] - **Contradictions/Notes:** - Virtual DOM์ด ์‹ค์ œ DOM์˜ ๋ถˆํ•„์š”ํ•œ ์—…๋ฐ์ดํŠธ๋ฅผ ๋ฐฉ์ง€ํ•˜์—ฌ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•˜์ง€๋งŒ, ์ด์ „ Virtual DOM๊ณผ ์ƒˆ๋กœ์šด Virtual DOM์„ ๋น„๊ตํ•˜๋Š” Diffing ์ž‘์—… ์ž์ฒด์— ๋น„์šฉ์ด ์ „ํ˜€ ์—†๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค [4]. ๋ฌด๋ถ„๋ณ„ํ•œ ๋ Œ๋”๋ง์ด ๋ฐœ์ƒํ•˜๋ฉด ์ด ๋น„๊ต ์ž‘์—… ์ž์ฒด๊ฐ€ ์ปดํ“จํŒ… ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. - ๊ตฌํ˜„์ƒ Virtual DOM ํŠธ๋ฆฌ๋Š” ์„ค๊ณ„์ ์œผ๋กœ ๋ถˆ๋ณ€์„ฑ(immutable)์„ ๋ ๋„๋ก ๋‹ค๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค [11]. --- *Last updated: 2026-04-25* --- - **Related Topics:** [[แ„Œแ…ขแ„Œแ…ฉแ„Œแ…ฅแ†ผ (Reconciliation)|์žฌ์กฐ์ • (Reconciliation]], React Performance Optimization, [[แ„‡แ…ฎแ†ฏแ„‘แ…ตแ†ฏแ„‹แ…ญแ„’แ…กแ†ซ แ„…แ…ตแ„…แ…ฆแ†ซแ„ƒแ…ฅแ„…แ…ตแ†ผ แ„‡แ…กแ†ผแ„Œแ…ต|๋ถˆํ•„์š”ํ•œ ๋ฆฌ๋ Œ๋”๋ง ๋ฐฉ์ง€]] - **Projects/Contexts:** [[แ„ƒแ…ขแ„€แ…ฒแ„†แ…ฉ แ„ƒแ…ฆแ„‹แ…ตแ„แ…ฅ แ„…แ…ฆแ†ซแ„ƒแ…ฅแ„…แ…ตแ†ผ แ„†แ…ตแ†พ แ„€แ…กแ„‰แ…กแ†ผแ„’แ…ช แ„Žแ…ฌแ„Œแ…ฅแ†จแ„’แ…ช|๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ ๋ Œ๋”๋ง ๋ฐ ๊ฐ€์ƒํ™” ์ตœ์ ํ™”]], ๊ณ ์„ฑ๋Šฅ ์‹ค์‹œ๊ฐ„ ์ƒํ˜ธ์ž‘์šฉ ์‹œ์Šคํ…œ์„ ์œ„ํ•œ React ๊ธฐ๋ฐ˜ ๊ฒŒ์ž„ ์—”์ง„ ์•„ํ‚คํ…์ฒ˜ - **Contradictions/Notes:** ๊ฐ€์ƒ DOM๊ณผ ์žฌ์กฐ์ • ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์ผ๋ฐ˜์ ์ธ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„ ์–ธ์  UI ๊ด€๋ฆฌ์—๋Š” ์••๋„์ ์œผ๋กœ ํ›Œ๋ฅญํ•˜์ง€๋งŒ, ๋งค ํ”„๋ ˆ์ž„ ์ˆ˜๋งŒ ๊ฐœ์˜ ์†์„ฑ์ด ๋ณ€ํ•ด์•ผ ํ•˜๋Š” 3D ๊ฒŒ์ž„์ด๋‚˜ ๋ฌด๊ฑฐ์šด ์• ๋‹ˆ๋ฉ”์ด์…˜ ํ™˜๊ฒฝ์—์„œ๋Š” ์˜คํžˆ๋ ค ๊ฐ€์ƒ DOM์„ ๋น„๊ตํ•˜๋Š” $O(n)$ ์—ฐ์‚ฐ ์ž์ฒด๊ฐ€ ํ”„๋ ˆ์ž„ ์ €ํ•˜(Lag)๋ฅผ ์œ ๋ฐœํ•˜๋Š” ์น˜๋ช…์ ์ธ ์›์ธ์ด ๋ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํŠน์ˆ˜ ํ™˜๊ฒฝ์—์„œ๋Š” ๊ฐ€์ƒ DOM์„ ์šฐํšŒํ•˜์—ฌ ์ฐธ์กฐ(`ref`)๋ฅผ ํ†ตํ•œ **๋ช…๋ นํ˜• ์ง์ ‘ ์กฐ์ž‘(Imperative Manipulation)**์„ ์‚ฌ์šฉํ•ด์•ผ๋งŒ 60FPS๋ฅผ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. --- _Last updated: 2026-04-15_ ---