โ๏ธ ์ด๋ฒ ์ ๋ ์ ํตํด ์๊ฒ ๋ ๊ฒ
ํ์ฑ์ด ๋ฌด์์ธ๊ฐ์?
๋ ๋๋ง์ด ๋ฌด์์ธ๊ฐ์?
๋ธ๋ผ์ฐ์ ์ ๋ ๋๋ง ๊ณผ์ ?
script ํ๊ทธ๋ฅผ body ํ๊ทธ ์ตํ๋จ์ ์ถ๊ฐํ๋ ์ด์
<๋ต ๋ฏธ๋ฆฌ๋ณด๊ธฐ>
๐ค ํ์ฑ์ด ๋ฌด์์ธ๊ฐ์?
๐ค ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๋ฌธ๋ฒ์ ๋ง๊ฒ ์์ฑ๋ ํ ์คํธ ๋ฌธ์๋ฅผ ์ฝ๊ณ ์คํํ๊ธฐ ์ํด ํ ํฐ์ผ๋ก ๋ถํดํ๊ณ ํ ํฐ์ ๋ฌธ๋ฒ์ ์๋ฏธ์ ๊ตฌ์กฐ๋ฅผ ๋ฐ์ํ์ฌ ํธ๋ฆฌ ๊ตฌ์กฐ์ ์๋ฃ๊ตฌ์กฐ์ธ ํ์ค ํธ๋ฆฌ๋ฅผ ์์ฑํ๋ ๊ณผ์ ์ ๋งํฉ๋๋ค.
๐ค ๋ ๋๋ง์ด ๋ฌด์์ธ๊ฐ์?
๐ค HTML, CSS, JS๋ก ์์ฑ๋ ๋ฌธ์๋ฅผ ํ์ฑํด์ ๋ธ๋ผ์ฐ์ ์ ์๊ฐ์ ์ผ๋ก ์ถ๋ ฅํ๋ ๊ฒ์ ๋งํฉ๋๋ค.
๐ค ๋ธ๋ผ์ฐ์ ์ ๋ ๋๋ง ๊ณผ์ ?
๐ค
- ๋ธ๋ผ์ฐ์ ๋ ๋ ๋๋ง์ ํ์ํ ๋ฆฌ์์ค๋ฅผ ์์ฒญํ๊ณ ์๋ฒ๋ก๋ถํฐ ์๋ต์ ๋ฐ์ต๋๋ค.
- ๋ธ๋ผ์ฐ์ ์ ๋ ๋๋ง ์์ง์ ์๋ฒ๋ก๋ถํฐ ์๋ต๋ HTML, CSS๋ฅผ ํ์ฑํ์ฌ DOM๊ณผ CSSOM์ ์์ฑํ๊ณ , ์ด๋ฅผ ๊ฒฐํฉํ์ฌ ๋ ๋ ํธ๋ฆฌ๋ฅผ ์์ฑํฉ๋๋ค.
- ๋ธ๋ผ์ฐ์ ์ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ์๋ฒ๋ก๋ถํฐ ์๋ต๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ํ์ฑํ์ฌ AST(abstract syntax tree)*๋ฅผ ์์ฑํ๊ณ ๋ฐ์ดํธ์ฝ๋๋ก ๋ณํํ์ฌ ์คํํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์๋ฐ์คํฌ๋ฆฝํธ๋ DOM API๋ฅผ ํตํด DOM์ด๋ CSSOM๋ฅผ ๋ณ๊ฒฝํ๊ณ , ๋ณ๊ฒฝ๋ DOM๊ณผ CSSOM์ ๋ค์ ๋ ๋ํธ๋ฆฌ๋ก ๊ฒฐํฉ๋ฉ๋๋ค.
- ๋ ๋ ํธ๋ฆฌ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก HTML ์์์ ๋ ์ด์์์ ๊ณ์ฐํ๊ณ ๋ธ๋ผ์ฐ์ ํ๋ฉด์ HTML ์์๋ฅผ ํ์ธํ ํฉ๋๋ค.
๐ค script ํ๊ทธ๋ฅผ body ํ๊ทธ ์ตํ๋จ์ ์ถ๊ฐํ๋ ์ด์
๐ค ๋ธ๋ผ์ฐ์ ๋ ์์์ ์๋๋ฐฉํฅ์ผ๋ก ์์ฐจ์ ์ผ๋ก HTML, CSS, JS๋ฅผ ํ์ฑํ๊ณ ์คํํ๋๋ฐ script ํ๊ทธ๋ฅผ body ํ๊ทธ ์ตํ๋จ์ ์ถ๊ฐํ๋ฉด DOM์ด ์์ฑ๋์ง ์์ ์ํ์์ ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ DOM์ ์กฐ์ํ๋ฉด ์๋ฌ๊ฐ ๋ ์ ์๋๋ฐ ์ด๋ฅผ ๋ฐฉ์งํฉ๋๋ค. ๋ํ ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ์คํ๋๊ธฐ ์ ์ DOM ์์ฑ์ด ์์ฑ๋์ด ๋ ๋๋ง๋๋ฏ๋ก ํ์ด์ง ๋ก๋ฉ ์๊ฐ์ด ๋จ์ถ๋ฉ๋๋ค.
โ๏ธ ๋ธ๋ผ์ฐ์ ์ ํ์ฑ๊ณผ ๋ ๋๋ง ๊ณผ์
- ํ์ฑ parsing
ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๋ฌธ๋ฒ์ ๋ง๊ฒ ์์ฑ๋ ํ ์คํธ ๋ฌธ์๋ฅผ ์ฝ๊ณ ์คํํ๊ธฐ ์ํด ํ ํฐ์ผ๋ก ๋ถํดํ๊ณ ํ ํฐ์ ๋ฌธ๋ฒ์ ์๋ฏธ์ ๊ตฌ์กฐ๋ฅผ ๋ฐ์ํ์ฌ ํธ๋ฆฌ ๊ตฌ์กฐ์ ์๋ฃ๊ตฌ์กฐ์ธ ํ์ค ํธ๋ฆฌ๋ฅผ ์์ฑํ๋ ๊ณผ์ ์ ๋งํ๋ค.
(๋ฐ์ดํธ → ๋ฌธ์ → ํ ํฐ → ๋ ธ๋ → tree ๊ตฌ์กฐ)
- ๋ ๋๋ง rendering
HTML, CSS, JS๋ก ์์ฑ๋ ๋ฌธ์๋ฅผ ํ์ฑํด์ ๋ธ๋ผ์ฐ์ ์ ์๊ฐ์ ์ผ๋ก ์ถ๋ ฅํ๋ ๊ฒ์ ๋งํ๋ค.
- ๋ธ๋ผ์ฐ์ ๋ HTML, CSS, JS, ์ด๋ฏธ์ง, ํฐํธ ํ์ผ ๋ฑ ๋ ๋๋ง์ ํ์ํ ๋ฆฌ์์ค๋ฅผ ์์ฒญํ๊ณ ์๋ฒ๋ก๋ถํฐ ์๋ต์ ๋ฐ๋๋ค.
- ๋ธ๋ผ์ฐ์ ์ ๋ ๋๋ง ์์ง์ ์๋ฒ๋ก๋ถํฐ ์๋ต๋ HTML, CSS๋ฅผ ํ์ฑํ์ฌ DOM๊ณผ CSSOM์ ์์ฑํ๊ณ , ์ด๋ฅผ ๊ฒฐํฉํ์ฌ ๋ ๋ ํธ๋ฆฌ๋ฅผ ์์ฑํ๋ค.
- ๋ธ๋ผ์ฐ์ ์ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ์๋ฒ๋ก๋ถํฐ ์๋ต๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ํ์ฑํ์ฌ AST(abstract syntax tree)*๋ฅผ ์์ฑํ๊ณ ๋ฐ์ดํธ์ฝ๋๋ก ๋ณํํ์ฌ ์คํํ๋ค. ์ด๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ DOM API๋ฅผ ํตํด DOM์ด๋ CSSOM๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ค. ๋ณ๊ฒฝ๋ DOM๊ณผ CSSOM์ ๋ค์ ๋ ๋ํธ๋ฆฌ๋ก ๊ฒฐํฉ๋๋ค.
- ๋ ๋ ํธ๋ฆฌ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก HTML ์์์ ๋ ์ด์์์ ๊ณ์ฐํ๊ณ ๋ธ๋ผ์ฐ์ ํ๋ฉด์ HTML ์์๋ฅผ ํ์ธํ ํ๋ค.
*ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๋ฌธ๋ฒ์ ๋ฐ๋ผ ์์ค ์ฝ๋ ๊ตฌ์กฐ๋ฅผ ํ์ํ๋ ๊ณ์ธต์ ํ๋ก๊ทธ๋จ ํํ (respresentation) ์ ๋๋ค.
ํ ํฐ์ ๋ฌธ๋ฒ์ ์๋ฏธ์ ๊ตฌ์กฐ๋ฅผ ๋ฐ์ํ ํธ๋ฆฌ ๊ตฌ์กฐ์ ์๋ฃ๊ตฌ์กฐ.
โ๏ธ ์์ฒญ๊ณผ ์๋ต
์ ์ ๊ฐ ์ฃผ์์ฐฝ์ url์ ์ ๋ ฅํ๊ณ ์ํฐ๋ฅผ ๋๋ฅธ๋ค.
url์ ํธ์คํธ ์ด๋ฆ์ด DNS๋ฅผ ํตํด IP ์ฃผ์๋ก ๋ณํ๋๊ณ , ์ด IP ์ฃผ์๋ฅผ ๊ฐ๋ ์๋ฒ์๊ฒ ์์ฒญ์ ์ ์กํ๋ค.
- ์คํด๊ณผ ํธ์คํธ๋ง์ผ๋ก ๊ตฌ์ฑ๋ uri๋ฅผ ์ ๋ ฅํด๋ ์๋ฌต์ ์ผ๋ก index.html์ ์๋ตํ๋๋ก ๊ธฐ๋ณธ ์ค์ ๋์ด ์๋ค.
๊ทธ๋ฐ๋ฐ ๋ง์ ์๋ต ๋ฆฌ์์ค๋ฅผ ๋ณด๋ฉด html ํ์ผ ๋ฟ๋ง ์๋๋ผ css, js, ์ด๋ฏธ์ง,ํฐํธ ํ์ผ๋ค๋ ์๋ต๋์ด ์๋ค.
์๋๋ฉด ๋ธ๋ผ์ฐ์ ์ ๋ ๋๋ง ์์ง์ด html์ ํ์ฑํ๋ ๋์ค์ ์ธ๋ถ ๋ฆฌ์์ค๋ฅผ ๋ก๋ํ๋ ํ๊ทธ (link ํ๊ทธ, img ํ๊ทธ, script ํ๊ทธ ๋ฑ์ ๋ง๋๋ฉด html ํ์ฑ์ ์ผ์์ค๋จํ๊ณ ํด๋น ๋ฆฌ์์ค ํ์ผ์ ์๋ฒ๋ก ์์ฒญํ๊ธฐ ๋๋ฌธ์ด๋ค.)
โ๏ธ HTTP๋?
hyperText transfer Protocol์ ์น์์ ๋ธ๋ผ์ฐ์ ์ ์๋ฒ๊ฐ ํต์ ํ๊ธฐ ์ํ ํ๋กํ ์ฝ(๊ท์ฝ)์ด๋ค.
โ๏ธ ๋ ๋ํธ๋ฆฌ
๋ ๋ํธ๋ฆฌ๋ ๋ ๋๋ง์ ์ํ ํธ๋ฆฌ ๊ตฌ์กฐ์ ์๋ฃ๊ตฌ์กฐ์ด๋ค.
๋ธ๋ผ์ฐ์ ํ๋ฉด์ ๋ ๋๋ง๋๋ ๋ ธ๋๋ค๋ก ๊ตฌ์ฑ๋์ด ์๋ค.
(meta ํ๊ทธ or script ํ๊ทธ)์ CSS์ ์ํด ๋นํ์(display:none)๋๋ ๋ ธ๋๋ค์ ํฌํจํ์ง ์๋๋ค.
์์ฑ๋ ๋ ๋ํธ๋ฆฌ๋ ๋ ์ด์์ ๊ณ์ฐ, ํ์ธํ ์ฒ๋ฆฌ์ ์ฌ์ฉ๋๋ค.
๋ ์ด์์ : ๊ฐ html ์์์ ์์น์ ํฌ๊ธฐ ๊ณ์ฐ
ํ์ธํ : ๋ธ๋ผ์ฐ์ ํ๋ฉด์ ํฝ์ ์ ๋ ๋๋ง
โ ๋ ์ด์์ ๊ณ์ฐ๊ณผ ํ์ธํ ์ ๋ค์ ์คํํ๋ ๋ฆฌ๋ ๋๋ง์ ๋น์ฉ์ด ๋ง์ด ๋ค๊ณ , ์ฑ๋ฅ์ ์ ์ํฅ์ ์ฃผ๊ธฐ ๋๋ฌธ์ ๊ฐ๊ธ์ ๋ฆฌ๋ ๋๋ง์ด ๋น๋ฒํ๊ฒ ๋ฐ์ํ์ง ์๋๋ก ์ฃผ์ํด์ผํ๋ค.
โ๏ธ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ฑ๊ณผ ์คํ
์๋ฐ์คํฌ๋ฆฝํธ ํ์ฑ๊ณผ ์คํ์ ๋ธ๋ผ์ฐ์ ์ ๋ ๋๋ง ์์ง์ด ์๋๋ผ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ด ์ฒ๋ฆฌํ๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ํ์ฑํด์ CPU๊ฐ ์ดํดํ ์ ์๋ ์ ์์ค ์ธ์ด๋ก ๋ณํํ๊ณ ์คํํ๋ ์ญํ ์ ํ๋ค.
AST (abstract syntax tree) ์ถ์์ ๊ตฌ๋ฌธ ํธ๋ฆฌ๋ฅผ ์์ฑํ๊ณ ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ฐ์ดํธ์ฝ๋๋ฅผ ์์ฑํ๊ณ ์คํํ๋ค.
(์๋ฐ์คํฌ๋ฆฝํธ ์์ง ์ข ๋ฅ : ๊ตฌ๊ธ ํฌ๋กฌ, v8, spidermonkey ๋ฑ๋ฑ -> ๋ชจ๋ ECMAScript ๋ฅผ ์ค์ํจ)
โ๏ธ ๋ฆฌํ๋ก์ฐ์ ๋ฆฌํ์ธํธ
DOM API๋ก ์ธํด ๋ณ๊ฒฝ๋ DOM๊ณผ CSSOM์ ๋ค์ ๋ ๋ ํธ๋ฆฌ๋ก ๊ฒฐํฉ๋๊ณ ๋ณ๊ฒฝ๋ ๋ ๋ ํธ๋ฆฌ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ ์ด์์๊ณผ ํ์ธํธ ๊ณผ์ ์ ๊ฑฐ์ณ ๋ธ๋ผ์ฐ์ ํ๋ฉด์ ๋ค์ ๋ ๋๋งํ๋ค.
๋ฆฌํ๋ก์ฐ = ๋ ์ด์์ ๊ณ์ฐ์ ๋ค์ ํ๋ ๊ฒ.
๋ฆฌํ์ธํธ = ์ฌ๊ฒฐํฉ๋ ๋ ๋ ํธ๋ฆฌ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ค์ ํ์ธํธ(๋ธ๋ผ์ฐ์ ํ๋ฉด์ ํฝ์ ์ ๋ ๋๋ง)ํ๋ ๊ฒ.
โ๏ธ script ํ๊ทธ๋ฅผ body ํ๊ทธ ์ตํ๋จ์ ์ถ๊ฐํ๋ ์ด์
๋ธ๋ผ์ฐ์ ๋ ์์์ ์๋๋ฐฉํฅ์ผ๋ก ์์ฐจ์ ์ผ๋ก (๋๊ธฐ์ ์ผ๋ก) HTML, CSS, JS๋ฅผ ํ์ฑํ๊ณ ์คํํฉ๋๋ค.
๊ทธ๋์ DOM์ด ์์ฑ๋์ง ์์ ์ํ์์ ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ DOM์ ์กฐ์ํ๋ฉด ์๋ฌ๊ฐ ๋ ์ ์๋๋ฐ ์ด๋ฅผ ๋ฐฉ์งํฉ๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ์คํ๋๊ธฐ ์ ์ DOM ์์ฑ์ด ์์ฑ๋์ด ๋ ๋๋ง๋๋ฏ๋ก ํ์ด์ง ๋ก๋ฉ ์๊ฐ์ด ๋จ์ถ๋ฉ๋๋ค.
โ๏ธ script ํ๊ทธ์ async/defer ์ดํธ๋ฆฌ๋ทฐํธ
์๋ฐ์คํฌ๋ฆฝํธ ํ์ฑ์ ์ํด DOM ์์ฑ์ด ์ค๋จ๋๋ ๋ฌธ์ ๋ฅผ ๊ทผ๋ณธ์ ์ผ๋ก ํด๊ฒฐํ๊ธฐ ์ํด script ํ๊ทธ์ async/defer๋ฅผ ์ถ๊ฐํ ์ ์์ต๋๋ค.
async/defer ์ดํธ๋ฆฌ๋ทฐํธ๋ src ์ดํธ๋ฆฌ๋ทฐํธ๋ฅผ ํตํด ์ธ๋ถ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ์ ๋ก๋ํ๋ ๊ฒฝ์ฐ์๋ง ์ฌ์ฉํ ์ ์์ต๋๋ค.
<script async src="index.js"></script>
<script defer src="index.js"></script>
- async ์ดํธ๋ฆฌ๋ทฐํธ
HTML ํ์ฑ๊ณผ ์ธ๋ถ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ์ ๋ก๋๊ฐ ๋น๋๊ธฐ์ ์ผ๋ก ๋์์ ์งํ๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ์ ํ์ฑ๊ณผ ์คํ์ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ์ ๋ก๋๊ฐ ์๋ฃ๋ ์งํ ์งํ๋๊ณ , ์ด๋ html์ ํ์ฑ์ด ์ค๋จ๋๋ค.
(๋ก๋ ์๋ฃ๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ถํฐ ๋จผ์ ์คํ๋๊ธฐ ๋๋ฌธ์ ์์ ๋ณด์ฅ x)
- defer ์ดํธ๋ฆฌ๋ทฐํธ
HTML ํ์ฑ๊ณผ ์ธ๋ถ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ์ ๋ก๋๊ฐ ๋น๋๊ธฐ์ ์ผ๋ก ๋์์ ์งํ๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ์ ํ์ฑ๊ณผ ์คํ์ html์ ํ์ฑ์ด ์๋ฃ๋ ์งํ (DOM ์์ฑ ํ) ์งํ๋๋ค.
๐ฉ๐ป ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ Deep Dive๋ฅผ ์ ๋ ํ๊ณ ์ ๊ฐ ์ดํดํ ๋ด์ฉ์ ์ ๋ฆฌํ ๊ธ์ ๋๋ค ๐ฉ๐ป
'๐Language > JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Deep Dive] REST API๊ฐ ๋ฌด์์ธ๊ฐ์? (0) | 2022.12.16 |
---|---|
[Deep Dive] DOM๊ณผ ๋ ธ๋ (0) | 2022.12.15 |
[Deep Dive] ํด๋ก์ ์ ๋ ์์ปฌ์ค์ฝํ (0) | 2022.12.12 |
[Deep Dive] this (0) | 2022.12.07 |
[Deep Dive] var, let, const ํค์๋๋ฅผ ํํค์ณ๋ณด์ (0) | 2022.12.07 |