--- id: wiki-2026-0508-virtual-dom title: Virtual DOM category: 10_Wiki/Topics status: needs_review canonical_id: self aliases: [] duplicate_of: none source_trust_level: A confidence_score: 0.92 tags: [uncategorized] raw_sources: [] last_reinforced: 2026-05-08 github_commit: pending inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08) tech_stack: language: unspecified framework: unspecified --- # [[Virtual DOM]] ## ๐Ÿ“Œ ํ•œ ์ค„ ํ†ต์ฐฐ (The Karpathy Summary) Virtual DOM(VDOM)์€ ๋ฉ”๋ชจ๋ฆฌ์— ์œ ์ง€๋˜๋Š” ๊ฐ€๋ณ๊ณ  ์ด์ƒ์ ์ธ UI์˜ ํ‘œํ˜„(๋ณดํ†ต React ์—˜๋ฆฌ๋จผํŠธ ํ˜•ํƒœ์˜ ๋‹จ์ˆœํ•œ [[JavaScript]] ๊ฐ์ฒด)์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค [1-3]. React์™€ ๊ฐ™์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์˜ํ•ด ์‹ค์ œ DOM๊ณผ ๋™๊ธฐํ™”๋˜๋ฉฐ, ์ด ๊ณผ์ •์„ '์žฌ์กฐ์ •([[Reconciliation]])'์ด๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค [1-3]. ์ด๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์ˆ˜๋™์œผ๋กœ DOM์„ ์—…๋ฐ์ดํŠธํ•˜๊ณ  ์†์„ฑ์„ ์กฐ์ž‘ํ•˜๋Š” ๋น„ํšจ์œจ์„ฑ์„ ์ถ”์ƒํ™”ํ•˜์—ฌ, ์„ ์–ธ์ ์ธ UI ๊ฐœ๋ฐœ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ํ•ต์‹ฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฐœ๋…์ž…๋‹ˆ๋‹ค [1, 3]. ## ๐Ÿ“– ๊ตฌ์กฐํ™”๋œ ์ง€์‹ (Synthesized Content) * **DOM ์กฐ์ž‘์˜ ๋น„ํšจ์œจ์„ฑ ํ•ด๊ฒฐ:** ์‹ค์ œ ๋ธŒ๋ผ์šฐ์ €์˜ DOM์„ ์ง์ ‘ ์ˆ˜์ •ํ•˜๋Š” ์ž‘์—…์€ ๋ณธ์งˆ์ ์œผ๋กœ ๋А๋ฆฝ๋‹ˆ๋‹ค. DOM ๋ณ€๊ฒฝ์€ ๋ธŒ๋ผ์šฐ์ €์˜ ์ค‘์š” ๋ Œ๋”๋ง ๊ฒฝ๋กœ([[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]. ## ๐Ÿ”— ์ง€์‹ ์—ฐ๊ฒฐ (Graph) - **Related Topics:** [[Reconciliation]], [[DOM]], [[Critical Rendering Path]], Reflow / Repaint, [[Fiber Architecture]] - **Projects/Contexts:** [[React Performance Optimization]] - **Contradictions/Notes:** - Virtual DOM์ด ์‹ค์ œ DOM์˜ ๋ถˆํ•„์š”ํ•œ ์—…๋ฐ์ดํŠธ๋ฅผ ๋ฐฉ์ง€ํ•˜์—ฌ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•˜์ง€๋งŒ, ์ด์ „ Virtual DOM๊ณผ ์ƒˆ๋กœ์šด Virtual DOM์„ ๋น„๊ตํ•˜๋Š” Diffing ์ž‘์—… ์ž์ฒด์— ๋น„์šฉ์ด ์ „ํ˜€ ์—†๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค [4]. ๋ฌด๋ถ„๋ณ„ํ•œ ๋ Œ๋”๋ง์ด ๋ฐœ์ƒํ•˜๋ฉด ์ด ๋น„๊ต ์ž‘์—… ์ž์ฒด๊ฐ€ ์ปดํ“จํŒ… ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. - ๊ตฌํ˜„์ƒ Virtual DOM ํŠธ๋ฆฌ๋Š” ์„ค๊ณ„์ ์œผ๋กœ ๋ถˆ๋ณ€์„ฑ(immutable)์„ ๋ ๋„๋ก ๋‹ค๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค [11]. --- *Last updated: 2026-04-25* ## ๐Ÿค– LLM ํ™œ์šฉ ํžŒํŠธ (How to Use This Knowledge) **์–ธ์ œ ์ด ์ง€์‹์„ ์“ฐ๋Š”๊ฐ€:** - *(TODO)* **์–ธ์ œ ์“ฐ๋ฉด ์•ˆ ๋˜๋Š”๊ฐ€:** - *(TODO)* ## ๐Ÿงช ๊ฒ€์ฆ ์ƒํƒœ (Validation) - **์ •๋ณด ์ƒํƒœ:** needs_review - **์ถœ์ฒ˜ ์‹ ๋ขฐ๋„:** A - **๊ฒ€ํ†  ์ด์œ :** *(P-Reinforce Phase 1 ์ž๋™ ์ •๊ทœํ™”. ๋ณธ๋ฌธ ๊ฒ€์ฆ ํ•„์š”.)* ## ๐Ÿงฌ ์ค‘๋ณต ๊ฒ€์‚ฌ (Duplicate Check) - **๊ธฐ์กด ์œ ์‚ฌ ๋ฌธ์„œ:** *(TODO: ์ธ๋ฑ์„œ ํด๋Ÿฌ์Šคํ„ฐ ๋ฆฌํฌํŠธ ์ฐธ์กฐ)* - **์ฒ˜๋ฆฌ ๋ฐฉ์‹:** UPDATE (์ž๋™ ์ •๊ทœํ™”) - **์ฒ˜๋ฆฌ ์ด์œ :** Phase 1 ์ •๊ทœํ™” โ€” ์˜› ํ…œํ”Œ๋ฆฟ/๋ˆ„๋ฝ ํ•„๋“œ ๋ณด๊ฐ•. ## โš ๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & Updates) - **๊ณผ๊ฑฐ ๋ฐ์ดํ„ฐ์™€์˜ ์ถฉ๋Œ:** ์—†์Œ - **์ •์ฑ… ๋ณ€ํ™”:** ์—†์Œ ## ๐Ÿ•“ ๋ณ€๊ฒฝ ์ด๋ ฅ (Changelog) | ๋‚ ์งœ | ๋ณ€๊ฒฝ ๋‚ด์šฉ | ์ฒ˜๋ฆฌ ๋ฐฉ์‹ | ์‹ ๋ขฐ๋„ | |------|-----------|-----------|--------| | 2026-05-08 | P-Reinforce Phase 1 ์ •๊ทœํ™” (frontmatter + ํ—ค๋” ํ‘œ์ค€ํ™”) | UPDATE | A | ## ๐Ÿ’ป ์ฝ”๋“œ ํŒจํ„ด (Code Patterns) **ํŒจํ„ด 1:** *(TODO: ์ด ํ”„๋กœ์ ํŠธ ์ปจ๋ฒค์…˜ ๋ฐ˜์˜ํ•œ ๊ตฌ์กฐ ์Šค์ผˆ๋ ˆํ†ค)* ```text # TODO ``` ## ๐Ÿค” ์˜์‚ฌ๊ฒฐ์ • ๊ธฐ์ค€ (Decision Criteria) **์„ ํƒ A๋ฅผ ์จ์•ผ ํ•  ๋•Œ:** - *(TODO)* **์„ ํƒ B๋ฅผ ์จ์•ผ ํ•  ๋•Œ:** - *(TODO)* **๊ธฐ๋ณธ๊ฐ’:** > *(TODO)* ## โŒ ์•ˆํ‹ฐํŒจํ„ด (Anti-Patterns) - **[์•ˆํ‹ฐํŒจํ„ด]:** *(TODO: ๋ฌด์—‡์„ ํ•˜๋ฉด ์•ˆ ๋˜๋Š”๊ฐ€ + ์ด์œ  + ๋Œ€์‹  ๋ฌด์—‡์„)*