DOM vs Virtual DOM

๋‚˜๋Š”์•ผ ํ† ๋งˆํ† ยท2021๋…„ 10์›” 13์ผ
4

FrontEnd๐ŸŽจ

๋ชฉ๋ก ๋ณด๊ธฐ
2/10
post-thumbnail

[10๋ถ„ ํ…Œ์ฝ”ํ†ก] ๐Ÿฅ ์ง€๊ทธ์˜ Virtual DOM
DOM์€ ๋ญ๊ณ  ๊ฐ€์ƒ DOM์€ ๋ญ”๊ฐ€์š”? (+ Svelte์™€ React์˜ ์ฐจ์ด)
DOM vs Virtual DOM
๋ฅผ ๋ณด๋ฉด์„œ ๋‚ด๊ฐ€ ๋” ์•Œ์•„์•ผ ํ•  ๋‚ด์šฉ๊ณผ ๋ณต์Šต์œผ๋กœ ๊ฒŒ์‹œ๋ฌผ์„ ์ž‘์„ฑํ•ด๋ณธ๋Œœ!

DOM์ด๋ž€?

DOM์€ Document Object Model๋กœ HTML์ด๋ž€ ์ฝ”๋“œ๋กœ ์„ค๊ณ„๋œ ์›นํŽ˜์ด์ง€๊ฐ€ ๋ธŒ๋ผ์šฐ์ € ์•ˆ์—์„œ ํ™”๋ฉด์— ๋‚˜ํƒ€๋‚˜๊ณ , ์ด๋ฒคํŠธ์— ๋ฐ˜์‘ํ•˜๋ฉฐ ๊ฐ’์„ ์ž…๋ ฅ๋ฐ›๋Š” ๋“ฑ ๊ธฐ๋Šฅ๋“ค์„ ์ˆ˜ํ–‰ํ•  ๊ฐ์ฒด๋“ค๋กœ ์‹ค์ฒดํ™”๋œ ํ˜•ํƒœ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

DOM ์กฐ์ž‘์˜ ๋น„ํšจ์œจ์„ฑ

์˜ˆ๋ฅผ ๋“ค์–ด ์œ ์ €๊ฐ€ ์–ด๋–ค ํฌ์ŠคํŠธ์— ์ข‹์•„์š”๋ฅผ ๋ˆ„๋ฅด๊ฑฐ๋‚˜ ๋‹ด์•„๋‘” ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๋ชฉ๋ก์—์„œ ์ƒํ’ˆ์„ ํ•˜๋‚˜ ์‚ญ์ œํ•˜๊ฑฐ๋‚˜ ์–ด๋”˜๊ฐ€์— ๋Œ“๊ธ€์„ ๋‚จ๊ธฐ๋ฉด ์ „์ฒด ๋…ธ๋“œ๋“ค์ด ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค์‹œ ๊ทธ๋ ค์ง€๊ฒŒ ๋œ๋‹ค!
๋”ฑ ๋ด๋„ ๋ถˆํ•„์š”ํ•œ ๋ฐ˜๋ณต์ด ๋ฐ˜๋ณต๋˜์–ด DOM์„ ์กฐ์ž‘ํ•˜๋Š” ์†Œ๋ชจ์ ์ธ ๋น„์šฉ์ด ์ฆ๊ฐ€ํ•˜๊ฒŒ ๋œ๋‹ค...

์ตœ๊ทผ์—๋Š” SPA, Single Page Application์„ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋ฉด์„œ DOM tree๋ฅผ ์ฆ‰๊ฐ์ ์œผ๋กœ ๋ณ€๊ฒฝํ•  ์ผ์ด ์ƒ๊ฒผ๋‹ค. ์ „์ฒด ํŽ˜์ด์ง€๋ฅผ ์„œ๋ฒ„์—์„œ ๋งค๋ฒˆ ๋ณด๋‚ด์ฃผ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ๋ธŒ๋ผ์šฐ์ € ๋‹จ์—์„œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๊ด€๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์—, DOM์กฐ์ž‘์„ ๋”์šฑ ๋” ํšจ์œจ์ ์œผ๋กœ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ์ตœ์ ํ™”๊ฐ€ ํ•„์š”ํ•˜๊ฒŒ ๋˜์–ด์ง„ ๊ฒƒ์ด๋‹ค.

์—ฌ๊ธฐ์„œ SPA, Single Page Application์ด๋ž€?

ํ•˜๋‚˜์˜ HTML ํŒŒ์ผ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ด์šฉํ•ด ๋™์ ์œผ๋กœ ํ™”๋ฉด์˜ ์ปจํ…์ธ  ๋ฐฉ์‹์„ ๋ฐ”๊พธ๋Š” ๋ฐฉ์‹์˜ ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ด๋‹ค.

๊ทธ๋ž˜์„œ ๋“ฑ์žฅํ•œ ๊ฒƒ์ด Virtual DOM์ด๋‹ค!!!! ๋‘๋‘ฅ!

Virtual DOM์ด๋ž€?

Virtual DOM์€ ์‹ค์ œ DOM์„ ๋ชจ๋ฐฉํ•˜๋Š” ํ˜•ํƒœ๋กœ ๋ฉ”๋ชจ๋ฆฌ ์ƒ์—์„œ๋งŒ ์กด์žฌํ•˜๋Š” ๊ฐ€์ƒ์˜ DOM์„ ์˜๋ฏธํ•œ๋‹ค. ๋ณ€ํ™”๊ฐ€ ์‹ค์ œ DOM์— ์ ์šฉ๋˜๊ธฐ ์ „์— ๊ฐ€์ƒ์˜ DOM์„ ํ•œ๋ฒˆ ๊ฑฐ์ณ ๋ฏธ๋ฆฌ ์ฒ˜๋ฆฌํ•˜๊ณ  ์ €์žฅํ•œ ํ›„ ์‹ค์ œ DOM์— ์—…๋ฐ์ดํŠธ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค.

์ฆ‰, ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ์ด ๋˜๋ฉด ์ „์ฒด UI๋Š” Virtual DOM์— ๋ Œ๋”๋ง ๋˜์–ด์ ธ ์ด์ „ virtual DOM์— ์žˆ๋˜ ๋‚ด์šฉ๊ณผ ์—…๋ฐ์ดํŠธ ํ›„์— ๋‚ด์šฉ์„ ๋น„๊ตํ•˜์—ฌ ๋ฐ”๋€ ๋ถ€๋ถ„๋งŒ ์‹ค์ œ DOM์— ์ ์šฉ์‹œํ‚จ๋‹ค.

Virtual DOM์˜ ํŠน์ง•

  • JavaScript ๊ฐ์ฒด๋ฅผ ํ™œ์šฉ
  • ๋ฉ”๋ชจ๋ฆฌ ์ƒ์—์„œ ๋™์ž‘ํ•˜๊ธฐ์— ํ›จ์”ฌ ๋” ๋น ๋ฅด๊ฒŒ ๋™์ž‘
  • ์‹ค์ œ ๋ Œ๋”๋ง์ด ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์—ฐ์‚ฐ ๋น„์šฉ์ด ์ ์Œ

โœ… ์š”์†Œ๊ฐ€ 30๊ฐœ๊ฐ€ ๋ฐ”๋€Œ์—ˆ๋‹ค๊ณ  ๋ ˆ์ด์•„์›ƒ์„ 30๊ฐœ์”ฉ ์ƒˆ๋กœ ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋ชจ๋“  ๋ณ€ํ™”๋ฅผ ํ•˜๋‚˜๋กœ ๋ฌถ์–ด์„œ ๋”ฑ ํ•œ๋ฒˆ๋งŒ ์‹คํ–‰์‹œํ‚จ๋‹ค. ์ด๋ ‡๊ฒŒ ์—ฐ์‚ฐ ํšŸ์ˆ˜๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์‹ค์ œ DOM ๋ฆฌ๋ Œ๋”๋ง์— ๋น„ํ•ด์„œ ํšจ์œจ์ ์ด๋‹ค.

์‚ฌ์‹ค virtual DOM์ด ํ•˜๋Š” ๊ฒƒ์€ DOM Fragment์— ๋ณ€ํ™”๋ฅผ ๋ฌถ์–ด์„œ ์ ์šฉ์‹œํ‚จ ๋‹ค์Œ์— ๊ธฐ์กด DOM์— ๋˜์ ธ์ฃผ๋Š” ๊ณผ์ •
๐Ÿ‘‰ virtual DOM์€ ์ด ๊ณผ์ •์„ ์ž๋™ํ™”, ์ถ”์ƒํ™”ํ•ด๋†“์€ ๊ฒƒ์— ๋ถˆ๊ณผํ•˜๋‹ค.

React์˜ Virtual DOM

React๋ž€?

Virtual DOM์„ ์ด์šฉํ•˜๋Š” ๋Œ€ํ‘œ์ ์ธ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

React ๊ณต์‹ ๋ฌธ์„œ์—์„œ๋Š” virtual DOM์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ‘œ์‹œํ–ˆ๋‹ค.


โžก๏ธ UI์˜ ๊ฐ€์ƒ์ ์ธ ํ‘œํ˜„์„ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•˜๊ณ  React DOM๊ณผ ๊ฐ™์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์˜ํ•ด ์‹ค์ œ DOM๊ณผ ๋™๊ธฐํ™”ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์ธ ๊ฐœ๋…์ด๋‹ค.๋ผ๊ณ  ์„ค๋ช…ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ์ด๋Ÿฌํ•œ ๊ณผ์ •์„ ์žฌ์กฐ์ •์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

JSX

React๋Š” JSX์˜ ๋ฌธ๋ฒ•๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค.
๊ฐ ์ปดํฌ๋„ŒํŠธ์—์„œ ๋ฆฌํ„ด๋˜๋Š” React elemenent๋ฅผ JSX๋ฌธ๋ฒ•์œผ๋กœ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด๋‹ค. JSX๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ํ™•์žฅ ๋ฌธ๋ฒ•์ด๋‹ค.
JSX๋ฅผ ์ปดํฌ๋„ŒํŠธ์—์„œ ๋ฆฌํ„ด์‹œํ‚ค๋ฉด Babel์€ React.createElement() ํ˜ธ์ถœ๋กœ ์ปดํŒŒ์ผํ•œ๋‹ค. ๋˜ํ•œ React element ๊ฐ์ฒด๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค.
์ด React.createElement()๋กœ ์ƒ์„ฑ๋œ React elements๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ virtual DOM์˜ ๊ฐ์ฒด์™€ ์œ ์‚ฌํ•œ ํ˜•ํƒœ๋กœ ํ‘œํ˜„๋œ๋‹ค.

React elements์˜ ํŠน์ง•

  • DOM ์š”์†Œ์˜ ๊ฐ€์ƒ๋ฒ„์ „์œผ๋กœ ๊ฐ€๋ณ๋‹ค(Light)
  • ์ƒํƒœ๋ฅผ ๊ฐ€์ง€์ง€ ์•Š๋Š”๋‹ค(immutable)
  • ๋ถˆ๋ณ€์„ฑ์„ ์œ ์ง€ํ•œ๋‹ค(stateless)
    โžก๏ธ ์ด ๋ถˆ๋ณ€์„ฑ ๋•๋ถ„์— ๋น„๊ตํ•˜๊ณ , ์—…๋ฐ์ดํŠธ ํ•˜๋Š” ๊ฒŒ ์‰ฌ์›Œ์ง„๋‹ค.

React elements๋Š” React DOM์˜ render์— ์˜ํ•ด์„œ ์‹ค์ œ DOM์š”์†Œ๊ฐ€ ๋œ๋‹ค. React๋Š” ์ด ๊ฐ์ฒด๋ฅผ ์ฝ์–ด๋“ค์ด๊ณ , ์ด๋ฅผ ์‚ฌ์šฉํ•ด์„œ DOM์„ ๊ตฌ์„ฑํ•˜๊ณ , ํ•ญ์ƒ ์ตœ์‹  ์ƒํƒœ๋กœ ์œ ์ง€ํ•œ๋‹ค. ํ•˜์ง€๋งŒ React elements๋Š” ๋ณ€๊ฒฝ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•œ๋ฒˆ ์š”์†Œ๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค๋ฉด ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ๋‹ค๊ณ  ํ•ด์„œ ๊ทธ ์ž์‹์ด๋‚˜ ์†์„ฑ์„ ๋ง˜๋Œ€๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋‹ค. ๊ฐ element๋Š” ํ•ด๋‹น ์ˆœ๊ฐ„์˜ ์Šค๋ƒ…์ƒท ํ˜•ํƒœ๋กœ ๋ณด์—ฌ์ฃผ๊ธฐ๋งŒ ํ•  ๋ฟ์ด๋‹ค.

๊ทธ๋ž˜์„œ UI๋Š” ์–ด๋–ป๊ฒŒ ์—…๋ฐ์ดํŠธ ํ•˜์ง€?

์ƒˆ๋กœ์šด ์š”์†Œ๋ฅผ ๋งŒ๋“ค์–ด์„œ ReactDOM.render()๋กœ ์ „์†กํ•˜๋Š” ๊ฒƒ ๋ฟ์ด๋‹ค.
React DOM Object๋Š” ๊ทธ์— ๋Œ€์‘ํ•˜๋Š” Virtual Object๊ฐ€ ์žˆ๋‹ค. ์ด Virtual Object๋Š” DOM Object์— ํ•˜๋‚˜ํ•˜๋‚˜ ๋งคํ•‘์ด ๋˜์–ด์ง„๋‹ค.

๋ฐ์ดํ„ฐ๊ฐ€ ์—…๋ฐ์ดํŠธ ๋˜์–ด์ง€๋ฉด, ๋ฐ”๋€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ React.createElement()๋ฅผ ํ†ตํ•ด JSX element๋ฅผ ๋ Œ๋”๋งํ•œ๋‹ค. ์ด๋•Œ ๊ฐ๊ฐ์˜ ๋ชจ๋“  Virtual DOM Object๊ฐ€ ์—…๋ฐ์ดํŠธ ๋˜์–ด์ง„๋‹ค. Virtual DOM์€ ๋น ๋ฅด๊ฒŒ ์—…๋ฐ์ดํŠธ ๋˜์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์— ๋น„์šฉ์ด ๋งŽ์ด ๋“ค์ง€ ์•Š๋Š”๋‹ค. ์ด Virtual DOM์ด ์—…๋ฐ์ดํŠธ ๋˜์–ด์ง€๊ฒŒ ๋˜๋ฉด, React๋Š” Virtual DOM์„ ์—…๋ฐ์ดํŠธ ์ด์ „์— Virtual DOM ์Šค๋ƒ…์ƒท๊ณผ ๋น„๊ตํ•˜์—ฌ ์ •ํ™•ํžˆ ์–ด๋–ค Virtual DOM์ด ๋ฐ”๋€Œ์—ˆ๋Š”์ง€ ๊ฒ€์‚ฌ๋ฅผ ํ•œ๋‹ค.

Diff ์•Œ๊ณ ๋ฆฌ์ฆ˜

Virtual DOM์ด ์—…๋ฐ์ดํŠธ๋˜๋ฉด, React๋Š” Virtual DOM์„ ์—…๋ฐ์ดํŠธ ์ด์ „์˜ Virtual DOM ์Šค๋ƒ…์ƒท๊ณผ ๋น„๊ตํ•˜์—ฌ ์ •ํ™•ํžˆ ์–ด๋–ค Virtual DOM์ด ๋ฐ”๋€Œ์—ˆ๋Š”์ง€ ๊ฒ€์‚ฌํ•œ๋‹ค.


element ์†์„ฑ ๊ฐ’๋งŒ ๋ณ€ํ•œ ๊ฒฝ์šฐ์—๋Š” ์†์„ฑ ๊ฐ’๋งŒ ์—…๋ฐ์ดํŠธํ•˜๊ณ , ํ•ด๋‹น ์—˜๋ฆฌ๋จผํŠธ์˜ ํƒœ๊ทธ๋‚˜ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ณ€๊ฒฝ๋œ ๊ฒฝ์šฐ๋ผ๋ฉด ํ•ด๋‹น ๋…ธ๋“œ๋ฅผ ํฌํ•จํ•œ ํ•˜์œ„์˜ ๋ชจ๋“  ๋…ธ๋“œ๋“ค์ด ์–ธ๋งˆ์šดํŠธ ์ฆ‰, ์ œ๊ฑฐํ•œ ๋’ค์— ์ƒˆ๋กœ์šด Virtual DOM์œผ๋กœ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฐ ๋ณ€๊ฒฝ์ด๋‚˜ ์—…๋ฐ์ดํŠธ๊ฐ€ ๋ชจ๋‘ ๋งˆ๋ฌด๋ฆฌ๋œ ์ดํ›„์— ๋”ฑ ํ•œ๋ฒˆ์€ ์‹ค์ œ DOM์— ์ด ๊ฒฐ๊ณผ๋ฅผ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ๋น„๊ต๋ฅผ ํ†ตํ•ด์„œ ์„ž์ธ ๋ถ€๋ถ„๋“ค์„ ์ฐพ์•„๋‚ด๋Š” ๊ฒƒ์ด๋‹ค!

์œผ์•… ์ด๊ฒŒ ๋ฌด์Šจ ๋ง์ธ์ง€! ์ง€๊ทธ๋‹˜์˜ ์˜ˆ์‹œ๋ฅผ ๋“ค๋ฉด์„œ ์ž์„ธํžˆ ์•Œ์•„๋ณด์Ÿˆ!!!

ํ”Œ๋Ÿฌ์Šค(โž•)๋ฒ„ํŠผ์„ ํ†ตํ•ด ์ด๋ฏธ์ง€๊ฐ€ ์ถ”๊ฐ€๋˜๋Š” ์•ฑ์„ ๋งŒ๋“ค๋ฉด ์ด๋•Œ ์ด๋ฏธ์ง€๊ฐ€ ์ถ”๊ฐ€ ๋  ๋•Œ ๋งˆ๋‹ค ๋ฆฌ์•กํŠธ์—์„œ Virtual DOM์ด ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ• ๊นŒ?

  • โž• ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ์ด๋ฏธ์ง€์˜ ํƒœ๊ทธ ์š”์†Œ๊ฐ€ ํ•˜๋‚˜์”ฉ ์ถ”๊ฐ€ ๋œ๋‹ค.
<img src="์ด๋ฏธ์ง€ ๊ฒฝ๋กœ" alt="์ด๋ฏธ์ง€ ์ด๋ฆ„"/>
  • ์ด ๋•Œ ๋ฐ”๋€ ๋ฐ์ดํ„ฐ์— ๋”ฐ๋ผ ์ „์ฒด Virtual DOM์ด ์—…๋ฐ์ดํŠธ ๋˜์–ด์ง„๋‹ค.
const content =	{
	tagName: 'div',
    attributes: { class: "content"},
  	children: [
      {
      	tagName: "img",
        attributes: { src: "imgsrc" },
      }
    ]
}
  • ๋‚ด๋ถ€์ ์œผ๋กœ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐ์ฒด๋กœ ์ƒ์‚ฐ๋œ Virtual DOM์ด ์—…๋ฐ์ดํŠธ ์ด์ „์— ์‹œ์ ๊ณผ ์–ด๋–ค ๋ถ€๋ถ„์ด ๋‹ฌ๋ผ์กŒ๋Š”์ง€ ๋น„๊ตํ•˜๊ฒŒ ๋˜์–ด์ง„๋‹ค.
  • ์ด ๋•Œ ๋‹ฌ๋ผ์กŒ๋‹ค๊ณ  ํŒŒ์•…ํ•œ ๋ถ€๋ถ„ ์ฆ‰, ์ƒˆ๋กœ์šด ์ด๋ฏธ์ง€ ํƒœ๊ทธ๋งŒ real DOM tree์— ๋ Œ๋”๋ง์ด ๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ฐ˜์˜ ๋‚ด์šฉ์ด ์‹ค์ œ UI์ƒ์— ํ•˜๋‚˜ ์ถ”๊ฐ€๋˜์–ด์„œ ํ‘œ์‹œ๊ฐ€ ๋˜์–ด์ง„๋‹ค.
  • ์ „์ฒด DOM tree๊ฐ€ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค์‹œ ๊ทธ๋ ค์ง€๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ virtual DOM์˜ ๋„์›€์„ ๋ฐ›์•„ ์ด๋ฏธ์ง€ ์š”์†Œ๊ฐ€ ํ•˜๋‚˜ ์ถ”๊ฐ€๋œ ๋ถ€๋ถ„๋งŒ ์ƒˆ๋กœ ๊ทธ๋ ค์ง€๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค!

Virtual DOM์ด DOM๋ณด๋‹ค ๋ฌด์กฐ๊ฑด ๋น ๋ฅผ๊นŒ?

์ •๋‹ต์€ ์•„๋‹ˆ๋‹ค! ์ •๋ณด ์ œ๊ณต๋งŒ ํ•˜๋Š” ์›น ํŽ˜์ด์ง€๋ผ๋ฉด, ์•„๋ฌด๋Ÿฐ ์ธํ„ฐ๋ ‰์…˜์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— DOM tree์˜ ๋ณ€ํ™”๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์•„์„œ, ์ผ๋ฐ˜ DOM์˜ ์„ฑ๋Šฅ์ด ๋” ์ข‹์„ ์ˆ˜ ์žˆ๋‹ค! ๊ทธ๋ฆฌ๊ณ  ์‹ค์ œ Virtual DOM์˜ diff ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ๋น ๋ฅด๊ธด ํ•˜์ง€๋งŒ ์ถ”๊ฐ€์ ์ธ ์ž‘์—…์ด ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•„์š”์— ๋งž๊ฒŒ ๋„์ž…์„ ํ•ด์•ผํ•œ๋‹ค. ํ•˜์ง€๋งŒ SPA๋กœ ์ œ์ž‘๋œ ๊ทœ๋ชจ๊ฐ€ ํฐ ์›นํŽ˜์ด์ง€์—์„œ๋Š” DOM ์กฐ์ž‘์ด ๋งŽ์ด ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์— Virtual DOM์„ ์‚ฌ์šฉํ•ด ๋ธŒ๋ผ์šฐ์ €์˜ ์—ฐ์‚ฐ๋Ÿ‰์„ ์ค„์—ฌ ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค!!!

์ •๋ฆฌ

๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ ๋งˆ๋‹ค DOM์€ ๋งค๋ฒˆ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค์‹œ ํ™”๋ฉด์ด ๊ทธ๋ ค์ง€๋Š” ๋ถˆํ•„์š”ํ•œ ๋ฐ˜๋ณต์ด ๋ฐœ์ƒ๋œ๋‹ค. ๊ทธ๋ž˜์„œ DOM์„ ์กฐ์ž‘ํ•˜๋Š” Virtual DOM์ด ํƒ„์ƒํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. Virtual Dom์€ ๋ณ€ํ™”๊ฐ€ ์‹ค์ œ DOM์—์„œ ์ ์šฉ๋˜๊ธฐ ์ „์— ๊ฐ€์ƒ์˜ DOM์„ ๊ฑฐ์ณ์„œ ๊ณ„์‚ฐ ๋‹จ๊ณ„๋ฅผ ์ค„์ด๊ณ  ํšจ์œจ์ ์ธ DOM์กฐ์ž‘์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“ค์–ด์ค€๋‹ค. ๋งŒ์•ฝ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋Š” ์›น ํŽ˜์ด์ง€๋ผ๋ฉด ์ผ๋ฐ˜ DOM์ด ์„ฑ๋Šฅ์ด ์ข‹์„ ์ˆ˜ ์žˆ๊ณ , ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๋“ฑ ์‚ฌ์šฉ์ž์— ๋”ฐ๋ผ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋Š” ์›นํŽ˜์ด์ง€๋ผ๋ฉด DOM ์กฐ์ž‘์ด ๋งŽ์ด ๋ฐœ์ƒํ•˜๊ธฐ์— ์ƒํ™ฉ์— ๋งž๊ฒŒ virtual DOM์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค!!!!

+) React์˜ Virtual DOM์€ ๋” ๊ณต๋ถ€๋ฅผ ํ•ด์•ผ๊ฒ ๋‹ค... ์•„์ง๋„ ์–ด๋ ต๋‹ค...๐Ÿ˜ข

profile
ํ† ๋งˆํ† ๋งˆํ† 

1๊ฐœ์˜ ๋Œ“๊ธ€

comment-user-thumbnail
2023๋…„ 8์›” 28์ผ

์•ˆ๋…•ํ•˜์„ธ์š”! DOM๊ณผ ๊ฐ€์ƒ DOM์˜ ์ฐจ์ด๋ฅผ ์ž˜ ์ •๋ฆฌํ•ด์ฃผ์…”์„œ ์ถœ์ฒ˜ ๋ฐํžˆ๊ณ  ๋ธ”๋กœ๊ทธ์— ์ผ๋ถ€๋งŒ ๊ฐ€์ ธ๋‹ค ์จ๋„ ๊ดœ์ฐฎ์„๊นŒ์š”~??

๋‹ต๊ธ€ ๋‹ฌ๊ธฐ