[React] Virtual DOM

๊ฐ•์€๋น„ยท2022๋…„ 1์›” 10์ผ
0

React

๋ชฉ๋ก ๋ณด๊ธฐ
1/36
post-custom-banner

react ์Šคํ„ฐ๋””์—์„œ ๋ฆฌ์•กํŠธ๋ฅผ ๋‹ค๋ฃจ๋Š” ๊ธฐ์ˆ ์ด๋ผ๋Š” ์ฑ…์„ ์„ ์ •ํ–ˆ๊ณ  ์ด ์ฑ…์„ ์ฝ๊ณ  ๋ฐฐ์šด ๊ฒƒ์„ ๋ฐ”ํƒ•์œผ๋กœ ์ž‘์„ฑ๋˜์—ˆ๋‹ค.


๐ŸŽˆ ๋ฆฌ์•กํŠธ ์ดํ•ด

  • ๋ฆฌ์•กํŠธ๋Š” MVC๋‚˜ MVW ์•„ํ‚คํ…์ฒ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ์™€ ๋‹ฌ๋ฆฌ, ์˜ค์ง V(View)๋งŒ ์‹ ๊ฒฝ์“ฐ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค.
  • ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€ํ•  ๋•Œ๋งˆ๋‹ค ๋ทฐ์— ์–ด๋–ค ๋ณ€ํ™”๋ฅผ ์ค„์ง€ ๊ณ ๋ฏผํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๊ธฐ์กด ๋ทฐ๋ฅผ ๋‚ ๋ ค ๋ฒ„๋ฆฌ๊ณ  ์ฒ˜์Œ๋ถ€ํ„ฐ ์ƒˆ๋กœ ๋ Œ๋”๋งํ•œ๋‹ค.
  • ์ปดํฌ๋„ŒํŠธ: ๋ Œ๋”๋งํ•  React ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์„ ์–ธ์ฒด์ด๋‹ค.
    • ์žฌ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•œ API๋กœ ์ˆ˜๋งŽ์€ ๊ธฐ๋Šฅ๋“ค์„ ๋‚ด์žฅํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ์ปดํฌ๋„ŒํŠธ ํ•˜๋‚˜์— ์ƒ๊น€์ƒˆ์™€ ์ž‘๋™ ๋ฐฉ์‹์„ ์ •์˜ํ•œ๋‹ค.
  • ๋ Œ๋”๋ง: ์‚ฌ์šฉ์ž ํ™”๋ฉด์— ๋ทฐ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ๊ฒƒ (์ดˆ๊ธฐ ๋ Œ๋”๋ง / ์กฐํ™” ๊ณผ์ •)
  • render ํ•จ์ˆ˜
    • ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์–ด๋–ป๊ฒŒ ์ƒ๊ฒผ๋Š”์ง€ ์ •์˜ํ•œ๋‹ค.
    • html ํ˜•์‹์˜ ๋ฌธ์ž์—ด์„ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š๊ณ  ๋ทฐ๊ฐ€ ์–ด๋–ป๊ฒŒ ์ƒ๊ฒผ๊ณ  ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ง€๋‹Œ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
    • ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์—๋Š” ๋˜ ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋‹ค. ์ด๋•Œ render()๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๊ทธ ๋‚ด๋ถ€์— ์žˆ๋Š” ์ปดํฌ๋„ŒํŠธ๋“ค๋„ ์žฌ๊ท€์ ์œผ๋กœ ๋ Œ๋”๋งํ•œ๋‹ค.
    • ์ตœ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ์˜ ๋ Œ๋”๋ง ์ž‘์—…์ด ๋๋‚˜๋ฉด ๋ฐ˜ํ™˜๋œ ์ •๋ณด๋“ค์„ ์‚ฌ์šฉํ•˜์—ฌ HTML ๋งˆํฌ์—…์„ ๋งŒ๋“ค๊ณ , ์‹ค์ œ ํŽ˜์ด์ง€์˜ DOM ์š”์†Œ ์•ˆ์— ์ฃผ์ž…ํ•œ๋‹ค. (์ดˆ๊ธฐ ๋ Œ๋”๋ง)

๐Ÿ˜Ž Virtual DOM

DOM (Document Object Model)

  • HTML, XML ๋ฌธ์„œ์˜ ๊ฐ ์š”์†Œ๋“ค์„ ๊ณ„์ธต์ ์œผ๋กœ ํ‘œํ˜„ํ•˜์—ฌ ๋ฌธ์„œ ๋‚ด ์š”์†Œ๋“ค์„ ์ƒ์„ฑ, ๋ณ€๊ฒฝ, ์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋„๋ก ๋•๋Š” ์ธํ„ฐํŽ˜์ด์Šค

DOM์€ ๊ณผ์—ฐ ๋Š๋ฆด๊นŒ?

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

ํ•ด๊ฒฐ๋ฒ• : DOM์„ ์ตœ์†Œํ•œ์œผ๋กœ ์กฐ์ž‘ํ•œ๋‹ค!

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

๐Ÿ’ก ์ง€์†์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€ํ™”ํ•˜๋Š” ๋Œ€๊ทœ๋ชจ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํšจ์œจ์ ์œผ๋กœ ๊ตฌ์ถ•ํ•˜๊ธฐ ์œ„ํ•ด React ํƒ„์ƒ
๐Ÿ’ก React์™€ Virtual DOM์ด ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ View ์—…๋ฐ์ดํŠธ ์ฒ˜๋ฆฌ ๊ฐ„๊ฒฐ์„ฑ์ด๋‹ค.

๊ด€๋ จ ์˜์ƒ: React and the Virtual DOM

post-custom-banner

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