๐Ÿ” [์ง๋ฌด ๊ด€๋ จ ์งˆ๋ฌธ] - 08. Virtual DOM์ด ๋ญ”์ง€ ์•„์‹œ๋Š”์ง€?

์กฐ์ค€ํ˜•ยท2021๋…„ 6์›” 22์ผ
0

interview

๋ชฉ๋ก ๋ณด๊ธฐ
13/20
post-thumbnail
  • ์ผ์„ ๋•Œ์˜ ์žฅ์ 
  • ๋ธŒ๋ผ์šฐ์ €์˜ ๋™์ž‘ ์›๋ฆฌ

๐Ÿ’ฌ Answer

๐ŸŒ ๋ธŒ๋ผ์šฐ์ € ๋™์ž‘ ์›๋ฆฌ

์ง€๋‚œ๋ฒˆ์— ํ•œ๋ฒˆ ์ •๋ฆฌ๋ฅผ ํ–ˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ„๋‹จํ•˜๊ฒŒ ์š”์•ฝ๋งŒ ํ•˜๊ณ , ๋„˜์–ด๊ฐ€๋ณด์ž.

  1. HTML ๋งˆํฌ์—…์„ ์ฒ˜๋ฆฌํ•˜๊ณ  DOM ํŠธ๋ฆฌ๋ฅผ ๋นŒ๋“œํ•ฉ๋‹ˆ๋‹ค.
  2. CSS ๋งˆํฌ์—…์„ ์ฒ˜๋ฆฌํ•˜๊ณ  CSSOM ํŠธ๋ฆฌ๋ฅผ ๋นŒ๋“œํ•ฉ๋‹ˆ๋‹ค.
  3. DOM ๋ฐ CSSOM์„ ๊ฒฐํ•ฉํ•˜์—ฌ ๋ Œ๋”๋ง ํŠธ๋ฆฌ๋ฅผ ํ˜•์„ฑํ•ฉ๋‹ˆ๋‹ค.
  4. ๋ Œ๋”๋ง ํŠธ๋ฆฌ์—์„œ ๋ ˆ์ด์•„์›ƒ์„ ์‹คํ–‰ํ•˜์—ฌ ๊ฐ ๋…ธ๋“œ์˜ ๊ธฐํ•˜ํ•™์  ํ˜•ํƒœ๋ฅผ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.
  5. ๊ฐœ๋ณ„ ๋…ธ๋“œ๋ฅผ ํ™”๋ฉด์— ํŽ˜์ธํŠธํ•ฉ๋‹ˆ๋‹ค.

๐ŸŒ Virtual DOM

๐Ÿ‘‰ DOM์ด๋ž€?

DOM์€ Document Object Model๋กœ ๊ฐ์ฒด๋ฆ ํ†ตํ•ด ๊ตฌ์กฐํ™”๋œ ๋ฌธ์„œ๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.
ํŠธ๋ฆฌํ˜•ํƒœ๋กœ ๋˜์–ด ์žˆ์–ด ํŠน์ • node๋ฅผ ์ฐพ๊ฑฐ๋‚˜ ์ˆ˜์ •,์ œ๊ฑฐ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
๋ธŒ๋ผ์šฐ์ €์˜ ๋™์ž‘์€ ๋ ˆ์ด์•„์›ƒ์„ ๊ตฌ์„ฑ(reflow)ํ•˜๊ณ , ์ƒ‰์ƒ๋ณ€๊ฒฝ๋“ฑ(repaint)ํ•˜๋Š”๋ฐ์„œ ์†๋„๊ฐ€ ๋Š๋ ค์ง‘๋‹ˆ๋‹ค.
์ด๋Ÿฐ DOM์ž‘์—…์„ ๊ฐ€์ƒํ™”ํ•˜์—ฌ ๋ฏธ๋ฆฌ ์ฒ˜๋ฆฌํ•œ ๋‹ค์Œ ํ•œ๊บผ๋ฒˆ์— ์ ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด Virtual DOM.

๐Ÿ‘‰ Virtual DOM

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

๐Ÿ‘‰ ์žฅ์ 

DOM์— ๋ณ€ํ™”๊ฐ€ ์ƒ๊ธฐ๊ฒŒ ๋˜๋ฉด
Render Tree๋ฅผ ๋‹ค์‹œ ๋งŒ๋“ค๊ณ , ๋‹ค์‹œ Layout ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์น˜๊ณ , Painting๋‹จ๊ณ„๋ฅผ ๋งˆ์น˜๋ฉฐ ๋ธŒ๋ผ์šฐ์ €์— ์ ์šฉ.
SPA(Single Page Application)์˜ ๊ฒฝ์šฐ DOM ์กฐ์ž‘์ด ๋งŽ์ด ๋ฐœ์ƒํ•˜๋Š”๋ฐ ์ด๋ ‡๊ฒŒ๋˜๋ฉด ์œ„ ๋™์ž‘์ด ์ˆ˜์‹ญ๋ฒˆ ๋ฐ˜๋ณต๋œ๋‹ค.
=> ๋ณ€ํ™”๋ฅผ ์ ์šฉํ•˜๊ธฐ์œ„ํ•ด ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋งŽ์ด ์—ฐ์‚ฐํ•ด์•ผํ•œ๋‹ค๋Š” ์†Œ๋ฆฌ๊ณ , ์ „์ฒด์ ์ธ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋น„ํšจ์œจ์ ์œผ๋กœ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

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

์—ฐ์‚ฐํšŸ์ˆ˜ ์ค„์ด๋Š” ๋™์ž‘์€ DOM fragment์— ๋ณ€ํ™”๋ฅผ ๋ฌถ์–ด ์ ์šฉํ•œ๋‹ค์Œ DOM์—๋˜์ ธ์ฃผ๋ฉด Virtual DOM์— ๋˜์ ธ ์ฃผ๋ฉด๋œ๋‹ค.
ํ•˜์ง€๋งŒ!
์ด ๊ฑธ ์šฐ๋ฆฌ๊ฐ€ ์ง์ ‘ํ•œ๋‹ค๋ฉด ์–ด๋–ค๊ฒŒ ๋ฐ”๋€Œ๊ณ , ๋ฐ”๋€Œ์ง€ ์•Š์•˜๋Š”์ง€ ๊ณ„์† ํŒŒ์•…ํ•˜๊ณ ์žˆ์–ด์•ผํ•˜๋Š”๋ฐ, VirtualDOM์ด ์ด๊ฑธ ์ž๋™์œผ๋กœ ํ•ด์ค€๋‹ค.

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

๐Ÿ‘‰ ์ •๋ฆฌ

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

๐Ÿ“˜ ์ฐธ๊ณ 

https://jw910911.tistory.com/41
https://velog.io/@sangminnn/Why-Virtual-DOM

profile
๊นƒํ—ˆ๋ธŒ : github.com/JuneHyung

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