๋ธ๋ผ์ฐ์ ์ ๋ ๋๋ง ๊ณผ์
๐ ๋ ๋๋ง์ด๋?
HTML, CSS, ์๋ฐ์คํฌ๋ฆฝํธ๋ก ์์ฑ๋ ๋ฌธ์๋ฅผ ํ์ฑํ์ฌ ๋ธ๋ผ์ฐ์ ์ ์๊ฐ์ ์ผ๋ก ์ถ๋ ฅํ๋ ๊ฒ
ํ์ฑ(parsing, ๊ตฌ๋ฌธ ๋ถ์): ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๋ฌธ๋ฒ์ ๋ง๊ฒ ์์ฑ๋ ํ ์คํธ ๋ฌธ์๋ฅผ ์ฝ์ด ๋ค์ฌ ์คํํ๊ธฐ ์ํด ํ ์คํธ ๋ฌธ์์ ๋ฌธ์์ด์ ํ ํฐ์ผ๋ก ๋ถํดํ๊ณ , ํ ํฐ์ ๋ฌธ์ ์ ์๋ฏธ์ ๊ตฌ์กฐ๋ฅผ ๋ฐ์ํ์ฌ ํธ๋ฆฌ ๊ตฌ์กฐ์ ์๋ฃ๊ตฌ์กฐ์ธ ํ์ค ํธ๋ฆฌ๋ฅผ ์์ฑํ๋ ์ผ๋ จ์ ๊ณผ์
๐ ๋ ๋๋ง ๊ณผ์
1. ์๋ฒ๋ก๋ถํฐ HTML ํ์ผ์ ๋ฐ๋๋ค.
2. HTML์ ํ์ฑํ๋ฉด์ CSS, ์๋ฐ์คํฌ๋ฆฝํธ, ์ด๋ฏธ์ง ๋ฑ ํ์ํ ๋ฆฌ์์ค๋ฅผ ์์ฒญ.
3. DOM ํธ๋ฆฌ ์์ฑ
4. CSSOM ํธ๋ฆฌ ์์ฑ
5. DOM ํธ๋ฆฌ์ CSSOMํธ๋ฆฌ๋ฅผ ๊ฒฐํฉํ์ฌ Render ํธ๋ฆฌ ์์ฑ
6. Layout - HTML ์์์ ๋ ์ด์์(์์น์ ํฌ๊ธฐ) ๊ณ์ฐ
7. Paint - ํ๋ฉด์ HTML ์์ ๊ทธ๋ฆฌ๊ธฐ
8. Composite - Paint ๋จ๊ณ์์ ๋๋์ด์ง ๋ ์ด์ด๋ค์ ํฉ์ฑํด์ ํ์ด์ง ์์ฑ
๐ 1. ์๋ฒ๋ก๋ถํฐ HTML ํ์ผ์ ๋ฐ๋๋ค.
1. ์๋ฒ๋ ๋ธ๋ผ์ฐ์ ๊ฐ ์์ฒญํ HTML ํ์ผ์ ์ฝ์ด ๋ค์ฌ ๋ฐ์ดํธ(2์ง์)๋ฅผ ์๋ตํ๋ค.
๐ 2. HTML์ ํ์ฑํ๋ฉด์ ํ์ํ ๋ฆฌ์์ค๋ฅผ ์์ฒญํ๋ค.
1. ๋ธ๋ผ์ฐ์ ๋ ๋ฐ์ดํธ ํํ์ HTML ๋ฌธ์๋ฅผ ์ง์ ๋ ์ธ์ฝ๋ฉ ๋ฐฉ์์ ๊ธฐ์ค์ผ๋ก ๋ฌธ์์ด๋ก ๋ณํํ๋ค.
<meta charset='UTF-8'>
2. ๋ฌธ์์ด๋ก ๋ณํ๋ HTML ๋ฌธ์๋ฅผ ์ฝ์ด ์ฝ๋์ ์ต์ ๋จ์์ธ ํ ํฐ๋ค๋ก ๋ถํดํ๋ค.
ํ ํฐ(Token): ๋ฌธ๋ฒ์ ์ผ๋ก ๋๋ ๋๋ ์ ์๋ ์ฝ๋์ ๊ธฐ๋ณธ ์์
3. ๊ฐ ํ ํฐ๋ค์ ๊ฐ์ฒด๋ก ๋ณํํ์ฌ ๋ ธ๋(node)๋ค์ ์์ฑํ๋ค.
4. ์ด ๋ ธ๋๋ค๋ก ๊ตฌ์ฑ๋ ํธ๋ฆฌ ์๋ฃ๊ตฌ์กฐ DOM(Document Object Model)์ ์์ฑํ๋ค.
- ๋ ๋๋ง ์์ง์ HTML์ ์ฒ์๋ถํฐ ํ ์ค์ฉ ์์ฐจ์ ์ผ๋ก ํ์ฑํ์ฌ DOM์ ์์ฑํ๋๋ฐ, <link />, <img />, <script /> ํ๊ทธ๋ฅผ ๋ง๋๋ฉด DOM ์์ฑ์ ์ค์งํ๊ณ ์๋ฒ์ ํ์ํ ๋ฆฌ์์ค๋ฅผ ์์ฒญํ๋ค.
- 1, 2๋ฒ ๊ณผ์
๋ฐ์ดํธ → ๋ฌธ์ → ํ ํฐ → ๋ ธ๋ → DOM
๐ 3. DOM ํธ๋ฆฌ ์์ฑ
HTML ์์๋ ์ค์ฒฉ ๊ด๊ณ๋ฅผ ๊ฐ๋๋ฐ, ์ด ๊ด๊ณ์ ์ํด ์์ ๊ฐ ๋ถ์ ๊ด๊ณ๊ฐ ํ์ฑ๋๋ค. ์ด๋ฌํ HTML ์์ ๊ฐ์ ๋ถ์ ๊ด๊ณ๋ฅผ ๋ฐ์ํ์ฌ ๋ชจ๋ ๋ ธ๋๋ค์ ํธ๋ฆฌ ์๋ฃ๊ตฌ์กฐ๋ก ๊ตฌ์ฑํ๋ค.
์ด ๋ ธ๋๋ค๋ก ๊ตฌ์ฑ๋ ํธ๋ฆฌ ์๋ฃ๊ตฌ์กฐ๋ฅผ DOM(Document Object Model)์ด๋ผ ํ๋ค. ์ฆ, DOM์ HTML ๋ฌธ์๋ฅผ ํ์ฑํ ๊ฒฐ๊ณผ๋ฌผ์ด๋ค.
๐ 4. CSSOM ํธ๋ฆฌ ์์ฑ
์๋ฒ์ ์์ฒญํ CSS ํ์ผ์ด๋, style ํ๊ทธ ๋ด์ CSS๋ฅผ HTML๊ณผ ๋์ผํ ํ์ฑ ๊ณผ์ ์ ๊ฑฐ์น๋ฉฐ CSSOM(CSS Object Model)์ ์์ฑํ๋ค.
๋ฐ์ดํธ → ๋ฌธ์ → ํ ํฐ → ๋ ธ๋ → CSSOM
CSS ํ์ฑ์ด ์๋ฃํ๋ฉด HTML ํ์ฑ์ด ์ค๋จ๋ ์ง์ ๋ถํฐ ๋ค์ HTML์ ํ์ฑํ๊ธฐ ์์ํ์ฌ DOM ์์ฑ์ ์ฌ๊ฐํ๋ค.
๐ 5. DOM ํธ๋ฆฌ์ CSSOMํธ๋ฆฌ๋ฅผ ๊ฒฐํฉํ์ฌ Render ํธ๋ฆฌ ์์ฑ
Render ํธ๋ฆฌ๋ ๋ ๋๋ง์ ์ํ ํธ๋ฆฌ ๊ตฌ์กฐ์ ์๋ฃ๊ตฌ์กฐ์ด๋ค. ๋ฐ๋ผ์ ๋ธ๋ผ์ฐ์ ํ๋ฉด์ ๋ ๋๋ง ๋์ง ์๋ ๋ ธ๋(<meta />, <script /> ํ๊ทธ ๋ฑ)์ CSS์ ์ํด ๋นํ์(display: none)๋๋ ๋ ธ๋๋ค์ ํฌํจํ์ง ์๋๋ค.
๐ 6. Layout - HTML ์์์ ๋ ์ด์์(์์น์ ํฌ๊ธฐ) ๊ณ์ฐ
Render ํธ๋ฆฌ๋ฅผ ๋ฐํ์ผ๋ก ๊ฐ ์์์ ์์น์ ํฌ๊ธฐ๋ฅผ ๊ณ์ฐํ๋ค. (%, rem ๋จ์ → px ๋จ์)
๋ ธ๋ ์ถ๊ฐ/์ญ์ , ์์์ ํฌ๊ธฐ/์์น ๋ณ๊ฒฝ, ์๋์ฐ ๋ฆฌ์ฌ์ด์ง ๋ฑ ๋ ์ด์์์ ์ํฅ์ ์ฃผ๋ ๋ณ๊ฒฝ์ด ๋ฐ์ํ์ ๋, ๋ ์ด์์์ ๋ค์ ๊ณ์ฐํ๋ ๊ฒ์ reflow๋ผ๊ณ ํ๋ค.
reflow: Layout → Paint → Composite ๊ณผ์ ์ฌ์คํ
css ์์ฑ: position, left, top, marign, font-size ๋ฑ๋ฑ
๐ 7. Paint - ํ๋ฉด์ HTML ์์ ๊ทธ๋ฆฌ๊ธฐ
ํ๋ฉด์ ์ฌ๋ฌ Layer๋ก ๋ถ๋ฆฌํ์ฌ ๊ด๋ฆฌํ๋ค. ์ฌ๋ฌ ๋ ์ด์ด๋ก ๋๋๋ ์ด์ ๋ ํน์ ์์๊ฐ ์์ ๋์์ ๋, ๋ณ๊ฒฝ์ด ๋ฐ์ํ ๋ ์ด์ด๋ง ์์ ํ์ฌ ๋ฆฌ๋ ๋๋ง ๋น์ฉ์ ์ค์ผ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
๋ ์ด์์์ ์ํฅ์ด ์๋ ๋ณ๊ฒฝ์ด ๋ฐ์ํ์ ๋, ๋ค์ ํ์ธํธ ํ๋๊ฒ์ repaint๋ผ๊ณ ํ๋ค.
repaint: Paint → Composite ๊ณผ์ ์ฌ์คํ
css ์์ฑ: background, border-radius ๋ฑ๋ฑ
๐งท ์ฐธ๊ณ
1. ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ Deep Dive 38์ฅ
2. https://web.dev/articles/critical-rendering-path/render-tree-construction?hl=ko
3. https://www.youtube.com/watch?v=Mqh13dNI8jc