๊ฐ€์ƒ DOM

์ •ํ˜œ์ธยท2024๋…„ 9์›” 24์ผ
1

react

๋ชฉ๋ก ๋ณด๊ธฐ
13/14

๐Ÿง ๊ฐ€์ƒ DOM?

๐Ÿ’ก Virtual DOM์€ React๊ฐ€ ๋น ๋ฅด๊ฒŒ UI๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๊ฐœ๋…

โ— ๊ฐ€์ƒ DOM์€ ์‹ค์ œ DOM์„ ์ถ”์ƒํ™”ํ•œ ๊ฒฝ๋Ÿ‰ํ™”๋œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐ์ฒด

โ— UI๋ฅผ ๋น ๋ฅด๊ฒŒ ์—…๋ฐ์ดํŠธํ•˜๊ณ , ๋ธŒ๋ผ์šฐ์ €์˜ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”

โ— React๋Š” ๊ฐ€์ƒ DOM์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ณ€๊ฒฝ๋œ ๋ถ€๋ถ„๋งŒ ํšจ์œจ์ ์œผ๋กœ ์—…๋ฐ์ดํŠธ

โ— React, Vue.js์—์„œ ์‚ฌ์šฉ

โ— ํ•˜์ง€๋งŒ React์—์„œ "๊ณต์‹์ ์œผ๋กœ๋Š”" ๊ฐ€์ƒDOM์ด๋ผ๋Š” ๋‹จ์–ด๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ (๋งŽ์€ ์ด์œ ๊ฐ€ ์žˆ์ง€๋งŒ react๋Š” ์›น๊ฐœ๋ฐœ ์™ธ์—๋„ react native ๋“ฑ DOM ์กฐ์ž‘์ด ์•„๋‹ˆ๋”๋ผ๋„ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ)

โš™๏ธ ๊ฐ€์ƒ DOM์˜ ๋™์ž‘ ๋ฐฉ์‹

  1. ๊ฐ€์ƒ DOM ์ƒ์„ฑ

    ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ Œ๋”๋ง๋˜๋ฉด, React๋Š” ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ์˜ ๊ฐ€์ƒ DOM์„ ์ƒ์„ฑ

    (๊ฐ€์ƒ DOM์€ ์‹ค์ œ DOM๊ณผ ๋™์ผํ•œ ๊ตฌ์กฐ๋ฅผ ๊ฐ–์ง€๋งŒ, ๋ฉ”๋ชจ๋ฆฌ ์ƒ์—์„œ๋งŒ ์กด์žฌํ•˜๋Š” ๊ฐ์ฒด)

  1. ๋ณ€๊ฒฝ ์‚ฌํ•ญ ๋น„๊ต (diffing)

    ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด React๋Š” ์ƒˆ๋กœ์šด ๊ฐ€์ƒ DOM์„ ์ƒ์„ฑํ•˜์—ฌ ์ด์ „ ๊ฐ€์ƒ DOM๊ณผ ๋น„๊ต (="diffing")

  1. ๋ณ€๊ฒฝ๋œ ๋ถ€๋ถ„๋งŒ ์‹ค์ œ DOM์— ๋ฐ˜์˜ (reconciliation)

    ๋ณ€๊ฒฝ๋œ ๋ถ€๋ถ„๋งŒ์„ ์‹ค์ œ DOM์— ์—…๋ฐ์ดํŠธ

    ์ด ๊ณผ์ •์„ reconciliation์ด๋ผ๊ณ  ๋ถ€๋ฅด๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ๋ธŒ๋ผ์šฐ์ €์˜ ๋ถ€๋‹ด์„ ์ค„์ด๊ณ  ์„ฑ๋Šฅ์„ ๋†’์—ฌ์คŒ

const [text, setText] = useState("์•ˆ๋…•");

function updateText() {
  setText("ํ•˜์„ธ์š”");
}

return (
  <div>
    <p>{text}</p>
    <button onClick={updateText}>๋ฒ„ํŠผ</button>
  </div>
);

์œ„ ์ฝ”๋“œ์—์„œ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด setText๊ฐ€ ํ˜ธ์ถœ๋˜์–ด ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ

React๋Š” ๊ฐ€์ƒ DOM์„ ์—…๋ฐ์ดํŠธํ•˜๊ณ , ๋ณ€๊ฒฝ๋œ ๋ถ€๋ถ„(ํ…์ŠคํŠธ)๋งŒ ์‹ค์ œ DOM์— ๋ฐ˜์˜ํ•˜์—ฌ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”

๐Ÿ”จ ๊ฐ€์ƒ DOM์˜ ์žฅ์ 

  1. ๋น ๋ฅธ ๋ Œ๋”๋ง

    React๋Š” ๊ฐ€์ƒ DOM์„ ์‚ฌ์šฉํ•ด UI์˜ ๋ณ€๊ฒฝ์„ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌ

    ๊ฐ€์ƒ DOM์„ ์ด์šฉํ•ด ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ฉ”๋ชจ๋ฆฌ ์ƒ์—์„œ ๊ณ„์‚ฐํ•œ ํ›„, ์‹ค์ œ DOM์— ํ•„์š”ํ•œ ์ตœ์†Œํ•œ์˜ ๋ณ€๊ฒฝ๋งŒ ์ˆ˜ํ–‰ํ•˜๋ฏ€๋กœ ์„ฑ๋Šฅ ํ–ฅ์ƒ

  2. ์ตœ์†Œํ•œ์˜ ์—…๋ฐ์ดํŠธ

    ๋ณ€๊ฒฝ๋œ ๋ถ€๋ถ„๋งŒ ์‹ค์ œ DOM์— ๋ฐ˜์˜ํ•˜๋ฏ€๋กœ, ๋ถˆํ•„์š”ํ•œ DOM ์กฐ์ž‘์ด ์ตœ์†Œํ™”

    ํŠนํžˆ DOM ์กฐ์ž‘์ด ์„ฑ๋Šฅ์— ํฐ ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ๋ณต์žกํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ํšจ๊ณผ์ 

  3. ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„ ์ตœ์†Œํ™”


์ฐธ๊ณ 

https://doqtqu.tistory.com/316
https://junilhwang.github.io/TIL/Javascript/Design/Vanilla-JS-Virtual-DOM/#_2-jsx

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