# [[Virtual DOMแ„€แ…ช Reconciliation|Virtual DOM๊ณผ Reconciliation]] ## ๐Ÿ“Œ Brief Summary [[Virtual DOM|Virtual DOM]]์€ UI์˜ ์ด์ƒ์ ์ธ ๊ฐ€์ƒ ํ‘œํ˜„์„ ๋ฉ”๋ชจ๋ฆฌ์— ์œ ์ง€ํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฐœ๋…์ž…๋‹ˆ๋‹ค [1]. [[Reconciliation|Reconciliation]](์žฌ์กฐ์ •)์€ ์ด Virtual DOM์„ ์‹ค์ œ DOM๊ณผ ๋™๊ธฐํ™”ํ•˜์—ฌ ๋ณ€๊ฒฝ๋œ ๋ถ€๋ถ„๋งŒ ํŒŒ์•…ํ•˜๊ณ  ํšจ์œจ์ ์œผ๋กœ ์—…๋ฐ์ดํŠธํ•˜๋Š” React์˜ ํ•ต์‹ฌ ํ”„๋กœ์„ธ์Šค์ž…๋‹ˆ๋‹ค [1, 2]. React๋Š” O(n) ๋ณต์žก๋„๋ฅผ ๊ฐ€์ง„ ํœด๋ฆฌ์Šคํ‹ฑ Diffing ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜์—ฌ ์‹ค์ œ DOM ์กฐ์ž‘์œผ๋กœ ์ธํ•ด ๋ฐœ์ƒํ•˜๋Š” ๋น„์‹ผ ๋ Œ๋”๋ง ๋น„์šฉ๊ณผ ์„ฑ๋Šฅ ์ €ํ•˜๋ฅผ ์ตœ์†Œํ™”ํ•ฉ๋‹ˆ๋‹ค [3-5]. ## ๐Ÿ“– Core Content **Virtual DOM์˜ ๊ฐœ๋…๊ณผ ๋„์ž… ๋ฐฐ๊ฒฝ** * ๋ธŒ๋ผ์šฐ์ €์˜ ์‹ค์ œ DOM์„ ์ง์ ‘ ์ˆ˜์ •ํ•˜๋Š” ์ž‘์—…์€ ๋ ˆ์ด์•„์›ƒ(Reflow)๊ณผ ํŽ˜์ธํŠธ(Repaint) ๋‹จ๊ณ„๋ฅผ ๋ฐ˜๋ณต์ ์œผ๋กœ ํŠธ๋ฆฌ๊ฑฐํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณธ์งˆ์ ์œผ๋กœ ๋งค์šฐ ๋А๋ฆฝ๋‹ˆ๋‹ค [2]. * React๋Š” ์ด ๋ฌธ์ œ๋ฅผ ์ถ”์ƒํ™”ํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ€๋ณ๊ณ  ๋ฉ”๋ชจ๋ฆฌ ๋‚ด์— ์กด์žฌํ•˜๋Š” UI ํ‘œํ˜„์ธ Virtual DOM์„ ๋„์ž…ํ–ˆ์Šต๋‹ˆ๋‹ค [2]. * ์ด๋ฅผ ํ†ตํ•ด ๊ฐœ๋ฐœ์ž๋Š” ์›ํ•˜๋Š” UI ์ƒํƒœ๋ฅผ ์„ ์–ธ์ ์œผ๋กœ ๋ช…์‹œํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋˜๋ฉฐ, React์˜ ReactDOM๊ณผ ๊ฐ™์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋‚ด๋ถ€์ ์œผ๋กœ ์†์„ฑ ์กฐ์ž‘, ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ ๋ฐ ์ˆ˜๋™ DOM ์—…๋ฐ์ดํŠธ๋ฅผ ์•Œ์•„์„œ ๊ด€๋ฆฌํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค [1, 2]. * React ์„ธ๊ณ„์—์„œ Virtual DOM์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฐ์ฒด์ธ 'React Elements'๋ฅผ ์˜๋ฏธํ•˜๋ฉฐ, ์ปดํฌ๋„ŒํŠธ ํŠธ๋ฆฌ์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ๋‚ด๋ถ€ ๊ฐ์ฒด์ธ 'Fiber' ์—ญ์‹œ ๊ทธ ๊ตฌํ˜„์˜ ์ผ๋ถ€๋กœ ๊ฐ„์ฃผ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [6]. **Reconciliation๊ณผ ํœด๋ฆฌ์Šคํ‹ฑ Diffing ์•Œ๊ณ ๋ฆฌ์ฆ˜** * ์ƒํƒœ([[State|State]])๋‚˜ ์†์„ฑ(Props)์ด ์—…๋ฐ์ดํŠธ๋˜๋ฉด `render()` ํ•จ์ˆ˜๋Š” ์ƒˆ๋กœ์šด React Element ํŠธ๋ฆฌ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉฐ, React๋Š” ์ด๋ฅผ ๊ฐ€์žฅ ์ตœ๊ทผ์˜ ํŠธ๋ฆฌ์™€ ๋น„๊ตํ•˜์—ฌ UI๋ฅผ ์–ด๋–ป๊ฒŒ ํšจ์œจ์ ์œผ๋กœ ์—…๋ฐ์ดํŠธํ• ์ง€ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค [4]. * ๋‘ ํŠธ๋ฆฌ๋ฅผ ๋น„๊ตํ•˜์—ฌ ๋ณ€ํ™˜ํ•˜๊ธฐ ์œ„ํ•œ ์ตœ์†Œํ•œ์˜ ์—ฐ์‚ฐ์„ ์ฐพ๋Š” ์ผ๋ฐ˜์ ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ O(n^3)์˜ ๋ณต์žก๋„๋ฅผ ๊ฐ€์ง€๋ฏ€๋กœ ์‹ค์ œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ ์šฉํ•˜๊ธฐ์—๋Š” ๋น„์šฉ์ด ๋„ˆ๋ฌด ๋†’์Šต๋‹ˆ๋‹ค [4]. * ๋”ฐ๋ผ์„œ React๋Š” ๋‹ค์Œ ๋‘ ๊ฐ€์ง€ ๊ฐ€์ •์— ๊ธฐ๋ฐ˜ํ•œ **O(n) ํœด๋ฆฌ์Šคํ‹ฑ ์•Œ๊ณ ๋ฆฌ์ฆ˜**์„ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค [3-5]: 1. ์„œ๋กœ ๋‹ค๋ฅธ ํƒ€์ž…์˜ ์š”์†Œ(Elements)๋Š” ๋ณธ์งˆ์ ์œผ๋กœ ๋‹ค๋ฅธ ํŠธ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค [3, 5]. 2. ๊ฐœ๋ฐœ์ž๊ฐ€ `key` ์†์„ฑ์„ ์ œ๊ณตํ•˜์—ฌ ์—ฌ๋Ÿฌ ๋ Œ๋”๋ง ๊ฐ„์— ์–ด๋–ค ์ž์‹ ์š”์†Œ๊ฐ€ ์•ˆ์ •์ ์ธ์ง€ ํžŒํŠธ๋ฅผ ์ค„ ์ˆ˜ ์žˆ๋‹ค [3, 5]. **๋น„๊ต(Diffing) ํ”„๋กœ์„ธ์Šค ์ƒ์„ธ ์ฒ˜๋ฆฌ** * **๋‹ค๋ฅธ ํƒ€์ž…์˜ ์š”์†Œ:** ๋ฃจํŠธ ์š”์†Œ์˜ ํƒ€์ž…์ด ๋‹ค๋ฅด๋ฉด(์˜ˆ: ``์—์„œ ``๋กœ, ํ˜น์€ `
`์—์„œ ``์œผ๋กœ ๋ณ€๊ฒฝ), React๋Š” ๊ธฐ์กด ํŠธ๋ฆฌ๋ฅผ ์™„์ „ํžˆ ํŒŒ๊ดดํ•˜๊ณ  ์ฒ˜์Œ๋ถ€ํ„ฐ ์ƒˆ ํŠธ๋ฆฌ๋ฅผ ๊ตฌ์ถ•ํ•ฉ๋‹ˆ๋‹ค [3, 7]. ์ด ๊ณผ์ •์—์„œ ์ด์ „ DOM ๋…ธ๋“œ๋Š” ํŒŒ๊ดด๋˜๋ฉฐ ์—ฐ๊ด€๋œ ๋ชจ๋“  ์ปดํฌ๋„ŒํŠธ์˜ ์ƒํƒœ(State)๊ฐ€ ์œ ์‹ค๋ฉ๋‹ˆ๋‹ค [7]. * **๊ฐ™์€ ํƒ€์ž…์˜ DOM ์š”์†Œ:** ๋™์ผํ•œ ํƒ€์ž…์˜ React DOM ์š”์†Œ๋ฅผ ๋น„๊ตํ•  ๋•Œ๋Š” ๊ธฐ๋ณธ DOM ๋…ธ๋“œ๋ฅผ ์œ ์ง€ํ•œ ์ฑ„, `className`์ด๋‚˜ `style` ๋“ฑ ๋ณ€๊ฒฝ๋œ ์†์„ฑ(Attributes)๋งŒ์„ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค [8, 9]. * **๊ฐ™์€ ํƒ€์ž…์˜ ์ปดํฌ๋„ŒํŠธ ์š”์†Œ:** ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์—…๋ฐ์ดํŠธ๋  ๋•Œ ์ธ์Šคํ„ด์Šค๋Š” ๋™์ผํ•˜๊ฒŒ ์œ ์ง€๋˜์–ด ๋ Œ๋”๋ง ๊ฐ„์— ์ƒํƒœ๊ฐ€ ๋ณด์กด๋ฉ๋‹ˆ๋‹ค. React๋Š” ์ƒˆ ์š”์†Œ์™€ ์ผ์น˜ํ•˜๋„๋ก ๊ธฐ๋ณธ ์ปดํฌ๋„ŒํŠธ ์ธ์Šคํ„ด์Šค์˜ props๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๊ณ  ์ˆ˜๋ช… ์ฃผ๊ธฐ(Lifecycle) ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•œ ๋’ค, ์ž์‹ ๋…ธ๋“œ์— ๋Œ€ํ•ด ์žฌ๊ท€์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค [9, 10]. * **์ž์‹ ๋…ธ๋“œ ์ฒ˜๋ฆฌ์™€ Key ์†์„ฑ:** ์ž์‹ ๋…ธ๋“œ๋ฅผ ์ˆœํšŒํ•  ๋•Œ ๋ฆฌ์ŠคํŠธ์˜ ๋งจ ์•ž์— ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ์ „์ฒด ํŠธ๋ฆฌ๊ฐ€ ๋ณ€๊ฒฝ๋œ ๊ฒƒ์œผ๋กœ ์ธ์‹ํ•ด ๋งค์šฐ ๋น„ํšจ์œจ์ ์œผ๋กœ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [10, 11]. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด `key` ์†์„ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ์›๋ณธ ํŠธ๋ฆฌ์™€ ํ›„์† ํŠธ๋ฆฌ์˜ ์ž์‹์„ ์ •ํ™•ํžˆ ๋งค์นญ์‹œํ‚ต๋‹ˆ๋‹ค [3, 11]. `key`๋Š” ํ˜•์ œ ๋…ธ๋“œ ์‚ฌ์ด์—์„œ ์•ˆ์ •์ ์ด๊ณ  ์˜ˆ์ธก ๊ฐ€๋Šฅํ•˜๋ฉฐ ๊ณ ์œ ํ•ด์•ผ ์„ฑ๋Šฅ ์ €ํ•˜์™€ ์ƒํƒœ ์œ ์‹ค์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [12]. **[[React Fiber|React Fiber]] ์•„ํ‚คํ…์ฒ˜๋ฅผ ํ†ตํ•œ ๋ Œ๋”๋ง ์ตœ์ ํ™”** * ๊ณผ๊ฑฐ ๋™๊ธฐ์ ์ธ ์Šคํƒ ์žฌ์กฐ์ •์ž(Stack reconciler)๋Š” ๋Œ€๊ทœ๋ชจ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฒ˜๋ฆฌ ์‹œ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๋ฅผ ์ฐจ๋‹จ([[Blocking|Blocking]])ํ•˜์—ฌ UI์˜ ๋ฐ˜์‘์„ฑ์„ ๋–จ์–ด๋œจ๋ฆฌ๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค [13, 14]. * React 16์€ ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋™์‹œ์„ฑ ๋ Œ๋”๋ง([[Concurrent Rendering|Concurrent Rendering]])์„ ์ง€์›ํ•˜๋Š” **Fiber ์•„ํ‚คํ…์ฒ˜**๋กœ ์žฌ์กฐ์ • ์—”์ง„์„ ์™„์ „ํžˆ ์žฌ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค [15-17]. * Fiber๋Š” ๋ Œ๋”๋ง ์ž‘์—…์„ '์ž‘์—… ๋‹จ์œ„(Unit of work)'๋กœ ๋‚˜๋ˆ„๊ณ , ์šฐ์„ ์ˆœ์œ„(Lanes) ์‹œ์Šคํ…œ์„ ํ†ตํ•ด ๊ธด๊ธ‰ํ•œ ์ƒํ˜ธ์ž‘์šฉ(ํด๋ฆญ, ํƒ€์ดํ•‘ ๋“ฑ)์„ ์œ„ํ•ด ์ž‘์—…์„ ์ผ์‹œ ์ค‘๋‹จ, ์–‘๋ณด(Yield), ๋ฐ ์žฌ๊ฐœํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•ฉ๋‹ˆ๋‹ค [14, 16, 18, 19]. ์ด๋กœ ์ธํ•ด Virtual DOM์˜ ์žฌ์กฐ์ • ๊ณผ์ • ์ค‘์—๋„ UI ๋ฐ˜์‘์„ฑ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [16, 18]. ## ๐Ÿ”— Knowledge Connections - **Related Topics:** [[React Fiber Architecture|React Fiber Architecture]], Critical Rendering Path (CRP), [[Concurrent Rendering|Concurrent Rendering]] - **Projects/Contexts:** React Application Performance [[Optimization|Optimization]] - **Contradictions/Notes:** ์†Œ์Šค์— ๋”ฐ๋ฅด๋ฉด Virtual DOM ํŠธ๋ฆฌ๋Š” ์„ค๊ณ„์ƒ ๋ถˆ๋ณ€(immutable)์œผ๋กœ ์ทจ๊ธ‰๋˜์ง€๋งŒ, ๋‹จ์ผ ์ž์‹ ๋…ธ๋“œ๋ฅผ ์—ฌ๋Ÿฌ ์œ„์น˜์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๋ณต์‚ฌ ๋น„์šฉ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด React๋Š” ํ˜„์žฌ ์„ค์น˜๋œ ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฐ€๋ณ€์ ์ธ ํ˜•ํƒœ์˜ "Augmented DOM" ๊ตฌ์กฐ๋ฅผ ๊ตฌ์ถ•ํ•˜๋ฉฐ, ์ด๊ฒƒ์ด ๋ฐ”๋กœ React์˜ Fiber ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๊ฐ€ ์ˆ˜ํ–‰ํ•˜๋Š” ์—ญํ• ์ž…๋‹ˆ๋‹ค [20]. --- *Last updated: 2026-04-25*