# [[DOM vs Virtual DOM|DOM vs Virtual DOM]] ## ๐Ÿ“Œ Brief Summary DOM(๋ฌธ์„œ ๊ฐ์ฒด ๋ชจ๋ธ)์€ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ HTML์„ ํŒŒ์‹ฑํ•˜์—ฌ ์ƒ์„ฑํ•˜๋Š” ํŠธ๋ฆฌ ๊ตฌ์กฐ๋กœ, ์ง์ ‘์ ์ธ DOM ์กฐ์ž‘์€ ๋ Œ๋”๋ง ๊ฒฝ๋กœ(๋ ˆ์ด์•„์›ƒ ๋ฐ ํŽ˜์ธํŠธ)๋ฅผ ๋งค๋ฒˆ ํŠธ๋ฆฌ๊ฑฐํ•˜์—ฌ ์„ฑ๋Šฅ ์ €ํ•˜๋ฅผ ์œ ๋ฐœํ•ฉ๋‹ˆ๋‹ค [1, 2]. ๋ฐ˜๋ฉด [[Virtual DOM|Virtual DOM]](๊ฐ€์ƒ DOM)์€ React๊ฐ€ ์ˆ˜๋™์ ์ธ DOM ์กฐ์ž‘์˜ ๋น„ํšจ์œจ์„ฑ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋„์ž…ํ•œ ๊ฐœ๋…์œผ๋กœ, UI์˜ ์ด์ƒ์ ์ธ ์ƒํƒœ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ๊ฐ€๋ฒผ์šด JavaScript ๊ฐ์ฒด ํ˜•ํƒœ๋กœ ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค [2-4]. React๋Š” ์ƒˆ๋กœ์šด Virtual DOM๊ณผ ์ด์ „ ๋ฒ„์ „์„ ๋น„๊ต(Diffing)ํ•˜์—ฌ ์‹ค์ œ ๋ณ€๊ฒฝ๋œ ๋ถ€๋ถ„๋งŒ ์‹ค์ œ DOM์— ๋ฐ˜์˜([[Reconciliation|Reconciliation]])ํ•จ์œผ๋กœ์จ ๋ธŒ๋ผ์šฐ์ €์˜ ๋ฆฌํ”Œ๋กœ์šฐ์™€ ๋ฆฌํŽ˜์ธํŠธ๋ฅผ ์ตœ์†Œํ™”ํ•˜๊ณ  ๋ Œ๋”๋ง ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•ฉ๋‹ˆ๋‹ค [3-5]. ## ๐Ÿ“– Core Content * **[[DOM (Document Object Model)|DOM(Document Object Model]]์˜ ํŠน์„ฑ๊ณผ ํ•œ๊ณ„** * ๋ธŒ๋ผ์šฐ์ €๋Š” ์ˆ˜์‹ ๋œ HTML ๋ฐ”์ดํŠธ๋ฅผ ๋ฌธ์ž, ํ† ํฐ, ๋…ธ๋“œ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์ ์ง„์ ์œผ๋กœ DOM ํŠธ๋ฆฌ๋ฅผ ๊ตฌ์ถ•ํ•ฉ๋‹ˆ๋‹ค [1]. * DOM์€ ํŽ˜์ด์ง€์˜ ๊ตฌ์กฐ์™€ ์ฝ˜ํ…์ธ ๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ, ๋…ธ๋“œ ์ˆ˜๊ฐ€ ๋งŽ๊ณ  ํŠธ๋ฆฌ์˜ ๊นŠ์ด๊ฐ€ ๊นŠ์„์ˆ˜๋ก ๋ธŒ๋ผ์šฐ์ €์˜ ๋ ˆ์ด์•„์›ƒ(Reflow) ๋ฐ ํŽ˜์ธํŠธ(Repaint) ๋“ฑ ์ค‘์š” ๋ Œ๋”๋ง ๊ฒฝ๋กœ([[Critical Rendering Path|Critical Rendering Path]]) ์ž‘์—…์— ๊ฑธ๋ฆฌ๋Š” ์—ฐ์‚ฐ ๋ถ€๋‹ด์ด ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค [6, 7]. * ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ DOM์„ ์ง์ ‘ ์ˆ˜์ •ํ•˜๋Š” ์ž‘์—…์€ ๋ณธ์งˆ์ ์œผ๋กœ ๋А๋ฆฝ๋‹ˆ๋‹ค [2]. DOM์˜ ๋ณ€๊ฒฝ์€ ๋ ˆ์ด์•„์›ƒ๊ณผ ํŽ˜์ธํŠธ ๋‹จ๊ณ„๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•˜๋ฉฐ, ์—ฌ๋Ÿฌ ๋…ธ๋“œ๋ฅผ ๊ฐœ๋ณ„์ ์œผ๋กœ ์—…๋ฐ์ดํŠธํ•  ๊ฒฝ์šฐ ์ค‘๋ณต๋œ ์žฌ๊ณ„์‚ฐ์„ ์œ ๋ฐœํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค [2]. * **Virtual DOM์˜ ๊ฐœ๋… ๋ฐ ๋„์ž… ๋ชฉ์ ** * ์ˆ˜๋™์ ์ธ DOM ์กฐ์ž‘์ด ๊ฐ€์ง„ ๋น„ํšจ์œจ์„ฑ์„ ์ถ”์ƒํ™”ํ•˜๊ธฐ ์œ„ํ•ด React์—์„œ ๋„์ž…ํ•œ ์•„ํ‚คํ…์ฒ˜๊ฐ€ Virtual DOM์ž…๋‹ˆ๋‹ค [2]. * ์ด๋Š” UI๋ฅผ ๋ฉ”๋ชจ๋ฆฌ ๋‚ด์— ๊ฐ€๋ฒผ์šด JavaScript ๊ฐ์ฒด ํ˜•ํƒœ๋กœ ์œ ์ง€ํ•˜๋Š” ํ‘œํ˜„ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค [2, 3]. * ๊ฐœ๋ฐœ์ž๊ฐ€ UI์˜ ์ด์ƒ์ ์ธ ์ƒํƒœ๋ฅผ ์„ ์–ธ์ ์œผ๋กœ ์ •์˜ํ•˜๋ฉด, React(ReactDOM ๋“ฑ)๊ฐ€ ์‹ค์ œ DOM์„ ํ•ด๋‹น ์ƒํƒœ์™€ ์ผ์น˜ํ•˜๋„๋ก ์•Œ์•„์„œ ๋™๊ธฐํ™”ํ•˜๋ฏ€๋กœ, ๊ฐœ๋ฐœ์ž๋Š” ์†์„ฑ ์กฐ์ž‘์ด๋‚˜ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ, ์ˆ˜๋™์ ์ธ DOM ์—…๋ฐ์ดํŠธ ๋“ฑ์„ ์ง์ ‘ ์ฒ˜๋ฆฌํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค [4]. * Virtual DOM ํŠธ๋ฆฌ๋Š” ์„ค๊ณ„์ƒ ๋ถˆ๋ณ€(immutable) ๊ฐ์ฒด๋กœ ์ทจ๊ธ‰๋ฉ๋‹ˆ๋‹ค [8]. * **์žฌ์กฐ์ •(Reconciliation)๊ณผ Diffing ์•Œ๊ณ ๋ฆฌ์ฆ˜** * ์ƒํƒœ๋‚˜ ์†์„ฑ(props)์ด ์—…๋ฐ์ดํŠธ๋˜๋ฉด React๋Š” ์ƒˆ๋กœ์šด Virtual DOM ํŠธ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ์ด๋ฅผ ์ด์ „ ๋ฒ„์ „์˜ ํŠธ๋ฆฌ์™€ ๋น„๊ต(Diffing)ํ•˜์—ฌ ์‹ค์ œ DOM์„ ๊ฐ€์žฅ ํšจ์œจ์ ์œผ๋กœ ์—…๋ฐ์ดํŠธํ•  ๋ฐฉ๋ฒ•์„ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค [2, 3, 9]. ์ด ๋™๊ธฐํ™” ๊ณผ์ •์„ ์žฌ์กฐ์ •(Reconciliation)์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค [3, 4]. * ๋‘ ํŠธ๋ฆฌ๋ฅผ ๋น„๊ตํ•˜๋Š” ์ผ๋ฐ˜์ ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ $O(n^3)$์˜ ๋ณต์žก๋„๋ฅผ ๊ฐ€์ ธ, ์š”์†Œ๊ฐ€ ๋งŽ์•„์งˆ ๊ฒฝ์šฐ ์‹ค์‹œ๊ฐ„ ์—ฐ์‚ฐ์— ๋ถ€์ ํ•ฉํ•  ๋งŒํผ ๋น„์šฉ์ด ํฝ๋‹ˆ๋‹ค [9-11]. * ๋Œ€์‹  React๋Š” ๋‘ ๊ฐ€์ง€ ๊ฐ€์ •์„ ๊ธฐ๋ฐ˜์œผ๋กœ $O(n)$ ๋ณต์žก๋„์˜ ํœด๋ฆฌ์Šคํ‹ฑ Diffing ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค [10, 11]. 1. ์„œ๋กœ ๋‹ค๋ฅธ ํƒ€์ž…์˜ ์š”์†Œ๋Š” ์ „ํ˜€ ๋‹ค๋ฅธ ํŠธ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์—ฌ ๊ธฐ์กด ํŠธ๋ฆฌ๋ฅผ ํ—ˆ๋ฌผ๊ณ  ์™„์ „ํžˆ ์ƒˆ๋กœ ๊ตฌ์ถ•ํ•ฉ๋‹ˆ๋‹ค [10-12]. 2. ๊ฐœ๋ฐœ์ž๊ฐ€ ์ œ๊ณตํ•˜๋Š” `key` ์†์„ฑ์„ ํ†ตํ•ด ์—ฌ๋Ÿฌ ๋ Œ๋”๋ง์— ๊ฑธ์ณ ์•ˆ์ •์ ์œผ๋กœ ์œ ์ง€๋˜๋Š” ์ž์‹ ์š”์†Œ๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์‹๋ณ„ํ•ฉ๋‹ˆ๋‹ค [10, 11]. * ์ด๋Ÿฌํ•œ ์ ‘๊ทผ ๋ฐฉ์‹์„ ํ†ตํ•ด React๋Š” ๋ณ€๊ฒฝ๋œ ํŠน์ • ์†์„ฑ์ด๋‚˜ ๋…ธ๋“œ๋งŒ์„ ์ˆ˜์ •ํ•˜๊ณ , ๊ธฐ๋ณธ DOM ๋…ธ๋“œ์™€ ์ƒํƒœ๋ฅผ ๊ฐ€๋Šฅํ•œ ํ•œ ๋ณด์กดํ•˜์—ฌ ํšจ์œจ์„ฑ์„ ๋†’์ž…๋‹ˆ๋‹ค [13-15]. * **์„ฑ๋Šฅ ์ตœ์ ํ™” ๊ด€์  (React๊ฐ€ ๋น ๋ฅธ ์ด์œ )** * Virtual DOM์€ ์ผ์‹œ์ ์ธ ํ”„๋ ˆ์  ํ…Œ์ด์…˜ ์ƒํƒœ๋ฅผ ์ง€์†์ ์ธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒํƒœ์™€ ๋ถ„๋ฆฌํ•˜๊ณ  ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์€ ํ”„๋ ˆ์  ํ…Œ์ด์…˜ ์ƒํƒœ๋ฅผ ๋ณด์กดํ•จ์œผ๋กœ์จ, ๋ธŒ๋ผ์šฐ์ €์˜ ๋ฌด๊ฑฐ์šด DOM ์—ฐ์‚ฐ์„ ์ค„์ด๊ณ  UI ๋ Œ๋”๋ง ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ•ฉ๋‹ˆ๋‹ค [3]. * ๊ทธ๋Ÿฌ๋‚˜ Virtual DOM์˜ Diffing ์ž‘์—… ์ž์ฒด๊ฐ€ ์—ฐ์‚ฐ ๋น„์šฉ์ด ์ „ํ˜€ ์—†๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค [16]. Virtual DOM์€ ์‹ค์ œ DOM์ด ์—…๋ฐ์ดํŠธ๋  ํ•„์š”๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ๋Š” ์ž˜ ์žก์•„๋‚ด์ง€๋งŒ, ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ์˜ ์ƒํƒœ ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•ด ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ ์ „์ฒด๊ฐ€ ์žฌ๋ Œ๋”๋ง๋˜๋Š” ํญํฌ์ˆ˜ ํ˜„์ƒ(Re-Render Cascade)์ด ๋ฐœ์ƒํ•˜๋ฉด ๋ถˆํ•„์š”ํ•œ Diffing ์—ฐ์‚ฐ์ด ๋‚ญ๋น„๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [16, 17]. ์ด๋ฅผ ์ตœ์†Œํ™”ํ•˜๋ ค๋ฉด `React.memo` ๋“ฑ์„ ํ†ตํ•ด ์„ ํƒ์ ์œผ๋กœ ๋ฆฌ๋ Œ๋”๋ง์„ ์ฐจ๋‹จํ•˜๋Š” ์ตœ์ ํ™”๊ฐ€ ๋ณ‘ํ–‰๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [16]. ## ๐Ÿ”— Knowledge Connections - **Related Topics:** [[Critical Rendering Path|Critical Rendering Path]], Reflow and Repaint, Reconciliation, [[React Fiber Architecture|React Fiber Architecture]] - **Projects/Contexts:** [[แ„‘แ…ณแ„…แ…ฉแ†ซแ„แ…ณแ„‹แ…ฆแ†ซแ„ƒแ…ณ แ„€แ…ตแ„Žแ…ฉ แ„€แ…ฎแ„Œแ…ฉ แ„‹แ…ตแ„’แ…ข|ํ”„๋ก ํŠธ์—”๋“œ ๊ธฐ์ดˆ ๊ตฌ์กฐ ์ดํ•ด]], ๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง ๊ณผ์ • (HTML โ†’ CSSOM โ†’ [[Render Tree|Render Tree]], [[โ€œReactแ„€แ…ก แ„ˆแ…กแ„…แ…ณแ†ซ แ„‹แ…ตแ„‹แ…ฒโ€ แ„†แ…ตแ†พ แ„…แ…ฆแ†ซแ„ƒแ…ฅแ„…แ…ตแ†ผ แ„Žแ…ฌแ„Œแ…ฅแ†จแ„’แ…ช แ„€แ…ขแ„‚แ…งแ†ท|โ€œReact๊ฐ€ ๋น ๋ฅธ ์ด์œ โ€ ๋ฐ ๋ Œ๋”๋ง ์ตœ์ ํ™” ๊ฐœ๋…]] - **Contradictions/Notes:** Virtual DOM์ด ์ˆ˜๋™ DOM ์กฐ์ž‘ ๋น„์šฉ์„ ํฌ๊ฒŒ ์ค„์—ฌ์ฃผ์–ด React์˜ ๋น ๋ฅธ ์„ฑ๋Šฅ์„ ๋ณด์žฅํ•˜์ง€๋งŒ, ์†Œ์Šค์— ๋”ฐ๋ฅด๋ฉด "Virtual DOM์˜ Diffing ์ž‘์—… ์ž์ฒด๊ฐ€ ๋ฌด๋ฃŒ๋Š” ์•„๋‹ˆ๋ฉฐ(not free), ๋ฌด๋ถ„๋ณ„ํ•œ ๋ฆฌ๋ Œ๋”๋ง ํญํฌ์ˆ˜(Re-Render Cascade)๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ ์—ฐ์‚ฐ ๋‚ญ๋น„์™€ ์„ฑ๋Šฅ ์ €ํ•˜์˜ ์ฃผ์›์ธ์ด ๋  ์ˆ˜ ์žˆ๋‹ค"๊ณ  ๊ฒฝ๊ณ ํ•ฉ๋‹ˆ๋‹ค [16]. ๋”ฐ๋ผ์„œ ์™„๋ฒฝํ•œ ์„ฑ๋Šฅ์„ ์œ„ํ•ด์„œ๋Š” Virtual DOM์—๋งŒ ์˜์กดํ•˜์ง€ ์•Š๊ณ  ๋ฉ”๋ชจ์ด์ œ์ด์…˜(Memoization)์„ ํ†ตํ•œ ์ปดํฌ๋„ŒํŠธ ์ตœ์ ํ™”๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค [16]. --- *Last updated: 2026-04-25*