React์ ์๋ ๊ฐ์์ DOM ๊ฐ์ฒด๋ก, ์ค์ DOM์ ์ฌ๋ณธ ๊ฐ์ ๊ฐ๋ ์ด๋ค.
๋ฐ๋ผ์, React๋ ์ค์ DOM ๊ฐ์ฒด๊ฐ ์๋, ๊ฐ์์ DOM ๊ฐ์ฒด์ ์ ๊ทผํ์ฌ ๋ณํ ์ ๊ณผ ๋ณํ ํ๋ฅผ ๋น๊ตํ๊ณ ๋ฐ๋ ๋ถ๋ถ์ ์ ์ฉํ๋ค.
[๊ทธ๋ฆผ]DOM์ ๊ตฌ์กฐ
DOM์ ์์ ๊ฐ์ด ํธ๋ฆฌ๊ตฌ์กฐ๋ฅผ ๊ฐ์ถ๊ณ ์์ผ๋ฉฐ, ํธ๋ฆฌ๋ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ๋ ํจ๊ณผ์ ์ผ๋ก ํ์ํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ ์๋ฃ๊ตฌ์กฐ๋ก, ๋น ๋ฅธ ์๋ฃ ํ์์ด ๊ฐ๋ฅํ๋ค.
๋ฐ๋ผ์, ๋ณ๊ฒฝ ๋ฐ ์ ๋ฐ์ดํธ ์๋ ๋ํ ๋น ๋ฅด์ง๋ง, ๊ฒฐ๊ตญ DOM์ด ๋ณ๊ฒฝ๋๊ณ ์ ๋ฐ์ดํธ๊ฐ ๋๋ค๋ ๊ฒ์ ๋ธ๋ผ์ฐ์ ์ ๋ ๋๋ง ์์ง ๋ํ ๋ฆฌํ๋ก์ฐํ๋ค๋ ๊ฒ์ผ๋ก, DOMํธ๋ฆฌ๋ฅผ ์ฌ๊ตฌ์ถํจ์ผ๋ก์จ ์ฌ๋๋๋ง ๊ณผ์ ์ ๊ฑฐ์ณ UI๋ฅผ ์ ๋ฐ์ดํธ ํด์ผํ๋ค.
๋ฆฌํ๋ก์ฐ, ๋ฆฌํ์ธํธ ๊ณผ์ ์ ๋ ์ด์์ ๋ฐ ํ์ธํธ์ ํด๋นํ๋ ์ฌ์ฐ์ฐ์ ํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๊ทธ ๋งํผ ์๋๊ฐ ๋๋ ค์ง๊ณ , DOM์ ์์๊ฐ ๋ง์์ง ์๋ก ๋ฐ๋ ์ปจํ ์ธ ๋ฅผ ํฌํจํ ๋๋จธ์ง ์ปจํ ์ธ ๋ ๊ฐ์ด ์ ๋ฐ์ดํธ ๋๊ธฐ ๋๋ฌธ์ ์ ๋ฐ์ดํธ ๋น์ฉ์ด ๋ง์ด ๋ค๊ฒ ๋๋ฉฐ ๋นํจ์จ์ ์ด๋ค.
์ด๋ฌํ ๋นํจ์จ์ ์ธ ์ ๋ฐ์ดํธ๊ฐ ๋ฐ๋ณต๋ ์ ๊ทน๋จ์ ์ผ๋ก, ํ๋ ์ ๋๋๊ณผ ๊ฐ์ ์น๋ช ์ ์ธ UX๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค.
๋ฐ๋ผ์, ์์ ๋ฌธ์ ์ ์ ๋ณด์ํ๊ธฐ ์ํด ๋ ๋๋งํ ๋,๋ชจ๋ ์ปจํ ์ธ ๊ฐ ์๋ ๋ฐ๋ ๋ถ๋ถ๋ง ๋น๊ตํด์ ๊ทธ ๋ถ๋ถ๋ง ๋ ๋๋ง ํ ์ ์๋ React์ Virtual DOM์ด ๋ฑ์ฅํ๊ฒ ๋์๋ค.
React์๋ ๋ชจ๋ DOM ๊ฐ์ฒด์ ๋์ํ๋ ๊ฐ์์ DOM ๊ฐ์ฒด๊ฐ ์์ผ๋ฉฐ, ์ค์ DOM ๊ฐ์ฒด์ ๋ค๋ฅด๊ฒ ํ๋ฉด์ ํ์๋๋ ๋ด์ฉ์ ์ง์ ๋ณ๊ฒฝํ๋ ๊ฒ์ด ์๋๋ผ, ๊ฐ์์ UI์์๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ง์ํค๊ณ , ์ ์ง์ํจ ์์๋ฅผ ReactDOM๊ณผ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํตํด ์ค์ DOM๊ณผ ๋๊ธฐํ ์ํจ๋ค.
์๋ฅผ ๋ค๋ฉด, ๊ทธ๋ฆผ์ ๊ทธ๋ฆด ๋ ์ค์ ๋ก ์ํ๋ ๊ทธ๋ฆผ์ ์ง์ ๊ทธ๋ฆฌ๋ ๊ณผ์ (์ค์ DOM ์กฐ์)์ด ์๋๋ผ, ๊ทธ๋ฆผ์ ๊ทธ๋ฆฌ๊ธฐ์ ๋จธ๋ฆฟ์์ผ๋ก ์ํ๋ ๊ทธ๋ฆผ์ ๊ตฌ์ํ๋ ๊ฒ(๊ฐ์ DOM์กฐ์)์ด๋ผ๊ณ ๋ณผ ์ ์๋ค.
๋ฐ๋ผ์, ์ค์ DOM๊ณผ ๋น๊ตํ์ ๋ ์๋์ ์ผ๋ก ์๋๊ฐ ํจ์ฌ ๋น ๋ฅด๋ค.
์๋๋ Virtual DOM์ด ์ค์ DOM์ ์ ๋ฐ์ดํธํ๋ ๊ณผ์ ์ด๋ค.
๋ฐ์ดํฐ ๋ณ๊ฒฝ, ์ ๋ฐ์ดํธ -> ์ ์ฒด UI๋ฅผ Virtual DOM์ ๋ฆฌ๋ ๋๋ง
์ด์ Virtual DOM์ ์๋ ๋ด์ฉ๊ณผ ํ์ฌ ๋ด์ฉ์ ๋น๊ต
๋ฐ๋ ๋ถ๋ถ๋ง ์ค์ DOM์ ์ ์ฉ
์ด๋ฌํ ๊ณผ์ ์ ๊ฑฐ์ณ, Virtual DOM์ ์ค์ DOM์ ๋ณ๊ฒฝ์ ์ํํ ์ ์๋ ์ต์์ ๋ฐฉ๋ฒ์ ๊ณ์ฐํ์ฌ ์ต์ํ์ ์์ ์ ์ํํจ์ผ๋ก์จ ์ค์ DOM์ ์ ๋ฐ์ดํธ ๋น์ฉ์ ์ค์ผ ์ ์๋ค. ๋ฐ๋ผ์, ๋ ๋น ๋ฅธ ๋ ๋๋ง์ ํ ์ ์๋ค.
<html lang="en">
<head>
<meta charset="utf-8">
<title>React App</title>
<script defer="" src="/static/js/bundle.js"></script></head>
<body>
<div id="root">
<div class="App">
<button>toggle</button>
<div class="close">closed</div>
</div>
</div>
</body></html>
๋ณ๊ฒฝ ์ DOM ํธ๋ฆฌ
๋ณ๊ฒฝ ํ DOM ํธ๋ฆฌ
์์ DOM ํธ๋ฆฌ๋ฅผ JavaScript ๊ฐ์ฒด๋ก ํํํ ์ ์์ผ๋ฉฐ, ์ด๋ฅผ ํตํด ์ค์ DOM์ ๊ฑด๋๋ฆฌ์ง ์๊ณ ์์ ๋กญ๊ฒ ์กฐ์ํ ์ ์๋ค.
Reference:
์ฝ๋์คํ ์ด์ธ
https://www.cashapona.com/2019/04/10/the-significance-of-virtual-dom-in-reactjs/
https://dev.to/swarnaliroy94/introduction-to-react-real-dom-virtual-dom-363