# [[Reconciliation|Reconciliation]] ## πŸ“Œ Brief Summary Reconciliation(μž¬μ‘°μ •)은 Reactκ°€ λ©”λͺ¨λ¦¬μ— μœ μ§€λ˜λŠ” 가상 DOM([[Virtual DOM|Virtual DOM]])κ³Ό λΈŒλΌμš°μ €μ˜ μ‹€μ œ DOM을 λ™κΈ°ν™”ν•˜μ—¬ UIλ₯Ό κ°€μž₯ 효율적으둜 μ—…λ°μ΄νŠΈν•˜λŠ” κ³Όμ •μž…λ‹ˆλ‹€ [1, 2]. ReactλŠ” μš”μ†Œμ˜ νƒ€μž…κ³Ό `key` 속성에 κΈ°λ°˜ν•œ $O(n)$ λ³΅μž‘λ„μ˜ νœ΄λ¦¬μŠ€ν‹± Diffing(비ꡐ) μ•Œκ³ λ¦¬μ¦˜μ„ μ‚¬μš©ν•˜μ—¬ 전톡적인 트리 비ꡐ μ•Œκ³ λ¦¬μ¦˜μ˜ λΉ„νš¨μœ¨μ„±μ„ κ·Ήλ³΅ν•©λ‹ˆλ‹€ [1, 3]. 이λ₯Ό 톡해 DOM에 λŒ€ν•œ λΆˆν•„μš”ν•œ μˆ˜μ •κ³Ό λΈŒλΌμš°μ €μ˜ λ¦¬ν”Œλ‘œμš°(Reflow)/리페인트(Repaint)λ₯Ό μ΅œμ†Œν™”ν•˜λ©°, "Reactκ°€ λΉ λ₯Έ 이유"λ₯Ό μ„€λͺ…ν•˜λŠ” 핡심적인 λ©”μ»€λ‹ˆμ¦˜μž…λ‹ˆλ‹€ [3, 4]. ## πŸ“– Core Content * **가상 DOM(Virtual DOM)κ³Ό μž¬μ‘°μ •μ˜ ν•„μš”μ„±**: λΈŒλΌμš°μ €μ˜ DOM을 직접 μˆ˜μ •ν•˜λŠ” μž‘μ—…μ€ [[Critical Rendering Path|Critical Rendering Path]] μƒμ˜ λ ˆμ΄μ•„μ›ƒ(Reflow)κ³Ό 페인트 단계λ₯Ό νŠΈλ¦¬κ±°ν•˜λ―€λ‘œ 본질적으둜 μ„±λŠ₯ λΉ„μš©μ΄ λ†’μŠ΅λ‹ˆλ‹€ [4, 5]. ReactλŠ” κ°œλ°œμžκ°€ μ„ μ–Έμ μœΌλ‘œ UI μƒνƒœλ₯Ό λ¬˜μ‚¬ν•˜λ©΄ λ‚΄λΆ€μ μœΌλ‘œ κ°€λ²Όμš΄ 가상 DOM 트리λ₯Ό κ΅¬μΆ•ν•˜κ³ , μƒνƒœλ‚˜ props λ³€κ²½ μ‹œ 이전 νŠΈλ¦¬μ™€ μƒˆλ‘œμš΄ 트리λ₯Ό 비ꡐ(Diff)ν•˜μ—¬ λ³€κ²½λœ μ΅œμ†Œν•œμ˜ λΆ€λΆ„λ§Œ μ‹€μ œ DOM에 반영(Patch)ν•©λ‹ˆλ‹€ [2, 4, 5]. * **νœ΄λ¦¬μŠ€ν‹± Diffing μ•Œκ³ λ¦¬μ¦˜ ($O(n)$ μ΅œμ ν™”)**: 두 트리λ₯Ό μ™„λ²½ν•˜κ²Œ λΉ„κ΅ν•˜λŠ” 일반적인 μ•Œκ³ λ¦¬μ¦˜μ€ $O(n^3)$의 μ‹œκ°„ λ³΅μž‘λ„λ₯Ό κ°€μ Έ λŒ€κ·œλͺ¨ λ Œλ”λ§μ— μ‚¬μš©ν•  수 μ—†μŠ΅λ‹ˆλ‹€(1,000개 μš”μ†Œ 비ꡐ μ‹œ μ•½ 10μ–΅ 번의 μ—°μ‚° ν•„μš”) [1, 3]. λ”°λΌμ„œ ReactλŠ” λ‹€μŒ 두 κ°€μ§€ κ°•λ ₯ν•œ 가정을 톡해 이λ₯Ό $O(n)$으둜 μ΅œμ ν™”ν–ˆμŠ΅λ‹ˆλ‹€ [3, 6]: 1. **μ„œλ‘œ λ‹€λ₯Έ νƒ€μž…μ˜ μ—˜λ¦¬λ¨ΌνŠΈλŠ” μ™„μ „νžˆ λ‹€λ₯Έ 트리λ₯Ό μƒμ„±ν•œλ‹€**: 루트 μ—˜λ¦¬λ¨ΌνŠΈμ˜ νƒœκ·Έλ‚˜ μ»΄ν¬λ„ŒνŠΈ νƒ€μž…μ΄ 변경될 경우(예: `` β†’ `` λ˜λŠ” `
` β†’ ``), ReactλŠ” κΈ°μ‘΄ 트리λ₯Ό μ™„μ „νžˆ 파괴(Unmount)ν•˜κ³  μƒˆλ‘œμš΄ DOM λ…Έλ“œλ₯Ό μ²˜μŒλΆ€ν„° κ΅¬μΆ•ν•©λ‹ˆλ‹€ [6, 7]. 2. **`key` prop을 ν†΅ν•œ μžμ‹ μš”μ†Œ μ•ˆμ •μ„± 보μž₯**: 리슀트의 μˆœμ„œκ°€ λ°”λ€Œκ±°λ‚˜ 맨 μ•žμ— μƒˆ μ—˜λ¦¬λ¨ΌνŠΈκ°€ 좔가될 λ•Œ, μžμ‹μ„ 순차적으둜 λΉ„κ΅ν•˜λ©΄ λͺ¨λ“  μš”μ†Œλ₯Ό λ³€κ²½ν•˜λŠ” λΉ„νš¨μœ¨μ΄ λ°œμƒν•©λ‹ˆλ‹€ [8, 9]. λŒ€μ‹  κ³ μœ ν•œ `key`λ₯Ό μ œκ³΅ν•˜λ©΄ μ›λž˜ 트리의 μžμ‹κ³Ό μƒˆλ‘œμš΄ 트리의 μžμ‹μ„ λ§€μΉ­ν•˜μ—¬, λΆˆν•„μš”ν•œ μž¬μƒμ„± 없이 μš”μ†Œλ“€μ˜ μœ„μΉ˜λ§Œ 효율적으둜 μ΄λ™μ‹œν‚΅λ‹ˆλ‹€ [6, 9, 10]. * **λ™μΌν•œ νƒ€μž…μ˜ μ—˜λ¦¬λ¨ΌνŠΈ 및 μ»΄ν¬λ„ŒνŠΈ 처리**: λ™μΌν•œ DOM νƒœκ·Έλ₯Ό 비ꡐ할 λ•ŒλŠ” κΈ°λ³Έ DOM λ…Έλ“œλ₯Ό μœ μ§€ν•˜κ³  `className`μ΄λ‚˜ `style` λ“± λ³€κ²½λœ 속성 μ •λ³΄λ§Œ λΆ€λΆ„μ μœΌλ‘œ μ—…λ°μ΄νŠΈν•©λ‹ˆλ‹€ [11, 12]. μ‚¬μš©μž μ •μ˜ μ»΄ν¬λ„ŒνŠΈ μ—­μ‹œ νƒ€μž…μ΄ κ°™λ‹€λ©΄ μ»΄ν¬λ„ŒνŠΈ μΈμŠ€ν„΄μŠ€μ™€ μƒνƒœ([[State|State]])κ°€ μœ μ§€λ˜λ©°, λ³€κ²½λœ props만 전달받은 λ’€ `render()` ν•¨μˆ˜λ₯Ό μž¬μ‹€ν–‰ν•˜μ—¬ ν•˜μœ„ νŠΈλ¦¬μ— λŒ€ν•΄ μž¬μ‘°μ •μ„ 반볡 μˆ˜ν–‰ν•©λ‹ˆλ‹€ [8, 12]. * **Fiber μ•„ν‚€ν…μ²˜λ₯Ό ν†΅ν•œ μŠ€μΌ€μ€„λ§ 및 λ™μ‹œμ„± λ Œλ”λ§**: κ³Όκ±° React의 μž¬μ‘°μ •μ€ 트리 전체λ₯Ό ν•œ λ²ˆμ— λ™κΈ°μ‹μœΌλ‘œ 처리(Stack Reconciler)ν•˜μ—¬ 메인 μŠ€λ ˆλ“œλ₯Ό μž₯μ‹œκ°„ μ°¨λ‹¨ν•˜λŠ” λ¬Έμ œκ°€ μžˆμ—ˆμŠ΅λ‹ˆλ‹€ [13]. React 16λΆ€ν„°λŠ” 이 엔진을 **Fiber μ•„ν‚€ν…μ²˜**둜 μž¬μž‘μ„±ν•˜μ—¬ λ Œλ”λ§ μž‘μ—…μ„ μž‘κ³  쀑단 κ°€λŠ₯ν•œ λ‹¨μœ„(Fiber nodes)둜 λ‚˜λˆ„μ—ˆμŠ΅λ‹ˆλ‹€ [13-15]. μž¬μ‘°μ • 과정은 μˆœμˆ˜ν•˜κ³  쀑단 및 μž¬μ‹œμž‘μ΄ κ°€λŠ₯ν•œ **λ Œλ” 단계(Render Phase)**와 κ³„μ‚°λœ DOM λ³€κ²½ 사항(Effect list)을 λ™κΈ°μ μœΌλ‘œ ν•œ λ²ˆμ— μ μš©ν•˜λŠ” **컀밋 단계(Commit Phase)**둜 λΆ„λ¦¬λ©λ‹ˆλ‹€ [16-18]. 이λ₯Ό 톡해 μš°μ„ μˆœμœ„(Lanes)에 따라 μ‚¬μš©μž μž…λ ₯ 같은 κΈ΄κΈ‰ν•œ μ—…λ°μ΄νŠΈκ°€ 무거운 λ Œλ”λ§ μž‘μ—…μ„ μ€‘λ‹¨ν•˜κ³  λ¨Όμ € 처리될 수 μžˆμŠ΅λ‹ˆλ‹€ [19-21]. ## πŸ”— Knowledge Connections - **Related Topics:** [[Virtual DOM|Virtual DOM]], Fiber Architecture, [[Diffing Algorithm|Diffing Algorithm]], Reflow / Repaint - **Projects/Contexts:** [[React ᄉα…₯α†Όα„‚α…³α†Ό α„Žα…¬α„Œα…₯ᆨᄒα…ͺ|React μ„±λŠ₯ μ΅œμ ν™”]] (λΆˆν•„μš”ν•œ DOM λ…Έλ“œ μž¬μƒμ„±μ„ 막아 λΈŒλΌμš°μ € λ Œλ”λ§ νŒŒμ΄ν”„λΌμΈμ˜ μ˜€λ²„ν—€λ“œλ₯Ό μ€„μ΄λŠ” ν”„λ‘ νŠΈμ—”λ“œ μ΅œμ ν™” 단계) - **Contradictions/Notes:** React의 μž¬μ‘°μ • μ•Œκ³ λ¦¬μ¦˜μ€ νœ΄λ¦¬μŠ€ν‹±μ— μ˜μ‘΄ν•˜λ―€λ‘œ, `key`에 λ°°μ—΄μ˜ 인덱슀λ₯Ό μ‚¬μš©ν•˜κ±°λ‚˜ `Math.random()`처럼 맀번 λ³€κ²½λ˜λŠ” λΆˆμ•ˆμ •ν•œ 값을 μ‚¬μš©ν•˜λ©΄ μ•ˆ λ©λ‹ˆλ‹€. 이 경우 μš”μ†Œμ˜ μˆœμ„œκ°€ 변경될 λ•Œ λ‚΄λΆ€ μƒνƒœκ°€ μ—‰ν‚€κ±°λ‚˜ λΆˆν•„μš”ν•œ DOM λ…Έλ“œκ°€ λŒ€λŸ‰μœΌλ‘œ λ‹€μ‹œ μƒμ„±λ˜μ–΄ μ„±λŠ₯ μ €ν•˜λ₯Ό μ΄ˆλž˜ν•©λ‹ˆλ‹€ [22, 23]. --- *Last updated: 2026-04-25*