[React] Virtual DOM

Hannahhhยท2022๋…„ 9์›” 28์ผ
0

React

๋ชฉ๋ก ๋ณด๊ธฐ
21/30

๐Ÿ” Virtual DOM


React์— ์žˆ๋Š” ๊ฐ€์ƒ์˜ DOM ๊ฐ์ฒด๋กœ, ์‹ค์ œ DOM์˜ ์‚ฌ๋ณธ ๊ฐ™์€ ๊ฐœ๋…์ด๋‹ค.

๋”ฐ๋ผ์„œ, React๋Š” ์‹ค์ œ DOM ๊ฐ์ฒด๊ฐ€ ์•„๋‹Œ, ๊ฐ€์ƒ์˜ DOM ๊ฐ์ฒด์— ์ ‘๊ทผํ•˜์—ฌ ๋ณ€ํ™” ์ „๊ณผ ๋ณ€ํ™” ํ›„๋ฅผ ๋น„๊ตํ•˜๊ณ  ๋ฐ”๋€ ๋ถ€๋ถ„์„ ์ ์šฉํ•œ๋‹ค.


[๊ทธ๋ฆผ]DOM์˜ ๊ตฌ์กฐ


DOM์€ ์œ„์™€ ๊ฐ™์ด ํŠธ๋ฆฌ๊ตฌ์กฐ๋ฅผ ๊ฐ–์ถ”๊ณ  ์žˆ์œผ๋ฉฐ, ํŠธ๋ฆฌ๋Š” ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋” ํšจ๊ณผ์ ์œผ๋กœ ํƒ์ƒ‰ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋กœ, ๋น ๋ฅธ ์ž๋ฃŒ ํƒ์ƒ‰์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

๋”ฐ๋ผ์„œ, ๋ณ€๊ฒฝ ๋ฐ ์—…๋ฐ์ดํŠธ ์†๋„ ๋˜ํ•œ ๋น ๋ฅด์ง€๋งŒ, ๊ฒฐ๊ตญ DOM์ด ๋ณ€๊ฒฝ๋˜๊ณ  ์—…๋ฐ์ดํŠธ๊ฐ€ ๋œ๋‹ค๋Š” ๊ฒƒ์€ ๋ธŒ๋ผ์šฐ์ €์˜ ๋ Œ๋”๋ง ์—”์ง„ ๋˜ํ•œ ๋ฆฌํ”Œ๋กœ์šฐํ•œ๋‹ค๋Š” ๊ฒƒ์œผ๋กœ, DOMํŠธ๋ฆฌ๋ฅผ ์žฌ๊ตฌ์ถ•ํ•จ์œผ๋กœ์จ ์žฌ๋žœ๋”๋ง ๊ณผ์ •์„ ๊ฑฐ์ณ UI๋ฅผ ์—…๋ฐ์ดํŠธ ํ•ด์•ผํ•œ๋‹ค.

๋ฆฌํ”Œ๋กœ์šฐ, ๋ฆฌํŽ˜์ธํŠธ ๊ณผ์ •์€ ๋ ˆ์ด์•„์›ƒ ๋ฐ ํŽ˜์ธํŠธ์— ํ•ด๋‹นํ•˜๋Š” ์žฌ์—ฐ์‚ฐ์„ ํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ ๋งŒํผ ์†๋„๊ฐ€ ๋Š๋ ค์ง€๊ณ , DOM์˜ ์š”์†Œ๊ฐ€ ๋งŽ์•„์งˆ ์ˆ˜๋ก ๋ฐ”๋€ ์ปจํ…์ธ ๋ฅผ ํฌํ•จํ•œ ๋‚˜๋จธ์ง€ ์ปจํ…์ธ ๋„ ๊ฐ™์ด ์—…๋ฐ์ดํŠธ ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์—…๋ฐ์ดํŠธ ๋น„์šฉ์ด ๋งŽ์ด ๋“ค๊ฒŒ ๋˜๋ฉฐ ๋น„ํšจ์œจ์ ์ด๋‹ค.

์ด๋Ÿฌํ•œ ๋น„ํšจ์œจ์ ์ธ ์—…๋ฐ์ดํŠธ๊ฐ€ ๋ฐ˜๋ณต๋  ์‹œ ๊ทน๋‹จ์ ์œผ๋กœ, ํ”„๋ ˆ์ž„ ๋“œ๋ž๊ณผ ๊ฐ™์€ ์น˜๋ช…์ ์ธ UX๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.


๋”ฐ๋ผ์„œ, ์œ„์˜ ๋ฌธ์ œ์ ์„ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด ๋ Œ๋”๋งํ•  ๋•Œ,๋ชจ๋“  ์ปจํ…์ธ ๊ฐ€ ์•„๋‹Œ ๋ฐ”๋€ ๋ถ€๋ถ„๋งŒ ๋น„๊ตํ•ด์„œ ๊ทธ ๋ถ€๋ถ„๋งŒ ๋ Œ๋”๋ง ํ•  ์ˆ˜ ์žˆ๋Š” React์˜ Virtual DOM์ด ๋“ฑ์žฅํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.


React์—๋Š” ๋ชจ๋“  DOM ๊ฐ์ฒด์— ๋Œ€์‘ํ•˜๋Š” ๊ฐ€์ƒ์˜ DOM ๊ฐ์ฒด๊ฐ€ ์žˆ์œผ๋ฉฐ, ์‹ค์ œ DOM ๊ฐ์ฒด์™€ ๋‹ค๋ฅด๊ฒŒ ํ™”๋ฉด์— ํ‘œ์‹œ๋˜๋Š” ๋‚ด์šฉ์„ ์ง์ ‘ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ๊ฐ€์ƒ์˜ UI์š”์†Œ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์œ ์ง€์‹œํ‚ค๊ณ , ์œ ์ง€์‹œํ‚จ ์š”์†Œ๋ฅผ ReactDOM๊ณผ ๊ฐ™์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ†ตํ•ด ์‹ค์ œ DOM๊ณผ ๋™๊ธฐํ™” ์‹œํ‚จ๋‹ค.

์˜ˆ๋ฅผ ๋“ค๋ฉด, ๊ทธ๋ฆผ์„ ๊ทธ๋ฆด ๋•Œ ์‹ค์ œ๋กœ ์›ํ•˜๋Š” ๊ทธ๋ฆผ์„ ์ง์ ‘ ๊ทธ๋ฆฌ๋Š” ๊ณผ์ •(์‹ค์ œ DOM ์กฐ์ž‘)์ด ์•„๋‹ˆ๋ผ, ๊ทธ๋ฆผ์„ ๊ทธ๋ฆฌ๊ธฐ์ „ ๋จธ๋ฆฟ์†์œผ๋กœ ์›ํ•˜๋Š” ๊ทธ๋ฆผ์„ ๊ตฌ์ƒํ•˜๋Š” ๊ฒƒ(๊ฐ€์ƒ DOM์กฐ์ž‘)์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

๋”ฐ๋ผ์„œ, ์‹ค์ œ DOM๊ณผ ๋น„๊ตํ–ˆ์„ ๋•Œ ์ƒ๋Œ€์ ์œผ๋กœ ์†๋„๊ฐ€ ํ›จ์”ฌ ๋น ๋ฅด๋‹ค.


์•„๋ž˜๋Š” Virtual DOM์ด ์‹ค์ œ DOM์„ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊ณผ์ •์ด๋‹ค.

  1. ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ, ์—…๋ฐ์ดํŠธ -> ์ „์ฒด UI๋ฅผ Virtual DOM์— ๋ฆฌ๋ Œ๋”๋ง

  2. ์ด์ „ Virtual DOM์— ์žˆ๋˜ ๋‚ด์šฉ๊ณผ ํ˜„์žฌ ๋‚ด์šฉ์„ ๋น„๊ต

  3. ๋ฐ”๋€ ๋ถ€๋ถ„๋งŒ ์‹ค์ œ DOM์— ์ ์šฉ


์ด๋Ÿฌํ•œ ๊ณผ์ •์„ ๊ฑฐ์ณ, Virtual DOM์€ ์‹ค์ œ DOM์— ๋ณ€๊ฒฝ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ์ƒ์˜ ๋ฐฉ๋ฒ•์„ ๊ณ„์‚ฐํ•˜์—ฌ ์ตœ์†Œํ•œ์˜ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•จ์œผ๋กœ์จ ์‹ค์ œ DOM์˜ ์—…๋ฐ์ดํŠธ ๋น„์šฉ์„ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ, ๋” ๋น ๋ฅธ ๋ Œ๋”๋ง์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.




๐Ÿ”ฅ ์˜ˆ์‹œ


<html lang="en">
  <head>
   <meta charset="utf-8">
    <title>React App</title>
  <script defer="" src="/static/js/bundle.js"></script></head>
  <body>
    <div id="root">
      <div class="App">
        <button>toggle</button>
        <div class="close">closed</div>
      </div>
    </div>
</body></html>

๋ณ€๊ฒฝ ์ „ DOM ํŠธ๋ฆฌ


๋ณ€๊ฒฝ ํ›„ DOM ํŠธ๋ฆฌ



์œ„์˜ DOM ํŠธ๋ฆฌ๋ฅผ JavaScript ๊ฐ์ฒด๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ์‹ค์ œ DOM์„ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š๊ณ  ์ž์œ ๋กญ๊ฒŒ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค.




Reference:

์ฝ”๋“œ์Šคํ…Œ์ด์ธ 

https://www.cashapona.com/2019/04/10/the-significance-of-virtual-dom-in-reactjs/

https://dev.to/swarnaliroy94/introduction-to-react-real-dom-virtual-dom-363

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