potatos
๐•๐•’๐•ฆ๐•ฃ๐•ฆ๐•ค
potatos
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ
    • Daily
    • Study
      • CS
      • Network
      • Windows
      • Linux
      • HTML & CSS
      • JavaScript
      • React
      • vue.js
      • Flutter
      • DataBase
      • Elastic Se..
      • Log
      • Coding Tes..
    • Work
      • PC
      • Mobile
      • JPGIF

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ํ™ˆ
  • ํƒœ๊ทธ
  • ๋ฐฉ๋ช…๋ก

๊ณต์ง€์‚ฌํ•ญ

  • notice

์ธ๊ธฐ ๊ธ€

ํƒœ๊ทธ

  • HTML
  • CSS
  • JavaScript
  • Windows
  • ์…€๋ ‰ํ„ฐ
  • ์ˆ˜์ง ์ •๋ ฌ
  • Linux
  • ์œˆ๋„์šฐ
  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ
  • MySQL

์ตœ๊ทผ ๋Œ“๊ธ€

์ตœ๊ทผ ๊ธ€

ํ‹ฐ์Šคํ† ๋ฆฌ

hELLO ยท Designed By ์ •์ƒ์šฐ.
potatos

๐•๐•’๐•ฆ๐•ฃ๐•ฆ๐•ค

Study/React

[React] ๊ฐ€์ƒ ๋”(Virtual DOM)

2022. 7. 8. 14:54

DOM ์ด๋ž€?

DOM์€ Documnet Object Model์˜ ์ค„์ž„๋ง๋กœ, ์›น ํŽ˜์ด์ง€๋ฅผ ์ด๋ฃจ๋Š” ํƒœ๊ทธ๋“ค์„ JS๊ฐ€ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ํŠธ๋ฆฌ ๊ตฌ์กฐ๋กœ ๋งŒ๋“  ๊ฐ์ฒด ๋ชจ๋ธ์„ ๋งํ•œ๋‹ค. ๊ทธ๋Œ€๋กœ ํ’€์–ด์„œ ํ•ด์„ํ•˜๋ฉด ๋ฌธ์„œ ๊ฐ์ฒด ๋ชจ๋ธ์ธ๋ฐ, html, head, body์™€ ๊ฐ™์€ ํƒœ๊ทธ๋“ค์„ JS๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ๋ณด๊ด€ํ•˜๊ณ  ์ด์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ์ฒด์ธ ๊ฒƒ์ด๋‹ค.
๊ฐ„๋‹จํžˆ ๋งํ•ด์„œ DOM์€ HTML์™€ ์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด๋ฅผ ์„œ๋กœ ์ด์–ด์ฃผ๋Š” ์—ญํ• ์„ ํ•˜๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.
JS๋Š” HTML ํƒœ๊ทธ๋“ค์—๊ฒŒ Document๋ผ๋Š” ์ „์—ญ ๊ฐ์ฒด๋ฅผ ํ†ตํ•˜์—ฌ ์ ‘๊ทผํ•ด ์กฐ์ข…ํ•œ๋‹ค. window๋ผ๋Š” ๊ฐ์ฒด๋Š” Document๋ผ๋Š” ์ „์—ญ ๊ฐ์ฒด ์ƒ์œ„์— ์œ„์น˜ํ•ด ์žˆ๋‹ค.
๋ณดํ†ต ๋ณธ์ธ์€ HTML ์ด๋‚˜ React ์ž‘์—…์„ ์‹œ์ž‘ํ•˜๊ธฐ ์ „, ํŽ˜์ด์ง€์˜ DOM ํŠธ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๊ทธ๋ ค ๋ณธ ํ›„์— ์‹œ์ž‘ํ•œ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ํ•˜๋ฉด ์ข€ ๋” ์ฒด๊ณ„์ ์ด๊ณ  ๊น”๋”ํ•œ ์ž‘์—…์„ ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.


Virtual DOM์ด๋ž€?

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

  1. ๋ฐ์ดํ„ฐ ์—…๋ฐ์ดํŠธ -> ์ „์ฒด UI๋ฅผ Virtual DOM์— ๋ฆฌ๋ Œ๋”๋ง
  2. ์ด์ „์˜ Virtual DOM์˜ ๋‚ด์šฉ๊ณผ ํ˜„์žฌ์˜ ๋‚ด์šฉ๋ผ๋ฆฌ ๋น„๊ต
  3. ๋ณ€๊ฒฝ๋œ ๋ถ€๋ถ„๋งŒ ์‹ค์ œ DOM์— ๋ Œ๋”๋ง

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

Virtual DOM์˜ ๋“ฑ์žฅ ์ด์œ 

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

 

  • DOM์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ
    1. 10๊ฐœ์˜ ๋…ธ๋“œ๋ฅผ ํ•˜๋‚˜์”ฉ ์ˆ˜์ •
    2. 10๋ฒˆ์˜ ๋ Œ๋”๋ง ๋ฐœ์ƒ
  • Virtual DOM์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ
    1. 10๊ฐœ์˜ ๋…ธ๋“œ๋ฅผ ํ•˜๋‚˜์”ฉ ์ˆ˜์ •
    2. Virtual DOM๋ผ๋ฆฌ ๋น„๊ตํ•˜๋ฉฐ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ Virtual DOM์— 10๋ฒˆ ๋ฆฌ๋ Œ๋”๋ง
    3. ์‹ค์ œ DOM์— ๋ Œ๋”๋ง

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

React์˜ ๊ฒฝ์šฐ, ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ณ€๊ฒฝ๋œ ๋ถ€๋ถ„๋งŒ ์ƒˆ๋กœ์šด ์ปดํฌ๋„ŒํŠธ๋กœ ์ˆ˜์ •ํ•ด ์ฃผ๋Š” ๊ฒƒ์ด ๋ฆฌ๋ Œ๋”๋ง ๊ณผ์ •์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ผ๋ฐ˜ DOM์„ ์‚ฌ์šฉํ•˜๋Š” ๋ Œ๋”๋ง ๊ณผ์ •์— ๋น„ํ•˜์—ฌ DOM ํŠธ๋ฆฌ์™€ ๋ Œ๋” ํŠธ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š์•„๋„ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

ํ™•์‹คํžˆ ์ง์ ‘ DOM์„ ์ œ์–ดํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋А๋ฆด ์ˆ˜ ์žˆ์ง€๋งŒ, SPA์™€ ๊ฐ™์€ ๋น„๋™๊ธฐ์  ์„œ๋น„์Šค๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

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

 

์ฐธ๊ณ 

- https://moonsbeen.tistory.com/255

- https://velog.io/@mollog/React%EC%97%90%EC%84%9C%EC%9D%98-%EA%B0%80%EC%83%81%EB%8F%94-%EA%B0%9C%EB%85%90

- https://dev-cini.tistory.com/10

'Study > React' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[React] React์™€ Vanilla JS ๊ฐœ๋ฐœ์˜ ์ฐจ์ด์   (0) 2022.07.08
    'Study/React' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • [React] React์™€ Vanilla JS ๊ฐœ๋ฐœ์˜ ์ฐจ์ด์ 
    potatos
    potatos

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”