# [[Virtual DOM]] ## ๐Ÿ“Œ Brief Summary Virtual DOM(VDOM)์€ ๋ฉ”๋ชจ๋ฆฌ์— ์œ ์ง€๋˜๋Š” ๊ฐ€๋ณ๊ณ  ์ด์ƒ์ ์ธ UI์˜ ํ‘œํ˜„(๋ณดํ†ต React ์—˜๋ฆฌ๋จผํŠธ ํ˜•ํƒœ์˜ ๋‹จ์ˆœํ•œ JavaScript ๊ฐ์ฒด)์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค [1-3]. React์™€ ๊ฐ™์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์˜ํ•ด ์‹ค์ œ DOM๊ณผ ๋™๊ธฐํ™”๋˜๋ฉฐ, ์ด ๊ณผ์ •์„ '์žฌ์กฐ์ •(Reconciliation)'์ด๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค [1-3]. ์ด๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์ˆ˜๋™์œผ๋กœ DOM์„ ์—…๋ฐ์ดํŠธํ•˜๊ณ  ์†์„ฑ์„ ์กฐ์ž‘ํ•˜๋Š” ๋น„ํšจ์œจ์„ฑ์„ ์ถ”์ƒํ™”ํ•˜์—ฌ, ์„ ์–ธ์ ์ธ UI ๊ฐœ๋ฐœ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ํ•ต์‹ฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฐœ๋…์ž…๋‹ˆ๋‹ค [1, 3]. ## ๐Ÿ“– Core 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]. ## ๐Ÿ”— Knowledge Connections - **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*