โ๏ธParsing(ํ์ฑ)์ด๋?
HTML ํ์ผ์ ํด์ํ์ฌ DOM(Document Object Model) Tree๋ฅผ ๊ตฌ์ฑํ๋ ๋จ๊ณ์ด๋ค.
safari -> Webkit
Firefox -> Gecko
Chrome -> Blink
1) HTML, CSS, JS, ์ด๋ฏธ์ง ๋ฑ ์นํ์ด์ง์ ํฌํจ๋ ๋ชจ๋ ์์๋ค์ ํ๋ฉด์ ๋ณด์ฌ์ค๋ค.
2) ์ ๋ฐ์ดํธ๊ฐ ํ์ํ ๋, ํจ์จ์ ์ผ๋ก ๋ ๋๋ง์ ํ ์ ์๋๋ก ์๋ฃ ๊ตฌ์กฐ๋ฅผ ์์ฑํ๋ค.
Critical Rendering Path
1. ๋ธ๋ผ์ฐ์ ๋ HTML, CSS, JS, ์ด๋ฏธ์ง, ํฐํธ ๋ฑ ๋ฆฌ์์ค๋ฅผ ์๋ฒ์ ์์ฒญํ๊ณ , ์๋ต์ผ๋ก ๋ฐ์์จ๋ค.
2. ๋ธ๋ผ์ฐ์ ๋ ๋๋ง ์์ง์ ๋ฐ์์จ HTML, CSS๋ฅผ ํ์ฑํด DOM, CSSOM์ ์์ฑํ๊ณ , ์ด๋ค์ ๊ฒฐํฉํด ๋ ๋ ํธ๋ฆฌ๋ฅผ ์์ฑํ๋ค.
3. ๋ธ๋ผ์ฐ์ JS ์์ง์ ๋ฐ์์จ JS๋ฅผ ํ์ฑํด AST๋ฅผ ์์ฑํ๊ณ , ๋ฐ์ดํธ์ฝ๋๋ก ๋ณํํด ์คํํ๋ค.
4. ๋ ๋ํธ๋ฆฌ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก HTML ์์์ ๋ ์ด์์(์์น, ํฌ๊ธฐ)์ ๊ณ์ฐํ๋ค.
5. ํ๋ฉด์ HTML์์๋ฅผ ํ์ธํ ํ๋ค.
: ๋ธ๋ผ์ฐ์ ๋ ์ฐ์ ํ์ํ ๋ฆฌ์์ค(HTML, CSS, JS, ์ด๋ฏธ์ง, ํฐํธ..)๋ฅผ ์๋ฒ์ ์์ฒญํ๊ณ , ์๋ต์ผ๋ก ๋ฐ์์์ผ ํ๋ค.
: ์๋ต์ผ๋ก ๋ฐ์์จ HTML ๋ฌธ์๋ฅผ ๋ธ๋ผ์ฐ์ ๊ฐ ์ดํดํ ์ ์๋ ํํ๋ก ๋ฐ๊พธ๋ ์์ ์ด ํ์ํ๋ฐ, ์ฌ๊ธฐ์ ๋งํ๋ ํํ๊ฐ ๋ฐ๋ก DOM ๊ตฌ์กฐ์ด๋ค.
HTML ๋ฌธ์๋ฅผ DOMํํ๋ก ํ์ฑํ๊ธฐ ์ํด์ ๋ค์๊ณผ ๊ฐ์ ๋จ๊ณ๋ฅผ ๊ฑฐ์น๋ค.
- ๋ฐ์ดํธ(Bytes) : ์๋ฒ๋ ๋ธ๋ผ์ฐ์ ์๊ฒ 2์ง์ ํํ์ HTML ๋ฌธ์๋ฅผ ์๋ต์ผ๋ก ์ค๋ค.
- ๋ฌธ์์ด(Characters) : ๋ฌธ์๋ ์ charset ์์ฑ์ ์ง์ ๋ ๋ฐฉ์์ผ๋ก ๋ฌธ์์ด๋ก ์ธ์ฝ๋ฉ ๋๋ค.(ex. UTF-8) ์๋ฒ๋ ์ด ์ธ์ฝ๋ฉ ๋ฐฉ์์ ์๋ต ํค๋์ ๋ด์์ค๋ค.
- ํ ํฐ(Tokens) : ๋ฌธ์์ด ํํ์ HTML๋ฌธ์๋ฅผ 'ํ ํฐ'๋จ์๋ก ๋ถํดํ๋ค. (๋ฌธ๋ฒ์ ์๋ฏธ๋ฅผ ๊ฐ๋ ์ฝ๋์ ์ต์ ๋จ์)
- ๋ ธ๋(Nodes) : ๊ฐ ํ ํฐ์ ๊ฐ์ฒด๋ก ๋ณํํด, ๋ ธ๋๋ฅผ ์์ฑํ๋ค. (DOM์ ๊ตฌ์ฑํ๋ ๊ธฐ๋ณธ ์์)
- DOM : HTML๋ฌธ์์ ์์๋ค์ ์ค์ฒฉ๊ด๊ณ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ ธ๋๋ค์ ํธ๋ฆฌ ๊ตฌ์กฐ๋ก ๊ตฌ์ฑํ๋ค. ์ด ํธ๋ฆฌ๋ฅผ DOM์ด๋ผ๊ณ ํ๋ค.

์์ ๊ฐ์ ๊ณผ์ ์ ๊ฑฐ์ณ์ HTML ๋ฌธ์๊ฐ ํ์ฑ๋๊ณ , DOM ์ด๋ผ๋ ๊ฒฐ๊ณผ๋ฌผ์ ์์ฑํ๊ฒ ๋๋ค. ๋ธ๋ผ์ฐ์ ๋ Javascript ์ธ์ด๋ง ์์๋ฃ๋๋ฐ, Javascript๋ HTML์ ํ๊ทธ๋ ์์ฑ๋ค์ ๋ฐ๋ก ๋ค๋ฃฐ ์ ์๊ธฐ ๋๋ฌธ์, ๋ค๋ฃฐ ์ ์๋ ํํ์ธ '๊ฐ์ฒด'๋ก ๋ฐ๊ฟ์ฃผ์ด์ผ ํ๋ค. ๊ทธ๋์ผ ๋ธ๋ผ์ฐ์ ๋ HTML ๋ฌธ์๋ฅผ ์ดํดํ ์ ์๊ฒ ๋๋ค.
CSSํ์ผ๋ ๋ง์ฐฌ๊ฐ์ง๋ก ํ์ฑ๊ณผ์ ์ ๊ฒช๊ณ CSSOM Tree๊ฐ ๋ง๋ค์ด์ง๋ค.
์๊ณผ์ ์ ๊ฒช์ด DOM๊ณผ CSSOM์ด ์์ฑ๋๊ณ ๋ํ ํ๋ฉด์ ๋ณด์ฌ์ง ๋ ๋ํธ๋ฆฌ๋ฅผ ๋ง๋ ๋ค.
๋ ๋ํธ๋ฆฌ๋ ๋ง๊ทธ๋๋ก ๋ธ๋ผ์ฐ์ ํ๋ฉด์ ๋ ๋๋ง ๋๊ธฐ์ํ ํธ๋ฆฌ๋ก DOM๊ณผ CSSOM์ ํฉ์ณ ํ๋ฉด์ ๋ณด์ฌ์ง๋ ๋ถ๋ถ๋ง ํฌํจ์ํจ ํธ๋ฆฌ์ด๋ค.
:๋ ๋๋ง ์์ง์ HTML ํ์ผ์ ํ์ค์ฉ ํ์ฑํ๋ฉฐ DOM์ ์์ฑํ๋ค๊ฐ Javascript ์ฝ๋๋ค ๋ถ๋ฌ์ค๋ ํ๊ทธ๋ฅผ ๋ง๋ ๋๋ ํ์ฑ์ ์ ์ ๋ฉ์ถ๋ค. ๊ทธ๋ฆฌ๊ณ ๋์ src ์์ฑ์ ์ ํ์๋ ํ์ผ์ ์๋ฒ์ ์์ฒญํด ๋ฐ์์จ๋ค.
์ด๋ ๊ฒ ๋ฐ์์จ jsํ์ผ๋ ๋ง์ฐฌ๊ฐ์ง๋ก ํ์ฑ์ ํด์ผํ๋๋ฐ, ์ด ํ์ฑ์ ๋ธ๋ผ์ฐ์ ๋ ๋๋ง ์์ง์ด ์ง์ ํ์ง ์๊ณ , Javascript ์์ง์ด ๋ด๋นํ๊ฒ ๋๋ค. ์ด ๋ ๋ ๋๋ง ์์ง์ JS์์ง์๊ฒ ์ ์ด๊ถ์ ์์ ๋๊ฒจ์ฃผ๊ธฐ ๋๋ฌธ์, HTML ํ์ฑ์ ๋ฉ์ท๋ค๊ฐ jsํ์ฑ์ด ๋ค๋๋ฉด ๋ค์ ์ ์ด๊ถ์ ๋๋ ค๋ฐ์ ํ์ฑ์ ๋ค์ ์์ํ๋ ๊ฒ์ด๋ค.
JS์์ง์ jsํ์ผ์ ์ฝ๋๋ฅผ ํ์ฑํด์ ์ปดํจํฐ๊ฐ ์ดํดํ ์ ์๋ ๊ธฐ๊ณ์ด๋ก ๋ณํํ๊ณ ์คํํ๋ค. ์ข ๋ ๊ตฌ์ฒด์ ์ผ๋ก ์ดํด๋ณด๋ฉด, ๋จผ์ ๋จ์ํ ํ ์คํธ ๋ฌธ์์ด์ธ ์ฝ๋๋ฅผ ํ ํฐ ๋จ์๋ก ๋ถํดํ๋ค. ์ด๋ ๊ฒ ๋ถํด๋ ํ ํฐ์ ๋ฌธ๋ฒ์ ์ธ ์๋ฏธ์ ๊ตฌ์กฐ๊ฐ ๋ํด์ ธ, AST(์ถ์ ๊ตฌ๋ฌธ ํธ๋ฆฌ) ๋ผ๋ ํธ๋ฆฌ๊ฐ ์์ฑ๋๋ค.
: ๋ ๋ํธ๋ฆฌ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก HTML ์์์ ๋ ์ด์์(์์น, ํฌ๊ธฐ)์ ๊ณ์ฐํ๋ค.
๋ธ๋ผ์ฐ์ ๋ ๊ฐ ์์๋ค์ด ์ ์ฒด ํ๋ฉด์์ ์ด๋์, ์ด๋ค ํฌ๊ธฐ๋ก ๋ฐฐ์น๋์ด์ผ ํ ์ง ํ์ ํ๊ธฐ ์ํด ๋ ๋ํธ๋ฆฌ์ ๋งจ ์๋ถ๋ถ๋ถํฐ ์๋๋ก ๋ด๋ ค๊ฐ๋ฉฐ ๊ณ์ฐ์ ์งํํ๋ค. ๋ชจ๋ ๊ฐ๋ค์ ์ ๋์ ์ธ ๋จ์์ธ px๊ฐ์ผ๋ก ๋ณํ๋๋ค.
: ํ๋ฉด์ HTML์์๋ฅผ ํ์ธํ ํ๋ค.
๋ธ๋ผ์ฐ์ ํ๋ฉด์ ํฝ์ ์ด๋ผ๊ณ ํ๋ ์ ๋ง ์์ ์ ๋ค๋ก ์ด๋ฃจ์ด์ ธ ์๋ค. ๊ฐ๊ฐ ์ ๋ณด๋ฅผ ๊ฐ์ง ํฝ์ ๋ค์ด ๋ชจ์ฌ ํ๋์ ์ด๋ฏธ์ง, ํ๋ฉด์ ๊ตฌ์ฑํ๋ ๊ฒ์ด๋ค. ๋ฐ๋ผ์ ํ๋ฉด์ ์์์ ์ ํ๊ณ , ์ด๋ค ์์๋ฅผ ๋ณด์ฌ์ฃผ๊ธฐ ์ํด์๋ ์ด ํฝ์ ์ ๋ํ ์ ๋ณด๊ฐ ์์ด์ผ ํ๋ค. ํ์ธํ ์ ์ด๋ฌํ ํฝ์ ๋ค์ ์ฑ์๋๊ฐ๋ ๊ณผ์ ์ด๋ค. ๋ฐ๋ผ์ ์ด ๊ณผ์ ์ ๋ง์ง๋ง์ผ๋ก ์ฐ๋ฆฌ๋ ๋จ์ํ ํ ์คํธ์ ๋ถ๊ณผํ๋ ํ์ผ ๋ด์ฉ๋ค์ ์ด๋ฏธ์งํ๋ ๋ชจ์ต์ผ๋ก ๋ธ๋ผ์ฐ์ ํ๋ฉด์ ํตํด ๋ณผ ์ ์๊ฒ๋๋ ๊ฒ์ด๋ค.
- ๋ฆฌํ๋ก์ฐ, ๋ฆฌํ์ธํธ
๋ฆฌํ๋ก์ฐ = ๋ ์ด์์ ๊ณ์ฐ์ ๋ค์ํ๋ ๊ฒ
๋ฆฌํ์ธํธ = ์๋ก์ด ๋ ๋ํธ๋ฆฌ๋ฅผ ๋ฐํ์ผ๋ก ๋ค์ ํ์ธํธ๋ฅผ ํ๋ ๊ฒ

๋ง์ฝ ์ฌ์ฉ์๊ฐ ๋ธ๋ผ์ฐ์ ํ๋ฉด์ ๋๋ฆฌ๊ฑฐ๋ ์ค์ด๋ ๋ฑ ํฌ๊ธฐ๋ฅผ ์กฐ์ ํ๊ฑฐ๋, ์ด๋ค ๋ฒํผ์ ๋๋ฌ ํ๋ฉด์ ์์๊ฐ ์ถ๊ฐ๋๊ฑฐ๋ ์ญ์ ๋๋ ๊ฒฝ์ฐ๊ฐ ์๊ธฐ๋ฉด, ๋น์ฐํ ํ๋ฉด์ ์๋ ์์๋ค์ ์์น๋ ํฌ๊ธฐ ๋ฑ์ด ๋ฐ๋๋ ์ผ์ด ์๊ธฐ๊ฒ ๋ ๊ฒ์ด๋ค. ๊ต์ฅํ ๋น์ฐํ๊ฒ ์ฌ๊ฒจ์ง์ง๋ง, ์ด๋ ๊ฒ ํ๋ฉด์ ๋ํ๋๋ ๋ชจ์ต์ ๋ฐ๊พธ๊ธฐ ์ํด์๋ ๋ชจ๋ ์์๋ค์ ์์น์ ํฌ๊ธฐ๋ฅผ ๋ค์ ๊ณ์ฐํ๊ณ , ๋ค์ ๊ทธ๋ ค์ ๋ณด์ฌ์ฃผ์ด์ผ ํ๋ค. ์ด๋ ๊ฒ ์ด๋ค ์ธํฐ๋์ ์ผ๋ก ์ธํด ์์ ๋ณด์๋ ๋ ์ด์์, ํ์ธํ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ ๊ฒ์ ๋ฆฌํ๋ก์ฐ, ๋ฆฌํ์ธํธ๋ผ๊ณ ํ๋ค.
DOM ์กฐ์์ ๋ฆฌํ๋ก์ฐ, ๋ฆฌํ์ธํ ์ด ์ผ์ด๋๋ ๋ํ์ ์ธ ์์๋ผ๊ณ ํ ์ ์๋ค.