DOM์ด๋, HTML ์ฝ๋๋ฅผ ํด์ํด์ ์์๋ค์ ํธ๋ฆฌ ํํ๋ก ๊ตฌ์กฐํํ์ฌ ์น๋ธ๋ผ์ฐ์ ํ๋ฉด์ ๋ํ๊ฒ ํด์ฃผ๋ ์ธํฐํ์ด์ค๋ฅผ ์๋ฏธํ๋ค.
๐ DOM์ ํน์ง
DOM์ JavaScript๋ฅผ ํตํด ๋ฌธ์์ ๋ฌธ์ ์์์ ์ ๊ทผํ์ฌ ์น ํ๋ฉด์ ์ฝํ ์ธ ๋ฅผ ์ถ๊ฐ, ์์ , ์ญ์ ๋๋ ์ด๋ฒคํธ ์ฒ๋ฆฌ๋ฅผ ํ ์ ์๋ค.
DOM์ ๋ค๋ฅธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ค๋ก๋ถํฐ ๋ ๋ฆฝ์ ์ด๊ธฐ ๋๋ฌธ์, ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ง ๊ฐ์ถฐ์ ธ ์๋ค๋ฉด ์๋ฐ์คํฌ๋ฆฝํธ ๋ฟ๋ง ์๋๋ผ ๋ค๋ฅธ ์ธ์ด๋ก๋ ์กฐ์ํ ์ ์๋ค. ex) python xml.dom.minidom
DOM์ ๋
ธ๋๋ค์ ํธ๋ฆฌ ๊ตฌ์กฐ ๋ชจ์์ ํ๊ณ ์๋ค.
๋
ธ๋๋? ๋ชจ๋ HTML ์์๋ค์ ํฌํจํ๊ณ ์์ผ๋ฉฐ event.target์ ๋์์ด ๋๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ์ฝ๋ค.
Parsing
DOM ํธ๋ฆฌ
์ CSSOM ํธ๋ฆฌ
๋ฅผ ๋ง๋ค์ด๋ธ๋ค.
Style
DOM ํธ๋ฆฌ์ CSSOM ํธ๋ฆฌ๋ฅผ ๋งค์นญํ์ฌ Render Tree
๋ฅผ ๋ง๋ค๊ณ ๋ ๋๋ง์ ํ์ํ ๋
ธ๋๋ง ํฌํจํ๋ค. ์๋ฅผ๋ค์ด display:none๊ณผ ๊ฐ์ ์์ฑ์ ๊ฐ์ง ์์๋ ๋ ๋ํธ๋ฆฌ์ ํฌํจ๋์ง ์๋๋ค.
Layout
๋๋น, ๋์ด, postion ๋ฑ ๋ ์ด์์๊ณผ ๊ด๋ จ๋ ๊ฒ์ ๋ ๋ํธ๋ฆฌ์ ์ ๋ฌํ๋ค. ๋ฆฌ๋ ๋๋ง์์๋ reflow
๋ผ๊ณ ํ๋ค.
Paint
๋ ์ด์์๊ณผ ๊ด๋ จ์ด ์๋ ๋๋จธ์ง ๋ชจ๋ ๋์์ธ ์์ฑ์ ๋ ๋ํธ๋ฆฌ์ ์ ๋ฌํ๋ค, ๋ฆฌ๋ ๋๋ง์์๋ repaint
๋ผ๊ณ ํ๋ค.
Composition
์ปดํฌ์งํ
: ํ๋ฉด์์ ๋ณด์ฌ์ง๊ฒ ํ์ธํธ๋ ๋ถ๋ถ์ ํฉ์น๋ ๊ณผ์
๋ธ๋ผ์ฐ์ ์ฑ๋ฅ์ ๋ ๋๋ง ๊ณผ์ ์์ ๊ฐ์ฅ ๋ง์ด ์ก์ ๋จน๊ณ ํธ๊ธฐ ๋ค์ ๋ ์ด์์์ ์ก๊ธฐ ์ํ reflow
๋จ๊ณ๊ฐ ๊ฐ์ฅ ํฌ๋ค. ์ด๋ ๊ฒ ๋ฆฌ๋ ๋๋ง ์ ๋ฐ์ํ๋ ๋ฌธ์ ๋ฅผ ์ํด ๋ ๊ฐ๋ณ๊ฒ ์ฌ์ฉํ๊ธฐ ์ํด ๊ณ ์๋ ๊ฒ์ด virtual DOM
๊ฐ์๋์ ํ๋ง๋๋ก DOM์ ๊ตฌ์กฐ๋ฅผ ํ๋ด๋ธ ์ค์ฌํ์ง ์๋ ๋์ด๋ค. ๋ฅ๋ฅ ์ด๋๊ฐ ๋ ๋ค๋๊ณ ์๋ค๊ณ ์์ํ๋ฉด ํธํ๋ค.
์ค์ Browser DOM์ ๋ฌด๊ฒ๊ธฐ ๋๋ฌธ์ ๊ฐ์๋์ ์๋ธ์คํฌ๋ฆฝํธ ์ค๋ธ์ ํธ๋ก ๋ง๋ค์ด์ ๋จผ์ ๋ฉ๋ชจ๋ฆฌ์์ ์๋ฎฌ๋ ์ด์ ์ ๋๋ ค์ ์ด์ ๊ณผ ๋ฌ๋ผ์ง ๋ถ๋ถ์ ๋น๊ตํด์ ์ฐจ์ด๊ฐ ๋ฐ์ํ๋ ๋ถ๋ถ๋ง ๊ฒฝ์ ์ ์ผ๋ก DOM์ ๋ณํ๋ฅผ ๋ฐ์ํ๋ค.
์ด๋ฌํ Virtual DOM์ ์ฑํํ์ฌ ์ฌ์ฉ ํ๋ ๊ฒ์ด React์ Vue๊ฐ ์์ผ๋ฉฐ,Virtual DOM์ผ๋ก SPA์ ๊ตฌํํ์ฌ ๋ถํ์ํ ๋ ๋๋ง์ ์ค์ด๊ณ ๊น๋นก์ ์๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค์ด๋ธ๋ค.
๊ทธ๋ ์ง๋ ์๋ค. ์ค์ ๋ก ๊ฐ์๋์ ๋ง๋ค์ด๋ด๋ ๊ณผ์ ์กฐ์ฐจ ์์ด ์ฝ๋ฉ ํ ๋ฐ๋ก ๋น๋ํ๋ฉด ์ฆ์ ์ปดํฌ๋ํธ๋ฅผ DOM์ผ๋ก ๋ฐ์ํ๋ ๋ณ๋์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ด ๋์ํ๋ svelte
๋ ์๋ค. (์๋ฐ์คํฌ๋ฆฝํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์๋ ์ปดํ์ผ๋ฌ)
ํ์ง๋ง ์์ง ์ค๋ฒจํธ๋ ๋งค์ฐ ์์ ์ปค๋ฎค๋ํฐ๋ฅผ ํ์ฑํ๊ณ ์๊ณ ์์ง์ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ๋ค์ด ๋น๋ฏธํ๊ณ ๋๊ท๋ชจ ์๋น์ค์๋ ์ ์ ํ์ง ์์ ๋จ์ ๋ ์กด์ฌํ๋ค.