์ด๋ฒ ๊ณผ์ ์์๋ Core Web Vital์ ๋ํด ์์๋ณด๊ณ ์ด๋ป๊ฒ ์ฑ๋ฅ์ ํฅ์์ํฌ ์ ์๋ ์ง ๋ฐฉ๋ฒ์ ์ฐพ์๋ณด๋ ๊ฒ์ ์งํํ๋ค.
Core Web Vital์๋ LCP, FID, CLS ์ธ๊ฐ์ง๊ฐ ์๋๋ฐ ํด๋น ๋ด์ฉ์ ๋ค์ ๊ฒ์ํ๊ณ ์ดํดํ๋ ๊ณผ์ ์ด ๋ง๋ง์น ์๋ค๊ณ ๋๊ผ๋ค. ๊ทธ ์ด์ ๋ React์์ ํ๋ฉด์ Renderํ๋ ๊ณผ์ ์ด ์ด๋ป๊ฒ ๋์ํ๋์ง ๋ชจ๋ฅด๊ณ DOM์ ๋ฌด์์ด๊ณ ํ๋ฉด์ ์ด๋ป๊ฒ ๊ทธ๋ ค์ง๋์ง ๋ฑ์ ๋ํ ์ดํด๊ฐ ๋ถ์กฑํ๊ธฐ ๋๋ฌธ์ ์งํ์ด ์๋๋ ๋ฌธ์ ์ ์ด ์์๋ค.
์ฒ์ ์ด ๋ด์ฉ์ ์ ํ๋ ๋ค๋ฅธ ์ฌ๋๋ค๋ ๊ฐ์ ์ด๋ ค์์ ๊ฒช์ง ์์๊น ํ๋ ์๊ฐ์ ์ด์ ๋ํด ๊ฐ์ด ๋ค๋ค๋ณด๋ คํ๋ค.
์ฐ์ ๋ค์ ๋ด์ฉ๋ค์ ์ดํด๋ณด๊ธฐ์ ์ ๊ฐ๋จํ๊ฒ Window๋ ๋ฌด์์ธ์ง ๋ณด๊ณ ๋์ด๊ฐ์.
์๋ฐ์คํฌ๋ฆฝํธ์ ์ต์์ ๊ฐ์ฒด / ์ ์ญ ๊ฐ์ฒด / ๋ชจ๋ ๊ฐ์ฒด๊ฐ ์์๋ ๊ฐ์ฒด
๋ธ๋ผ์ฐ์ ๋ฅผ ์๋ฏธํ๋ window๋ผ๋ ์ต์์ ๊ฐ์ฒด๊ฐ ์กด์ฌํ๋ค. ๋ธ๋ผ์ฐ์ ๋ ์ ๋ง์ ๊ฐ์ฒด๋ค๋ก ๊ตฌ์ฑ์ด ๋๋๋ฐ ๊ทธ ์ค ์ต์์
๊ฐ์ฒด๊ฐ ๋ฐ๋ก window์ธ ๊ฒ์ด๋ค. ๊ทธ ์๋ DOM, BOM, JS๊ฐ ์กด์ฌํ๋๋ฐ ํํ JS์ฝ๋๋ก ์์ฑ์ ํ ๋ alert(), comfirm(), ๋ฑ๋ฑ ์ฐ๋ฆฌ๊ฐ ๊ทธ๋ฅ ์ฌ์ฉํ๋ ๋ฉ์๋๋ค ๋ํ window.alert(), window.confirm() ์ด์๋ ๊ฒ์ด๋ค.
๋ธ๋ผ์ฐ์ ๋ ๊ฐ๋จํ๊ฒ ์์ ๊ฐ์ ๊ตฌ์กฐ๋ก ๋์ด์๋ค๊ณ ํ๋ค. ์ฌ๋ฌ ๊ฐ์ฒด๋ค์ Treeํํ๋ก ๊ด๋ฆฌํ๊ณ ์๊ณ ๊ทธ ์ค ์ต์์ ๊ฐ์ฒด๊ฐ Window์ธ ๊ฒ์ด๋ค. ๊ทธ๋ผ ์ด์ DOM,BOM์ ๋ํด ์์๋ณด์.
DOM(๋ฌธ์๊ฐ์ฒด๋ชจ๋ธ) : ๊ฐ์ฒด ์งํฅ ๋ชจ๋ธ๋ก์จ ๊ตฌ์กฐํ๋ ๋ฌธ์๋ฅผ ํํํ๋ ๋ฐฉ์
React๋ฅผ ๊ณต๋ถํ ๋ถ๋ค์ ๋ชจ๋ ํ๋ฒ์ฏค์ ๋ค์ด๋ดค์ ๊ฒ์ด๋ค DOM TREE๋ฅผ ๊ทธ๋ฆฐ๋ค
๋ผ๋ ๋ง์ ํ๋ฒ์ฏค์ ๋ค์ด๋ดค์ ๊ฒ์ด๋ค. ๊ทธ๋ ๋ค๋ฉด DOM TREE๊ฐ ๋ฌด์์ธ๊ฐ?
์ฐ๋ฆฌ๋ React๋ฅผ ํตํด์ ์ฝ๋๋ค์ ์์ฑํ๊ณ ์ด ์ฝ๋๋ฅผ ๋ฐํ์ผ๋ก ํ๋ฉด์ ๋ฌด์์ธ๊ฐ๋ฅผ ๊ทธ๋ ค๋ธ๋ค. ์ด๋ ํญ์ HTML์ฝ๋๊ฐ ์กด์ฌํ ํ ๋ฐ ๋ธ๋ผ์ฐ์ ๋ ์ด HTML์ฝ๋๋ฅผ ์ฝ์ ์ ์๋ค.
HTML์ฝ๋๋ ๋จ์ ๋ฌธ์์ด์ ๋ถ๊ณผํ๊ธฐ ๋๋ฌธ์ด๋ค.
๊ทธ๋ ๊ธฐ์ ๋ธ๋ผ์ฐ์ ๊ฐ HTML tag๋ค์ ์ดํดํ๊ธฐ ์ํด์ ๋ธ๋ผ์ฐ์ ๊ฐ ์ดํด ํ ์์๋ DOM TREEํํ๋ก ๋ณํํ๋ค. ๋ค์๊ณผ ๊ฐ์ ํํ๋ก DOM TREE๊ฐ ๊ตฌ์ฑ๋๋ค.
๋ค์์ ๋ธ๋ผ์ฐ์ ๊ฐ HTML์ ์ดํดํ๋ ๋ฐฉ์์ด๋ค.
ํ์ฑ(Parsing): ๋ธ๋ผ์ฐ์ ๋ HTML ์ฝ๋๋ฅผ ์ฝ๊ณ ํ์ฑํ์ฌ ๋ฌธ์ ๊ตฌ์กฐ๋ฅผ ์ดํดํ๋ค. ์ด ๊ณผ์ ์์ HTML ์ฝ๋๋ ๊ฐ๊ฐ์ ์์(element), ์์ฑ(attribute), ํ
์คํธ ๋
ธ๋(text node) ๋ฑ์ผ๋ก ๋ถ์๋๋ค. ์๋ฅผ ๋ค์ด <div>
์์๋ DOM์์ ํ๋์ ์์ ๋
ธ๋๋ก ํด์๋๊ณ , ์์ฑ๋ค์ ํด๋น ์์ ๋
ธ๋์ ์์ฑ์ผ๋ก ํด์๋๋ค.
DOM ํธ๋ฆฌ ๊ตฌ์ฑ: ํ์ฑ๋ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํ์ผ๋ก ๋ธ๋ผ์ฐ์ ๋ DOM(Document Object Model) ํธ๋ฆฌ๋ฅผ ๊ตฌ์ฑํ๋ค. DOM ํธ๋ฆฌ๋ HTML ๋ฌธ์์ ๊ตฌ์กฐ๋ฅผ ํํํ๋ ํธ๋ฆฌ ๊ตฌ์กฐ์ด๋ฉฐ, ๊ฐ๊ฐ์ ๋
ธ๋๋ HTML ์์๋ฅผ ๋ํ๋ธ๋ค. DOM ํธ๋ฆฌ์ ๋ฃจํธ ๋
ธ๋๋ <html>
์์์ด๊ณ , ๊ทธ ํ์์๋ <head>
์์์<body>
์์ ๋ฑ์ด ํฌํจ๋๋ค.
๋ธ๋ผ์ฐ์ ๋ ์ด๋ ๊ฒ ๊ตฌ์ฑ๋ DOM ํธ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ HTML ๋ฌธ์์ ๋ด์ฉ์ ์ดํดํ๊ณ ๋ ๋๋งํ๋ค. DOM ํธ๋ฆฌ๋ฅผ ํตํด ๋ธ๋ผ์ฐ์ ๋ ๊ฐ ์์์ ์์น, ์คํ์ผ, ์ด๋ฒคํธ ๋ฑ์ ํ์ ํ๊ณ ํ๋ฉด์ ์ ์ ํ ํ์ํ ์ ์๋ค. ๋ฐ๋ผ์ HTML ์ฝ๋๊ฐ DOM ํธ๋ฆฌ๋ก ๊ตฌ์ฑ๋๋ฉด ๋ธ๋ผ์ฐ์ ๋ ํด๋น ๋ฌธ์๋ฅผ ์ดํดํ๊ณ ์ฌ์ฉ์์๊ฒ ํ๋ฉด์ ํ์ํ ์ ์๋ค.
BOM(๋ธ๋ผ์ฐ์ ๊ฐ์ฒด๋ชจ๋ธ) : ์น๋ธ๋ผ์ฐ์ ์ ์ฐฝ์ด๋ ํ๋์์ ์ถ์ํํด์ ํ๋ก๊ทธ๋๋ฐ์ ์ผ๋ก ์ ์ดํ ์ ์๋๋ก ์ ๊ณตํ๋ ์๋จ์ด๋ค.
BOM์ด๋ ์์๊ฐ์ ๊ฒ์ธ๋ฐ ๋ฌด์จ ๋ง์ผ๊น?
BOM์ ์ญํ ์ ์น ๋ธ๋ผ์ฐ์ ์ ๋ฒํผ, URL ์ฃผ์ ์
๋ ฅ ์ฐฝ, ํ์ดํ ๋ฐ ๋ฑ ์น๋ธ๋ผ์ฐ์ ์๋์ฐ ๋ฐ ์นํ์ด์ง์ ์ผ๋ถ๋ถ์ ์ ์ดํ ์ ์๊ฒ๋ ํ๋ ๊ฒ์ด๋ค.
ํํ ์ฌ์ฉํ๋ BOM๊ฐ์ฒด๋ก๋
window: Global Context. ๋ธ๋ผ์ฐ์ ์ฐฝ ๊ฐ์ฒด
screen: ์ฌ์ฉ์ ํ๊ฒฝ์ ๋์คํ๋ ์ด ์ ๋ณด ๊ฐ์ฒด
location: ํ์ฌ ํ์ด์ง์ url์ ๋ค๋ฃจ๋ ๊ฐ์ฒด
navigator: ์น๋ธ๋ผ์ฐ์ ๋ฐ ๋ธ๋ผ์ฐ์ ํ๊ฒฝ ์ ๋ณด ๊ฐ์ฒด
history: ํ์ฌ์ ๋ธ๋ผ์ฐ์ ๊ฐ ์ ๊ทผํ๋ URL history
์ ๊ฐ์ ๊ฒ๋ค์ด ์๋๋ฐ React๋ก ์์ ์ ํด๋ณธ ๋ถ๋ค์ด๋ผ๋ฉด ๋ค๋ค ํ๋ฒ์ฏค์ ์ฌ์ฉํด ๋ดฃ์ ๋ฒํ ๊ฒ๋ค์ด๋ค. ์ฌ์ค ์ด๊ฒ๋ค์ด Window ๊ฐ์ฒด ์๋์์๋ ๊ฒ๋ค ์ด์๋ ๊ฒ์ด๋ค.
๊ทธ๋ ๋ค๋ฉด ์ง๊ธ๊น์ง React๋ฅผ ํตํด ํ๋ฉด์ ๊ทธ๋ฆฌ๊ธฐ ์ ์ ๋ค์์ ์ด๋ค ๋์์ด ์๋์ง ์์ ๋ดค๋๋ฐ ์ด์ ํ๋ฉด์ Renderํ๋ ๊ณผ์ ์๋ ์ด๋ค ๊ณผ์ ์ด ์๋์ง ์์๋ณด์.
๋ชจ๋ ์๋ ๊ฒ์ฒ๋ผ ํ๋ฉด์ ๊ตฌ์ฑํ๊ธฐ ์ํด์๋ HTML,CSS,JSํ์ผ๋ค์ ํ๋๋ก ๋ฌถ์ด์ ํ๋ฉด์ ๊ทธ๋ฆฌ๊ฒ ๋๋ค. ๊ทธ๋ ๋ค๋ฉด ๊ทธ ๊ณผ์ ์ ์ด๋ป๊ฒ ๋ ๊น?
๋ธ๋ผ์ฐ์ ๋ HTML์ ์ดํดํ๊ธฐ ์ํด DOM TREE๋ก ๋ฐ๊พธ๋ ๊ณผ์ ์ด ํ์ํ๋ค.
์ด ๊ณผ์ ์์ HTML์ CSS๊ฐ ํฌํจ ๋๋ค๋ฉด CSSOM(CSS Object Model) Tree ๋ฅผ ๋ ๊ทธ๋ฆฌ๊ฒ ๋๋๋ฐ
์ ์ ๊ฐ์ tree๊ตฌ์กฐ๋ฅผ ๊ฐ๊ฒ ๋๋ค. ๋ ธ๋์์ผ๋ก ๋ ๋ถ๋ถ์ด ๊ฐ ์์์ ์ด๋ค CSS๊ฐ ํฌํจ ๋์๋์ง ํ์ ํ๋ CSSOM Tree์ด๊ณ ์ด๋ฅผ ๋ฐํ์ผ๋ก ํ๋ฉด์ ๊ตฌ์ฑํ๊ฒ ๋๋ค.
DOM Tree ์ CSSOM Tree๋ฅผ ํฉ์ณ์ ๋๋๋ง์ ์ํค๊ธฐ ์ํด Render Tree๋ฅผ ๊ตฌ์ฑํ๊ฒ ๋๋ค.
Layout ๋จ๊ณ์์๋ ๋ ๋ ํธ๋ฆฌ๋ฅผ ํ๋ฉด์ ๋ฐฐ์นํ๊ธฐ ์ํด ์ ํํ ์์น์ ํฌ๊ธฐ๋ฅผ ๊ณ์ฐํ๋ค.
์ต์๋จ์ธ ๋ฃจํธ๋ถํฐ ๋
ธ๋๋ฅผ ์ํํ๋ฉด์ ๋
ธ๋์ ์์น์ ํฌ๊ธฐ๋ฅผ ๊ณ์ฐํ๊ณ ๋ ๋ ํธ๋ฆฌ์ ๋ฐ์ํ๋ค.
์ด ๋จ๊ณ์์๋ ์์ Layout์ด ๊ณ์ฐ๋ ๊ฐ๋ค์ ์ด์ฉํด ์ค์ ํฝ์
๋ก ๋ฐ๊พธ๋ ๋จ๊ณ์ด๋ค.
๊ทธ ํ์ composite
๋จ๊ณ๋ฅผ ๊ฑฐ์ณ์ ์ค์ ํ๋ฉด์ ๋ํ๋ธ๋ค.
React์์๋ ๊ฐ์DOM์ ๋ง๋ค์ด ๊ธฐ์กด DOM๊ณผ ๋ฌ๋ผ์ง ๋ถ๋ถ์ ๋น๊ตํด์ ํ๋ฉด์ ๊ทธ๋ฆฐ๋ค๊ณ ์๊ณ ์๋ค.
ํ๋ฉด์ renderํ๋ ์์ธ์ ๋ทฐํฌํธ์ ํฌ๊ธฐ๋ณ๊ฒฝ, HTML์์์ ๋ณํ์ ๋ฐ๋ผ Layout์ ๋ค์๊ทธ๋ฆฌ๋ ๊ฒฝ์ฐ ๋ฑ์ด ์๋ค.
Render๋ฅผ ๋ค์ ํ๋ ๊ณผ์ ์์ Layout์ ์์ ํ๋ ๊ฒฝ์ฐ Reflow
ํฝ์
๋ง ๋ค์ Renderํ๋ ๊ฒฝ์ฐ๋ฅผ Repaint๋ผ๊ณ ํ๋ค.
๊ทธ๋ ๋ค๋ฉด ์์ ์ดํด๋ณธ ๋ด์ฉ์ ๋ฐํ์ผ๋ก ํ๋ฉด์ ์ด๋ป๊ฒ ๊ทธ๋ ค๋ด๋์ง ์์๋ณด์.
Reflow๊ณผ์ ์ Layout๊ณ์ฐ๋ถํฐ ๋ค์ํ๋ ๊ณผ์ ์ด๋ค. ์ฆ DOM Tree๋ฅผ ๋ค์ ๊ทธ๋ฆฌ๊ฒ ๋๊ณ ์ด๋ DOM์์์ ์์น, ํฌ๊ธฐ ๋ฅผ ๋ค์ ๊ณ์ฐํ๋ ๊ณผ์ ์ด ๋๋ค. Relofw๊ณผ์ ์์ Layout๊ณ์ฐํ Repaint๊ณผ์ ๊น์ง ์งํํด์ผ ํ๋ฏ๋ก ํฐ ๋น์ฉ์ด ๋ฐ์ํ๋ ๊ณผ์ ์ด๋ค.
Repaint๊ณผ์ ์ Layout์ ๊ทธ๋๋ก์ด๊ณ color, backgroundColor, visibility์ ๊ฐ์ ์์ฑ์ด ๋ณํ ๋ ์ผ์ด๋๋ค.
Reflow์๋ ๋ค๋ฅด๊ฒ Repaint๊ณผ์ ํ ๋ฐ๋ก composite๊ณผ์ ์ผ๋ก ๋์ด๊ฐ๊ธฐ ๋๋ฌธ์ ๋น์ฉ์ด ๋ ์ผ ์์
์ด๋ผ๊ณ ๋ณผ ์ ์๋ค. ์ด๋ ์ฑ๋ฅํฅ์์ ์์ธ์ผ๋ก ์์ฉ ํ ์ ์์ด๋ณด์ธ๋ค.
์ดํด๋ฅผ ์ํด ์๋์ ๊ฐ์ ์ฌ์ง์ ์ฒจ๋ถํ๋ค.
์ง๊ธ๊น์ง ์ดํด๋ณธ ๋ด์ฉ์ ๋ฐํ์ผ๋ก Core Web Vital์ ์งํ๋ค์ด ๋ฎ์์ง๋ ์์ธ๊ณผ ๊ฐ์ ๋ฐฉ์์ ๋ํด ์ค๋ง๋ฆฌ๋ฅผ ์ป์ ์ ์์ ๊ฒ ๊ฐ๋ค.
ํ๋ฉด์ ๊ทธ๋ฆฌ๊ธฐ ์ํ ๋ฐฐ๊ฒฝ ์ง์์ ์์์ผ๋ ์ฑ๋ฅ์ ํฅ์ ์ํค๊ธฐ ์ํด์๋ ๋ถํ์ํ ํ์ผ, css ๋ง๋๋ ๊ฒ์ ์ง์ ํด์ผ๊ฒ ๋ค๋ ๊ฒ์ ์ ์ ์๋ค.
์ด๋ฉด์ ๊ณผ์ ์ ์๊ธฐ ์ ๊น์ง ์ ๋ถํ์ํ tag๋ค ์ฌ์ฉํ์ง ์๋ ๋ณ์,ํ์ผ๋ค์ ์์ฑํ๋ฉด ์๋๋์ง ์ ๋ํ ์ดํด ์์ด ์ฝ๋๋ฅผ ์์ฑํ๋๊ฒ ๊ฐ๋ค.
์ด๋ฒ ๊ณผ์ ๋ฅผ ํ๋ฉฐ ๊ณต๋ถํ๋ ๋ด์ฉ์ ๋ฐฐ๊ฒฝ์ง์๋ค๊น์ง ์์๊ฐ๊ณ ์ด๊ฒ์ ๋ฐํ์ผ๋ก ๋ ์ข์ ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ณผ์ ์ด ํ์ํด ๋ณด์ธ๋ค๊ณ ๋๊ผ๋ค. ๋ค๋ค ๊ถ๊ตผํ ๊ฒ์ ์ด์ฌํ ์ฐพ์๋ณด๊ณ ์ฑ์ฅํ๋ ์ฌ๋์ด ๋ ์ ์์ผ๋ฉด ์ข๊ฒ ๋ค.
๋ชจ๋ ๊ฒ์์ด๋ ๋งํฌ๋ฅผ ํตํด ๋ ์์ธํ ๋ด์ฉ๊ผญ ํ์ธํด ๋ดค์ผ๋ฉด ์ข๊ฒ ๋ค.
๊ธด ๊ธ์ ์ฝ์ด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค~~โค
์น์ ์ด๋ฃจ๋ ํต์ฌ ์์๋ฅผ ์์๋ด
์๋ค! - DOM, BOM, JavaScript
BOM (Browser Object Model) ์๋ฒฝ ์ ๋ณตํ๊ธฐ
Reflow ์ Repaint