--- id: P-REINFORCE-AUTO-181AC7 category: "[[10_Wiki/πŸ’‘ Topics/Design & Experience]]" confidence_score: 0.90 tags: [auto-reinforced] last_reinforced: 2026-04-20 github_commit: "[P-Reinforce] Continuous Worker - 가상 DOM (Virtual DOM)" --- # [[가상 DOM (Virtual DOM)]] ## πŸ“Œ ν•œ 쀄 톡찰 (The Karpathy Summary) > μ‹€μ œ DOM을 맀번 직접 μ‘°μž‘ν•˜λŠ” λŒ€μ‹ , λ©”λͺ¨λ¦¬ 상에 UI의 가상 ν‘œν˜„μ„ κ΅¬μΆ•ν•œ λ’€ 이전 μƒνƒœμ™€ 비ꡐ(Diffing)ν•˜μ—¬ μ‹€μ œ 변경이 ν•„μš”ν•œ μ΅œμ†Œν•œμ˜ λΆ€λΆ„λ§Œ DOM에 λ°˜μ˜ν•¨μœΌλ‘œμ¨ λ Œλ”λ§ μ„±λŠ₯을 μ΅œμ ν™”ν•˜λŠ” React의 핡심 μ•„ν‚€ν…μ²˜μž…λ‹ˆλ‹€. ## πŸ“– κ΅¬μ‘°ν™”λœ 지식 (Synthesized Content) **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 트리 생성 및 비ꡐ κ³Όμ •μ—μ„œ μ„±λŠ₯ 병λͺ©μ΄ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€. ## ⚠️ λͺ¨μˆœ 및 μ—…λ°μ΄νŠΈ (Contradictions & RL Update) - **κ³Όκ±° λ°μ΄ν„°μ™€μ˜ 좩돌:** μžλ™ν™” 엔진에 μ˜ν•΄ λ§€ν•‘λœ μ§€μ‹μœΌλ‘œ, μΆ”ν›„ μ •λ°€ 검증 ν•„μš”. - **μ •μ±… λ³€ν™”:** Design & Experience λΆ„μ•Όμ˜ μžλ™ μžμ‚°ν™” μˆ˜ν–‰. ## πŸ”— 지식 μ—°κ²° (Graph) - **Related Topics:** [[μž¬μ‘°μ • (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_ - Raw Source: [[00_Raw/2026-04-20/가상 DOM (Virtual DOM).md]] ---