์ง๋๋ฒ์ ํ๋ฒ ์ ๋ฆฌ๋ฅผ ํ์๊ธฐ ๋๋ฌธ์ ๊ฐ๋จํ๊ฒ ์์ฝ๋ง ํ๊ณ , ๋์ด๊ฐ๋ณด์.
DOM์ Document Object Model๋ก ๊ฐ์ฒด๋ฆ ํตํด ๊ตฌ์กฐํ๋ ๋ฌธ์๋ฅผ ํํํ๋ ๋ฐฉ๋ฒ์
๋๋ค.
ํธ๋ฆฌํํ๋ก ๋์ด ์์ด ํน์ node๋ฅผ ์ฐพ๊ฑฐ๋ ์์ ,์ ๊ฑฐ๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
๋ธ๋ผ์ฐ์ ์ ๋์์ ๋ ์ด์์์ ๊ตฌ์ฑ(reflow)ํ๊ณ , ์์๋ณ๊ฒฝ๋ฑ(repaint)ํ๋๋ฐ์ ์๋๊ฐ ๋๋ ค์ง๋๋ค.
์ด๋ฐ 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