์ฐ์ DOM์ด๋ ๋ฌด์์ธ๊ฐ ?
Dom์ด๋ Document Object Model(๋ฌธ์ ๊ฐ์ฒด ๋ชจ๋ธ)์ ์ฝ์์ด๋ค.
์ฌ๊ธฐ์ ๋ฌธ์ ๊ฐ์ฒด๋, ์น ๋ธ๋ผ์ฐ์ ์์์ HTML ๋ฌธ์์ JavaScript ๊ฐ ์ ๊ทผํ ์ ์๋๋ก <htmlํ๊ทธ>๋ฅผ ๊ฐ์ฒด(object)์ด๋ค.
HTML์ ๊ณ์ธต๊ตฌ์กฐ๋ฅผ Tree๋ก ๋ํ๋ด๋ฉฐ, DOM์ด ์กด์ฌํจ์ผ๋ก์จ JS๋ฅผ ์ด์ฉํ์ฌ ์์๋ฅผ ์ถ๊ฐ, ์์ , ์ญ์ ํ ์ ์๊ฒ ๋๋ค. (๋ฌธ์ ๊ตฌ์กฐ, ์คํ์ผ, ๋ด์ฉ ๋ฑ์ ๋ณ๊ฒฝํ ์ ์๊ฒ ๋๋ ์ญํ )
ํ์ง๋ง HTML ๋ฌธ์ ์์ ์๋ฐ์คํฌ๋ฆฝํธ๋ ์ด๋ป๊ฒ ์ ๊ทผํ ์ ์์๊น?
๊ทธ๊ฑด ๋ฐ๋ก DOM ์ด๋ผ๋ ๊ฐ์ฒด๋ฅผ ํตํด ์ธ์ ๊ฐ๋ฅํ๋ค๊ณ ์๊ฐํ๋ค.
๊ธฐ์กด ๋ ๋๋ง ๋ฐฉ์์
- ๋ธ๋ผ์ฐ์ ๋ ์๋ฒ๊ฐ ๋ณด๋ด์ค HTML ํ์ผ์ ํด์(Parsing)ํ์ฌ DOM ํธ๋ฆฌ๋ฅผ ๋ง๋ ๋ค.
- ๋ธ๋ผ์ฐ์ ๋ ์๋ฒ๊ฐ ๋ณด๋ด์ค CSS ํ์ผ์ ํด์ํ์ฌ CSSOM ํธ๋ฆฌ๋ ๋ง๋ ๋ค.
- DOM ํธ๋ฆฌ + CSSOM ํธ๋ฆฌ๋ฅผ ๊ฒฐํฉํด ๋ ๋ํธ๋ฆฌ๋ฅผ ๋ง๋ ๋ค.
- ๋ ๋ํธ๋ฆฌ๋ก ๊ฐ ๋ ธ๋์ ์์น์ ํฌ๊ธฐ๋ฅผ ๊ณ์ฐํ ๋ ์ด์์์ ๋ง๋ ๋ค. ๋ทฐํฌํธ(Viewport) ๋ด์์ ๊ฐ ๋ ธ๋๋ค์ ์์น์ ํฌ๊ธฐ๋ฅผ ๊ณ์ฐํ๋ค.
- ๋ ์ด์์ ๊ณ์ฐ์ด ์๋ฃ๋๋ฉด ์ด์ ์์๋ค์ ์ค์ ํ๋ฉด์ ๊ทธ๋ฆฌ๋ ํ์ธํธ(paint)๋ฅผ ํ๋ค.
- ๋ ์ด์์ ๊ณ์ฐ(์ฌ๊ตฌ์ฑ): ๊ฐ ๋ ธ๋๋ค์ด ์ด๋์ ๋ํ๋์ผ ํ ์ง ์คํฌ๋ฆฐ ์ขํ ๊ณ์ฐ
- ํ์ธํธ(Paint): ๋ ๋๋ง๋ ์์์ ์์ ์ ํ๋ ๊ณผ์
DOM์ ๋ฌธ์ ์
DOM์ ์๋ก์ด ์์ฒญ์ด๋ ๋ณ๊ฒฝ์ฌํญ์ด ์์ ๋๋ง๋ค ๋งค๋ฒ ๋ฆฌ๋ ๋๋ง์ ํ๋ค. ํ๊ธ์๋ง ์์ ํด๋ ๋ฆฌ๋ ๋๊ฐ ์ผ์ด๋๋ ๊ฒ์ด๋ค.
DOM ์์ฒด๋ ๋น ๋ฅด๋๋ผ๋ ์์์ ๊ฐ์๊ฐ ์๋ฐฑ๊ฐ,์์ฒ๊ฐ๋ก ๋์ด๋ ๊ฒฝ์ฐ์๋ ๋น์ฐํ ๋๋ ค์ง ์ ๋ฐ์ ์๋ค. ๋งค๋ฒ ์๋กญ๊ฒ ๊ตฌ์ฑํ๊ธฐ ๋๋ฌธ์, ๋ ๋ํ ์์ด ๋ง์ผ๋ฉด ์๋๊ฐ ๋๋ ค์ง๊ฒ ๋๋ค.
ํด๊ฒฐ์ฑ ์ ๋ฐ๋ก ๊ฐ์๋
์์ ๊ฐ์ ์ฑ๋ฅ(์๋) ์ด์์ ๋ํ ๋ฌธ์ ์ ์ ํด๊ฒฐํด์ฃผ๊ธฐ ์ํด์ DOM์ ์ต์ํ์ผ๋ก ์กฐ์ํ ์ ์๋ ๊ฐ์๋์ด ๋ฑ์ฅ ํ๊ฒ๋ ๊ฒ์ด๋ค.
React๋ ๊ฐ์ DOM์ ๋์ ํ์ฌ, HTML ๋งํฌ์ ์ ์๊ฐ์ ์ธ ํํ๋ก ๋ณํํ๋ ์๊ฐ(css๊ฐ ์ ์ฉ๋๊ณ ์์ ๋์ด ๋ฐ์๋๋ ์๊ฐ)์ ์ต์ํ์ DOM ์กฐ์์ ํตํด ์์ ์ ์ฒ๋ฆฌํ์ฌ ๊ฐ์ ํ๊ณ ์ ํ์๋ค.
๊ฐ์๋(Virtual DOM)์
DOM์ ๊ตฌ์กฐ๋ฅผ ํ๋ด๋ธ ํธ๋ฆฌ๊ตฌ์กฐ์ JavaScript ๊ฐ์ฒด์ด๋ค.
์ค์ DOM์ ์กฐ์ํ๋ ๊ฒ ์๋, ๋ฉ๋ชจ๋ฆฌ์ DOM์ ์ถ์ํํ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ์ฒด๋ฅผ ๊ตฌ์ํด ์ฌ์ฉํ๋ ๊ฒ์ด๋ค.
ํ์ํ ๋ถ๋ถ๋ง ๊ณจ๋ผ์ง์ผ๋ฏ๋ก, Reflow, Repaint๊ฐ ํ์ํ ๊ฒ๋ค์ ํ๋ฒ์ ๋ฌถ์ด์ DOM์ ์ ๋ฌํ๋ค.
๋ฐ๋ผ์ ์ฒ๋ฆฌ๋๋ Reflow, Repaint์ ๊ท๋ชจ๊ฐ ์ปค์ง ์ ์์ง๋ง, ํ๋ฒ๋ง ์ฐ์ฐ์ ์ํํ๊ฒ ๋๋ฏ๋ก ๋ฐ๋ณต์ ์ธ ๋ถ๋ถ์ด ์ค์ด๋ค์ด ์ฑ๋ฅ์ด ๊ฐ์ ๋๋ค.
์์ ๊ท๋ชจ์ ๋ ์ด์์์ด ์ฌ๋ฌ๋ฒ ๋ฐ์ํ๋ ๊ฒ๋ณด๋ค ํฐ ๊ท๋ชจ์ ๋ ์ด์์์ด ํ๋ฒ ๋ฐ์ํ๋ ๊ฒ์ ์ฑ๋ฅ์์ ํฐ ์ฐจ์ด๋ฅผ ๋ํ๋ผ ์ ์๋ค.
๋ฆฌ์กํธ๊ฐ ๊ฐ์๋์ ๋ฐ์ํ๋ ์ ์ฐจ
- ๋ฐ์ดํฐ๋ฅผ ์ ๋ฐ์ดํธํ๋ฉด ์ ์ฒด UI๋ฅผ ๊ฐ์๋์ ๋ฆฌ๋ ๋๋ง ํ๋ค.
- ๊ฐ์๋๋ผ๋ฆฌ ๋น๊ตํ๊ณ (์ด์ ๊ฐ์๋์ ์๋ ๋ด์ฉ๊ณผ ํ์ฌ ๋ด์ฉ ๋น๊ต)
- ๋ฐ๋ ๋ถ๋ถ๋ง ์ค์ DOM์ ์ ์ฉํ์ฌ ๋ ๋๋งํ๋ค. (๋ ์ด์์ ๊ณ์ฐ์ ํ๋ฒ๋ง ํ๋ค.)
- ๋ ๋๋ง(Rendering)์ด๋?
- HTML,CSS,JS๋ก ์์ฑ๋ ๋ฌธ์๋ฅผ ํด์ํด์ ๋ธ๋ผ์ฐ์ ์ ์๊ฐ์ ์ผ๋ก ์ถ๋ ฅํ๋ ๊ฒ์ ๋งํ๋ค. ๋๋ก๋ ์๋ฒ์์ ๋ฐ์ดํฐ๋ฅผ HTML๋ก ๋ณํํด์ ๋ธ๋ผ์ฐ์ ์๊ฒ ์ ๋ฌํ๋ ๊ณผ์ (SSR)์ ๊ฐ๋ฅดํค๊ธฐ๋ ํ๋ค.
์ด๋ ๊ฒ Vitual DOM์ ๊ฐ ์ปดํฌ๋ํธ๊ฐ ๋ฐํํ๋ ์๋ฆฌ๋จผํธ๋ฅผ ์ด์ ์ ๋ฐํํ๋ ์๋ฆฌ๋จผํธ์ ๋น๊ตํ๊ณ ๋ค๋ฅธ ๊ฒฝ์ฐ์๋ง ํด๋นํ๋ DOM ๋ ธ๋์ ์์ ์ ์ํํ๋ ๊ฒ์ด๋ค.
๊ทธ๋ ๋ค๋ฉด ์ ๋ง ๊ฐ์๋์ ๋น ๋ฅผ๊น?
๊ฒฐ๋ก ๋ถํฐ ๋งํ์๋ฉด ์๋๋ผ๊ณ ํ ์ ์๋ค.
๋ฆฌ์กํธ ๊ณต์ ๋ ํผ๋ฐ์ค์์ ์ง์์ ์ผ๋ก ๋ฐ์ดํฐ๊ฐ ๋ณํํ๋ ๋๊ท๋ชจ ์ ํ๋ฆฌ์ผ์ด์ ๊ตฌ์ถํ๊ธฐ ๋ผ๋ ๋ฌธ์ฅ์ด ์๋ค. ์ฆ, ๊ฐ๋จํ ์์ (๋จ์ํ ๋ผ์ฐํ ์์ ๊ฐ์)์ผ ๊ฒฝ์ฐ์๋ ๋ฆฌ์กํธ๋ฅผ ์ฌ์ฉํ์ง ์๋ ํธ์ด ๋ ํจ๊ณผ์ ์ผ ๋๋ ์๋ค๋ ๋ง์ด๋ค. ๋ํ ์ฝ๋ ์ต์ ํ๋ฅผ ์ด์ฌํ ํ๋ค๋ฉด ์๋ ๋ฌธ์ ๋ฅผ ๊ฐ์ ํ ์ ์์ ๊ฒ์ด๋ค.
์ ๋ฆฌ
๋ฆฌ์กํธ๋ ์ปดํฌ๋ํธ์ ์ํ๊ฐ์ ๋ณ๊ฒฝ๋๋ฉด UI๋ฅผ ์๋ ์ ๋ฐ์ดํธ ํด์ฃผ๋ ์๋ฐ์คํฌ๋ฆฝํธ UI ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ฉฐ,
๋ฆฌ์กํธ๊ฐ ๊ฐ์๋์ ์ฌ์ฉํ์ฌ ์ค์ DOM์ ์ ๊ทผํ์ฌ ์กฐ์ํ๋ ๋์ , ์ด๋ฅผ ์ถ์ํํ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ์ฒด๋ฅผ ๊ตฌ์ฑํ์ฌ ์ฌ์ฉํ์ฌ DOM ์ฒ๋ฆฌ ํ์๋ฅผ ์ต์ํํ๊ณ ํจ์จ์ ์ผ๋ก ์งํ์ํจ๋ค.
์ฆ state, props, redux store ๋ฑ์ ์ํ๊ฐ์ด ๋ณ๊ฒฝ๋๋ฉด ๋ฆฌ์กํธ๊ฐ ํด๋น ์ปดํฌ๋ํธ ํจ์๋ฅผ ์๋์ผ๋ก ์ฌํธ์ถํ์ฌ ์ฌ๋๋๋ง ํด์ค๋ค. ์ฆ ๊ฐ์๋์ ์ง์ฐ๊ฐ๋ก ๊ณ ์น ๋ถ๋ถ๋ง ๊ณ ์น๋ ๊ฒ๊ณผ ๋น์ทํ ๊ฐ๋ ์ด๋ค.
์ด๋ ๊ฒ ์์ ๊ท๋ชจ์ ๋ ์ด์์์ด ์ฌ๋ฌ๋ฒ ๋ฐ์ํ๋ ๊ฒ๋ณด๋ค ํฐ ํ๋ชจ์ ๋ ์ด์์์ด ํ ๋ฒ ๋ฐ์ํ๋ ๊ฒ์ด ์ฑ๋ฅ์์ ํฐ ์ฐจ์ด๋ฅผ ๋ํ๋ ๊ฒ ๊ฐ๋ค. ๋ฆฌ์กํธ๋ ๊ฐ์๋์ผ๋ก ์์ ๋น๊ต์ ์ผ๊ด ๋ ์ ๋ฐ์ดํธ ๋ฐฉ์์ ์ด์ฉํ์ฌ ์ฑ๋ฅ ํฅ์์ ์ด๋์ด ๋ด๋ ๊ฒ์ด๋ผ ์๊ฐํ๋ค. ๊ทธ๋ ์ง๋ง ๋ฌด์กฐ๊ฑด์ ์ผ๋ก ๋ฆฌ์กํธ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์๋ ํญ์ ๊ธฐ์ ์ ํ๋น์ฑ์ ๊ฒํ ํ๋ฉฐ ๊ฐ๋ฐํ๋ ์์ธ๊ฐ ํ์ํ๋ค.
์ฐธ๊ณ ๋ฌธํ
'TIL > ๐งบ React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ปดํฌ๋ํธ์ ์ํ ๊ด๋ฆฌ๋ฅผ ์ํ "React Hooks" (0) | 2023.01.06 |
---|