# [[Reconciliation]] ## ๐Ÿ“Œ Brief Summary Reconciliation(์žฌ์กฐ์ •)์€ React๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ์œ ์ง€๋˜๋Š” ๊ฐ€์ƒ 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 ์ƒ์˜ ๋ ˆ์ด์•„์›ƒ(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)๊ฐ€ ์œ ์ง€๋˜๋ฉฐ, ๋ณ€๊ฒฝ๋œ 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]], [[Fiber Architecture]], [[Diffing Algorithm]], Reflow / Repaint - **Projects/Contexts:** [[React ์„ฑ๋Šฅ ์ตœ์ ํ™”]] (๋ถˆํ•„์š”ํ•œ DOM ๋…ธ๋“œ ์žฌ์ƒ์„ฑ์„ ๋ง‰์•„ ๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง ํŒŒ์ดํ”„๋ผ์ธ์˜ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ค„์ด๋Š” ํ”„๋ก ํŠธ์—”๋“œ ์ตœ์ ํ™” ๋‹จ๊ณ„) - **Contradictions/Notes:** React์˜ ์žฌ์กฐ์ • ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ํœด๋ฆฌ์Šคํ‹ฑ์— ์˜์กดํ•˜๋ฏ€๋กœ, `key`์— ๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ `Math.random()`์ฒ˜๋Ÿผ ๋งค๋ฒˆ ๋ณ€๊ฒฝ๋˜๋Š” ๋ถˆ์•ˆ์ •ํ•œ ๊ฐ’์„ ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ์š”์†Œ์˜ ์ˆœ์„œ๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ ๋‚ด๋ถ€ ์ƒํƒœ๊ฐ€ ์—‰ํ‚ค๊ฑฐ๋‚˜ ๋ถˆํ•„์š”ํ•œ DOM ๋…ธ๋“œ๊ฐ€ ๋Œ€๋Ÿ‰์œผ๋กœ ๋‹ค์‹œ ์ƒ์„ฑ๋˜์–ด ์„ฑ๋Šฅ ์ €ํ•˜๋ฅผ ์ดˆ๋ž˜ํ•ฉ๋‹ˆ๋‹ค [22, 23]. --- *Last updated: 2026-04-25*