์ฐธ๊ณ ์๋ฃ: ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ Deep Dive, ์๋ฆฌ Dream Coding(https://www.youtube.com/watch?v=tJieVCgGzhs&t=907s)
๋ธ๋ผ์ฐ์ ๋ ๋๋ง ์๋ฆฌ์ ๋ํด์ ์ค๋ช
ํด๋ณด์ธ์.
์ค๋์ ๋ชฉํ
HTML, CSS, ์๋ฐ์คํฌ๋ฆฝํธ๋ก ์์ฑ๋ ํ
์คํธ ๋ฌธ์๋ฅผ ์ด๋ป๊ฒ ํ์ฑ(ํด์)ํ์ฌ ๋ธ๋ผ์ฐ์ ์ ๋ ๋๋งํ๋์ง ์์๋ณด๊ธฐ
ํ์ฑ(parsing): parse(๋ถ์ํ๋ค)
๋ฆฌ์์ค๋: resource(์ฌ๋ฃ, ์์ฐ)
๋ ๋๋ง์ด๋?: render(๋ง๋ค๋ค)
์น ๋ธ๋ผ์ฐ์ ๋?: browse(๋๋ฌ๋ณด๋ค, ์ธํฐ๋ท์ ๋์๋ค๋๋ค.)
ํ๋ก ํธ์๋ ๊ฐ๋ฐ์์ ๋ผ๋ ค์ผ ๋ ์ ์๋ ๊ฒ์ ๋ธ๋ผ์ฐ์ ๋ค. ๊ทธ๋ ๊ธฐ์ ์ด์ ๋ถํฐ ๋ณธ๊ฒฉ์ ์ผ๋ก ๋ธ๋ผ์ฐ์ ์ ๋ ๋๋ง์ ๋ํด์ ์์๋ณด๊ฒ ๋ค.
๋ธ๋ผ์ฐ์ ์ ๋ ๋๋ง ์ํ ์์ ์์ฝ
1.
๋ธ๋ผ์ฐ์ ๋ HTML, CSS, ์๋ฐ์คํฌ๋ฆฝํธ, ์ด๋ฏธ์ง, ํฐํธ ํ์ผ ๋ฑ ๋ ๋๋ง์ ํ์ํ ๋ฆฌ์์ค๋ฅผ ์์ฒญํ๊ณ ์๋ฒ๋ก๋ถํฐ ์๋ต์ ๋ฐ๋๋ค.
2.
๋ธ๋ผ์ฐ์ ์ ๋ ๋๋ง ์์ง์ ์๋ฒ๋ก๋ถํฐ ์๋ต๋ HTML, CSS๋ฅผ ํ์ฑํ์ฌ DOM๊ณผ CSSOM์ ์์ฑํ๊ณ ์ด๋ค์ ๊ฒฐํฉํ์ฌ ๋ ๋ ํธ๋ฆฌ๋ฅผ ์์ฑํ๋ค.
3.
๋ธ๋ผ์ฐ์ ์ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ์๋ฒ๋ก๋ถํฐ ์๋ต๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ํ์ฑํ์ฌ AST(Abstract Syntax Tree)๋ฅผ ์์ฑํ๊ณ ๋ฐ์ดํธ์ฝ๋๋ก ๋ณํํ์ฌ ์คํํ๋ค. ์ด๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ DOM API๋ฅผ ํตํด DOM์ด๋ CSSOM์ ๋ณ๊ฒฝํ ์ ์๋ค. ๋ณ๊ฒฝ๋ DOM๊ณผ CSSOM์ ๋ค์ ๋ ๋ ํธ๋ฆฌ๋ก ๊ฒฐํฉ๋๋ค.
๋ฐ์ดํธ ์ฝ๋
4.
๋ ๋ ํธ๋ฆฌ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก HTML ์์์ ๋ ์ด์์(์์น์ ํฌ๊ธฐ)์ ๊ณ์ฐํ๊ณ ๋ธ๋ผ์ฐ์ ํ๋ฉด์ HTML ์์๋ฅผ ํ์ธํ
ํ๋ค.
1. ์์ฒญ๊ณผ ์๋ต
๋ธ๋ผ์ฐ์ ์ ํต์ฌ ๊ธฐ๋ฅ: ํ์ํ ๋ฆฌ์์ค๋ฅผ ์๋ฒ์ ์์ฒญํ๊ณ ์๋ฒ๋ก๋ถํฐ ์๋ต๋ฐ์ ๋ธ๋ผ์ฐ์ ์ ์๊ฐ์ ์ผ๋ก ๋ ๋๋งํ๋ ๊ฒ์ด๋ค.
์๋ฒ์ ์์ฒญ์ ์ ์กํ๊ธฐ ์ํด ๋ธ๋ผ์ฐ์ ๋ ์ฃผ์์ฐฝ์ ์ ๊ณตํ๋ค.
๋ธ๋ผ์ฐ์ ์ ์ฃผ์์ฐฝ์ URL์ ์
๋ ฅํ๊ณ ์ํฐ ํค๋ฅผ ๋๋ฅด๋ฉด URL์ ํธ์คํธ ์ด๋ฆ์ด DNS๋ฅผ ํตํด IP ์ฃผ์๋ก ๋ณํ๋๊ณ ์ด IP์ฃผ์๋ฅผ ๊ฐ๋ ์๋ฒ์๊ฒ ์์ฒญ์ ์ ์กํ๋ค.
์์ธํ ์ค๋ช
(ChatGPT)
์ฐธ๊ณ : HTTP(HyperText Transfer Protocol)๋ ์น์์ ๋ธ๋ผ์ฐ์ ์ ์๋ฒ๊ฐ ํต์ ํ๊ธฐ ์ํ ํ๋กํ ์ฝ(๊ท์ฝ)์ด๋ค.
2. HTML ํ์ฑ๊ณผ DOM ์์ฑ
๋ธ๋ผ์ฐ์ ์ ์์ฒญ์ ์ํด ์๋ฒ๊ฐ ์๋ตํ HTML ๋ฌธ์๋ ๋ฌธ์์ด๋ก ์ด๋ฃจ์ด์ง ์์ํ ํ
์คํธ๋ค. ์์ํ ํ
์คํธ์ธ HTML ๋ฌธ์๋ฅผ ๋ธ๋ผ์ฐ์ ์ ์๊ฐ์ ์ธ ํฝ์
๋ก ๋ ๋๋งํ๋ ค๋ฉด HTML ๋ฌธ์๋ฅผ ๋ธ๋ผ์ฐ์ ๊ฐ ์ดํดํ ์ ์๋ ์๋ฃ๊ตฌ์กฐ(๊ฐ์ฒด)๋ก ๋ณํํ์ฌ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํด์ผํ๋ค. ๋ธ๋ผ์ฐ์ ์ ๋ ๋๋ง ์์ง์ ์๋ต๋ฐ์ HTML ๋ฌธ์๋ฅผ ํ์ฑํ์ฌ ๋ธ๋ผ์ฐ์ ๊ฐ ์ดํดํ ์ ์๋ ์๋ฃ๊ตฌ์กฐ์ธ DOM(Document Object Model)์ ์์ฑํ๋ค.
์์ธํ ์ค๋ช
์ฆ, DOM์ HTML ๋ฌธ์๋ฅผ ํ์ฑํ ๊ฒฐ๊ณผ๋ฌผ์ด๋ค.
3. CSSํ์ฑ๊ณผ CSSOM ์์ฑ
๋ ๋๋ง ์์ง์ HTML์ ์ฒ์๋ถํฐ ํ ์ค์ฉ ์์ฐจ์ ์ผ๋ก ํ์ฑํ์ฌ DOM์ ์์ฑํด ๋๊ฐ๋ค. ์ด์ฒ๋ผ ๋ ๋๋ง ์์ง์ DOM์ ์์ฑํด ๋๊ฐ๋ค๊ฐ CSS๋ฅผ ๋ก๋ํ๋ link ํ๊ทธ๋ styleํ๊ทธ๋ฅผ ๋ง๋๋ฉด DOM ์์ฑ์ ์ผ์ ์ค๋จํ๋ค.
๊ทธ๋ฆฌ๊ณ link ํ๊ทธ์ href ์ดํธ๋ฆฌ๋ทฐํธ์ ์ง์ ๋ cssํ์ผ์ ์๋ฒ์ ์์ฒญํ์ฌ ๋ก๋ํ CSS ํ์ผ์ด๋ styleํ๊ทธ ๋ด์ CSS๋ฅผ HTML๊ณผ ๋์ผํ ํ์ฑ ๊ณผ์ (๋ฐ์ดํธ โ ๋ฌธ์ โ ํ ํฐ โ ๋
ธ๋ โ CSSOM)์ ๊ฑฐ์น๋ฉฐ ํด์ํ์ฌ CSSOM์ ์์ฑํ๋ค. ์ดํ CSS ํ์ฑ์ ์๋ฃํ๋ฉด HTML ํ์ฑ์ด ์ค๋จ๋ ์ง์ ๋ถํฐ ๋ค์ HTML์ ํ์ฑํ๊ธฐ ์์ํ์ฌ DOM ์์ฑ์ ์ฌ๊ฐํ๋ค.
4. ๋ ๋ ํธ๋ฆฌ ์์ฑ
๋ ๋๋ง ์์ง์ ์๋ฒ๋ก๋ถํฐ ์๋ต๋ HTML๊ณผ CSS๋ฅผ ํ์ฑํ์ฌ ๊ฐ๊ฐ DOM๊ณผ CSSOM๋ฅผ ์์ฑํ๋ค. ๊ทธ๋ฆฌ๊ณ DOM๊ณผ CSSOM์ ๋ ๋๋ง์ ์ํด ๋ ๋ ํธ๋ฆฌ๋ก ๊ฒฐํฉ๋๋ค.
๋ ๋ ํธ๋ฆฌ: ๋ ๋๋ง์ ์ํ ํธ๋ฆฌ ๊ตฌ์กฐ์ ์๋ฃ๊ตฌ์กฐ๋ค. ๋ฐ๋ผ์ ๋ธ๋ผ์ฐ์ ํ๋ฉด์ ๋ ๋๋ง๋์ง ์๋ ๋
ธ๋(ex.meta ํ๊ทธ, script ํ๊ทธ ๋ฑ)์ CSS์ ์ํด ๋นํ์(ex. display: none)๋๋ ๋
ธ๋๋ค์ ํฌํจํ์ง ์๋๋ค. ๋ค์ ๋งํด, ๋ ๋ ํธ๋ฆฌ๋ ๋ธ๋ผ์ฐ์ ํ๋ฉด์ ๋ ๋๋ง๋๋ ๋
ธ๋๋ง์ผ๋ก ๊ตฌ์ฑ๋๋ค.
์ง๊ธ๊น์ง ์ดํด๋ณธ ๋ธ๋ผ์ฐ์ ์ ๋ ๋๋ง ๊ณผ์ ์ ๋ฐ๋ณตํด์ ์คํ๋ ์ ์๋ค. ์๋ฅผ ๋ค์ด, ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ ๋ฐ๋ณตํด์ ๋ ์ด์์ ๊ณ์ฐ๊ณผ ํ์ธํ
์ด ์ฌ์ฐจ ์คํ๋๋ค.
โข
์๋ฐ์คํฌ๋ฆฝํธ์ ์ํ ๋
ธ๋ ์ถ๊ฐ ๋๋ ์ญ์
โข
๋ธ๋ผ์ฐ์ ์ฐฝ์ ๋ฆฌ์ฌ์ด์ง์ ์ํ ๋ทฐํฌํธ ํฌ๊ธฐ ๋ณ๊ฒฝ
โข
HTML ์์์ ๋ ์ด์์(์์น, ํฌ๊ธฐ)์ ๋ณ๊ฒฝ์ ๋ฐ์์ํค๋ width/height, margin, padding, border, display, position, top/right/bottom/left ๋ฑ์ ์คํ์ผ ๋ณ๊ฒฝ
๋ ์ด์์ ๊ณ์ฐ๊ณผ ํ์ธํ
์ ๋ค์ ์คํํ๋ ๋ฆฌ๋ ๋๋ง์ ๋น์ฉ์ด ๋ง์ด ๋๋, ์ฆ ์ฑ๋ฅ์ ์
์ํฅ์ ์ฃผ๋ ์์
์ด๋ค.
๋ฐ๋ผ์ ๊ฐ๊ธ์ ๋ฆฌ๋ ๋๋ง์ด ๋น๋ฒํ๊ฒ ๋ฐ์ํ์ง ์๋๋ก ์ฃผ์ํ ํ์๊ฐ ์๋ค.
5. ์๋ฐ์คํฌ๋ฆฝํธ ํ์ฑ๊ณผ ์คํ
HTML ๋ฌธ์๋ฅผ ํ์ฑํ ๊ฒฐ๊ณผ๋ฌผ๋ก์ ์์ฑ๋ DOM์ HTML ๋ฌธ์์ ๊ตฌ์กฐ์ ์ ๋ณด๋ฟ๋ง ์๋๋ผ HTML ์์์ ์คํ์ผ ๋ฑ์ ๋ณ๊ฒฝํ ์ ์๋ ํ๋ก๊ทธ๋๋ฐ ์ธํฐํ์ด์ค๋ก์ DOM API๋ฅผ ์ ๊ณตํ๋ค. ์ฆ, ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋์์ DOM API๋ฅผ ์ฌ์ฉํ๋ฉด ์ด๋ฏธ ์์ฑ๋ DOM์ ๋์ ์ผ๋ก ์กฐ์ํ ์ ์๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ํ์ฑ๊ณผ ์คํ์ ๋ธ๋ผ์ฐ์ ์ ๋ ๋๋ง ์์ง์ด ์๋ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ด ์ฒ๋ฆฌํ๋ค. ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ํ์ฑํ์ฌ CPU๊ฐ ์ดํดํ ์ ์๋ ์ ์์ค ์ธ์ด๋ก ๋ณํํ๊ณ ์คํํ๋ ์ญํ ์ ํ๋ค.
๋ ๋๋ง ์์ง์ด HTML๊ณผ CSS๋ฅผ ํ์ฑํ์ฌ DOM๊ณผ CSSOM์ ์์ฑํ๋ฏ์ด ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ํด์ํ์ฌ AST(Abstract Syntax Tree ์ถ์์ ๊ตฌ๋ฌธ ํธ๋ฆฌ)๋ฅผ ์์ฑํ๋ค. ๊ทธ๋ฆฌ๊ณ AST๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ธํฐํ๋ฆฌํฐ๊ฐ ์คํํ ์ ์๋ ์ค๊ฐ ์ฝ๋์ธ ๋ฐ์ดํธ์ฝ๋๋ฅผ ์์ฑํ์ฌ ์คํํ๋ค.
๋ฐ์ดํธ์ฝ๋: ๋ฐ์ดํธ์ฝ๋๋ ๊ธฐ๊ณ๊ฐ ์ดํดํ๊ธฐ ์ฌ์ด ํํ๋ก, AST์ ์ถ์์ ์ธ ๊ตฌ๋ฌธ์ ๊ตฌ์ฒด์ ์ธ ์ฐ์ฐ ๋ช
๋ น์ด๋ก ๋ณํํ ๊ฒ์
๋๋ค. ๋ฐ์ดํธ์ฝ๋๋ ์ผ๋ฐ์ ์ผ๋ก ์ธํฐํ๋ฆฌํฐ๋ JIT(Just-In-Time) ์ปดํ์ผ๋ฌ๋ฅผ ํตํด ์คํ๋ฉ๋๋ค.
6. ๋ฆฌํ๋ก์ฐ์ ๋ฆฌํ์ธํธ
๋ง์ฝ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋์ DOM์ด๋ CSSOM์ ๋ณ๊ฒฝํ๋ DOM API๊ฐ ์ฌ์ฉ๋ ๊ฒฝ์ฐ DOM์ด๋ CSSOM์ด ๋ณ๊ฒฝ๋๋ค. ์ด๋ ๋ณ๊ฒฝ๋ DOM๊ณผ CSSOM์ ๋ค์ ๋ ๋ ํธ๋ฆฌ๋ก ๊ฒฐํฉ๋๊ณ ๋ณ๊ฒฝ๋ ๋ ๋ ํธ๋ฆฌ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ ์ด์์๊ณผ ํ์ธํธ ๊ณผ์ ์ ๊ฑฐ์ณ ๋ธ๋ผ์ฐ์ ์ ํ๋ฉด์ ๋ค์ ๋ ๋๋งํ๋ค. ์ด๋ฅผ ๋ฆฌํ๋ก์ฐ, ๋ฆฌํ์ธํธ๋ผ ํ๋ค.
๋ฆฌํ๋ก์ฐ: ๋ ์ด์์ ๊ณ์ฐ์ ๋ค์ ํ๋ ๊ฒ์ ๋งํ๋ฉฐ, ๋
ธ๋ ์ถ๊ฐ/์ญ์ , ์์์ ํฌ๊ธฐ/์์น ๋ณ๊ฒฝ, ์๋์ฐ ๋ฆฌ์ฌ์ด์ง ๋ฑ ๋ ์ด์์์ ์ํฅ์ ์ฃผ๋ ๋ณ๊ฒฝ์ด ๋ฐ์ํ ๊ฒฝ์ฐ์ ํํ์ผ ์คํ๋๋ค.
๋ฆฌํ์ธํธ: ์ฌ๊ฒฐํฉ๋ ๋ ๋ ํธ๋ฆฌ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ค์ ํ์ธํธ๋ฅผ ํ๋ ๊ฒ์ ๋งํ๋ค.
๋ฐ๋ผ์ ๋ฆฌํ๋ก์ฐ์ ๋ฆฌํ์ธํธ๊ฐ ๋ฐ๋์ ์์ฐจ์ ์ผ๋ก ๋์์ ์คํ๋๋ ๊ฒ์ ์๋๋ค. ๋ ์ด์์์ ์ํฅ์ด ์๋ ๋ณ๊ฒฝ์ ๋ฆฌํ๋ก์ฐ ์์ด ๋ฆฌํ์ธํธ๋ง ์คํ๋๋ค.
7. ์๋ฐ์คํฌ๋ฆฝํธ ํ์ฑ์ ์ํ HTML ํ์ฑ ์ค๋จ
DOM์ ๋ณ๊ฒฝํ๋ DOM API๋ฅผ ์ฌ์ฉํ ๋ DOM ์์ฑ์ด ์๋ฃ๋์ง ์์ ์ํ๋ผ๋ฉด ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค. ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํํผํ๊ธฐ ์ํด body ์์์ ๊ฐ์ฅ ์๋์ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์์น์ํค๋ ๊ฒ์ ์ข์ ์์ด๋์ด๋ค.
โข
DOM์ด ์์ฑ๋์ง ์์ ์ํ์์ ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ DOM์ ์กฐ์ํ๋ฉด ์๋ฌ๊ฐ ๋ฐ์ํ ์ ์๋ค.
โข
์๋ฐ์คํฌ๋ฆฝํธ ๋ก๋ฉ/ํ์ฑ/์คํ์ผ๋ก ์ธํด HTML ์์๋ค์ ๋ ๋๋ง์ ์ง์ฅ๋ฐ๋ ์ผ์ด ๋ฐ์ํ์ง ์์ ํ์ด์ง ๋ก๋ฉ ์๊ฐ์ด ๋จ์ถ๋๋ค.
8. script ํ๊ทธ์ async/defer ์ดํธ๋ฆฌ๋ทฐํธ
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8" />
<title>Document</title>
<script src="main.js"><script>
</head>
<body></body>
</html>
JavaScript
๋ณต์ฌ
1.
HTML์ ์ญ ํ์ฑํ๋ค๊ฐ script ํ๊ทธ๊ฐ ๋ณด์ด๋ฉด main.js๋ฅผ ๋ค์ด๋ฐ์์ผํ๋ค ํ๊ณ HTML ํ์ฑ์ ์ ์ ๋ฉ์ถ๋ค.
2.
ํ์ํ JavaScript ํ์ผ์ ์๋ฒ์์ ๋ค์ด๋ฐ์์ ์ด๊ฒ์ ์คํํ ๋ค์์ ๋ค์ HTML ํ์ฑํ๋ ๋ถ๋ถ์ผ๋ก ๋์ด๊ฐ๋ค. // fetch: ๊ฐ์ ธ์ค๋ค.
โ ๋จ์ : JavaScript ํ์ผ์ ์ฌ์ด์ฆ๊ฐ ์ด๋ง์ด๋งํ๊ฒ ํฌ๊ณ , ์ธํฐ๋ท์ด ์์ฒญ ๋๋ฆฌ๋ฉด ์ฌ์ฉ์๊ฐ ์น์ฌ์ดํธ๋ฅผ ๋ณด๋๋ฐ๊น์ง ๋ง์ ์๊ฐ์ด ์์๋๋ค.
๊ทธ๋์ ๋ง์ด ์ฐ๋ ๋ฐฉ์์ด ์๋์ ๊ฐ๋ค.
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8" />
<title>Document</title>
</head>
<body>
<div></div>
<script src="main.js"></script>
</body>
</html>
JavaScript
๋ณต์ฌ
1.
๋ธ๋ผ์ฐ์ ๊ฐ HTML ๋ค์ด๋ฐ์์ ์ญ ํ์ฑํด์ ํ์ด์ง๊ฐ ๋ค ์ค๋น๋๋ค.
2.
๋ค์์ script ํ๊ทธ๋ฅผ ๋ง๋์ script๋ฅผ ์๋ฒ์์ ๋ฐ์์ค๊ณ (fetch), ์คํํ๊ฒ ๋๋ค.
โ ๋จ์ : ์ฌ์ฉ์๊ฐ ๊ธฐ๋ณธ์ ์ธ HTML ์ปจํ
์ธ ๋ฅผ ๋น ๋ฅด๊ฒ ๋ณผ ์ ์์ง๋ง, ์น์ฌ์ดํธ๊ฐ JavaScript์ ๋งค์ฐ ์์กด์ ์ด๋ฉด ์ฌ์ฉ์๊ฐ ์๋ฏธ์๋ ์ฝํ
์ธ ๋ฅผ ๋ณด๊ธฐ ์ํด์ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ด์ฉํด์ ์๋ฒ์ ์๋ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์จ๋ค๋์ง, DOM ์์๋ฅผ ๋ ์ด์๊ฒ ๊พธ๋ฉฐ์ฃผ๋ ์น์ฌ์ดํธ๋ผ๋ฉด ์ฌ์ฉ์๊ฐ ์ ์์ ์ธ ํ์ด์ง๋ฅผ ๋ณด๊ธฐ ์ ๊น์ง๋ ์ค๋๊ธฐ๋ค๋ ค์ผํ๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ํ์ฑ์ ์ํ DOM ์์ฑ์ด ์ค๋จ๋๋ ๋ฌธ์ ๋ฅผ ๊ทผ๋ณธ์ ์ผ๋ก ํด๊ฒฐํ๊ธฐ ์ํด HTML5๋ถํฐ script ํ๊ทธ์ async์ defer ์ดํธ๋ฆฌ๋ทฐํธ๊ฐ ์ถ๊ฐ๋์๋ค. async์ defer ์ดํธ๋ฆฌ๋ทฐํธ๋ src ์ดํธ๋ฆฌ๋ทฐํธ๋ฅผ ํตํด ์ธ๋ถ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ์ ๋ก๋ํ๋ ๊ฒฝ์ฐ์๋ง ์ฌ์ฉํ ์ ์๋ค.
async์ defer ์ดํธ๋ฆฌ๋ทฐํธ๋ฅผ ์ฌ์ฉํ๋ฉด HTML ํ์ฑ๊ณผ ์ธ๋ถ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ์ ๋ก๋๊ฐ ๋น๋๊ธฐ์ ์ผ๋ก ๋์์ ์งํ๋๋ค. ํ์ง๋ง ์คํ ์์ ์ ์ฐจ์ด๊ฐ ์๋ค.
1) async ์ดํธ๋ฆฌ๋ทฐํธ
: HTML ํ์ฑ๊ณผ ์ธ๋ถ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ์ ๋ก๋๊ฐ ๋น๋๊ธฐ์ ์ผ๋ก ๋์์ ์งํ๋๋ค. ๋จ ์๋ฐ์คํฌ๋ฆฝํธ์ ํ์ฑ๊ณผ ์คํ์ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ์ ๋ก๋๊ฐ ์๋ฃ๋ ์งํ ์งํ๋๋ฉฐ, ์ด๋ HTML ํ์ฑ์ด ์ค๋จ๋๋ค.
!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8" />ํ
<title>Document</title>
<script async src="main.js"><script>
</head>
<body>
<div></div>
<p></p>
</body>
</html>
JavaScript
๋ณต์ฌ
async๋ ๋ถ๋ฆฌ์ธํ์
์ ์์ฑ๊ฐ์ด๊ธฐ ๋๋ฌธ์ ์ด๋ ๊ฒ ์ ์ธํ๋ ๊ฒ๋ง์ผ๋ก๋ true๋ก ์ค์ ์ด ๋์ด์ async ์ต์
์ ์ฌ์ฉํ ์ ์๋ค.
1.
async๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ฉด ๋ธ๋ผ์ฐ์ ๊ฐ HTML์ ๋ค์ด๋ก๋ ๋ฐ์์ ํ์ฑํ๋ค๊ฐ async๊ฐ ์์ผ๋ฉด ๋ณ๋ ฌ๋ก main.js๋ฅผ ๋ค์ด๋ก๋๋ฐ์๊ณ ๋ช
๋ นํ๋ค.
2.
๋ค์ ํ์ฑํ๋ค๊ฐ main.js๊ฐ ๋ค ๋ค์ด๋ก๋๋๋ฉด ๊ทธ๋ ํ์ฑ์ ๋ฉ์ถ๊ณ ๋ค์ด๋ก๋๋ jsํ์ผ์ ์คํํ๋ค.
3.
์คํ ๋คํ๊ณ ๋์ ๋๋จธ์ง HTML์ ํ์ฑํ๊ฒ ๋๋ค.
โ ์ฅ์ : body๋์ ์ฌ์ฉํ๋ ๊ฒ๋ณด๋ค fetching์ด pasingํ๋ ๋์ ๋ณ๋ ฌ์ ์ผ๋ก ์ผ์ด๋๊ธฐ ๋๋ฌธ์ ๋ค์ด๋ก๋ ๋ฐ๋ ์๊ฐ์ ์ ์ฝํ ์ ์๋ค.
โ ๋จ์ : ํ์ง๋ง js๊ฐ HTML์ด ํ์ฑ๋๊ธฐ๋ ์ ์ ์คํ๋์ด์ ๋ง์ฝ js ํ์ผ์์ queryselector๋ฅผ ์ด์ฉํด์ DOM ์์๋ฅผ ์กฐ์ํ๋ค๊ณ ํ๋ฉด ์ด ์กฐ์ํ๋ ค๋ ์์ ์ HTML์ด ์ํ๋ ์์๊ฐ ์์ง ์ ์๋์ด ์์ง ์์ ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ HTML ํ์ฑํ๋ ๋์์ ์ธ์ ๋ ์ง js๋ฅผ ์คํํ๊ธฐ ์ํด์ ๋ฉ์ถ ์ ์์ด์ ์ฌ์ฉ์๊ฐ ํ์ด์ง๋ฅผ ๋ณด๋๋ฐ ์๊ฐ์ด ์ฌ์ ํ ๊ฑธ๋ฆด ์ ์๋ค.
2) defer ์ดํธ๋ฆฌ๋ทฐํธ
: defer ์ดํธ๋ฆฌ๋ทฐํธ๋ HTML ํ์ฑ๊ณผ ์ธ๋ถ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ์ด ๋ก๋๊ฐ ๋น๋๊ธฐ์ ์ผ๋ก ๋์์ ์งํ๋๋ค. ๋จ, ์๋ฐ์คํฌ๋ฆฝํธ์ ํ์ฑ๊ณผ ์คํ์ HTML ํ์ฑ์ด ์๋ฃ๋ ์งํ, ์ฆ DOM ์์ฑ์ด ์๋ฃ๋ ์งํ(์ด๋ DOMContentLoaded ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ค) ์งํ๋๋ค. ๋ฐ๋ผ์ DOM ์์ฑ์ด ์๋ฃ๋ ์ดํ ์คํ๋์ด์ผ ํ ์๋ฐ์คํฌ๋ฆฝํธ์ ์ ์ฉํ๋ค.
!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8" />
<title>Document</title>
<script defer src="main.js"><script>
</head>
<body>
<div></div>
</body>
</html>
JavaScript
๋ณต์ฌ
1.
ํ์ฑ์ ํ๋ค๊ฐ script์ defer๊ฐ ์์ผ๋ฉด main.js๋ฅผ ๋ค์ด๋ก๋ ๋ฐ์ ๋ช
๋ น๋ง ์์ผ๋๊ณ , ๋๋จธ์ง HTML์ ๋๊น์ง ํ์ฑํ๋ค.
2.
๋ง์ง๋ง์ ํ์ฑ์ด ๋๋ ๋ค์์ ๋ค์ด๋ก๋๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ๋ค.
์ฆ, HTML์ ํ์ฑํ๋ ๋์ ํ์ํ js๋ฅผ ๋ค ๋ค์ด๋ก๋ ๋ฐ๊ณ , HTML ํ์ฑ์ ๋จผ์ ํด์ ์ฌ์ฉ์์๊ฒ ํ์ด์ง๋ฅผ ๋ณด์ฌ์ค ๋ค์์ ๋ฐ๋ก ์ด์ด์ js๋ฅผ ์คํํ๋ค.
๋ ๊ฐ์ ์ฐจ์ด์ ์ ๋ ๋ช
ํํ๊ฒ ํ์
ํด๋ณด์!
!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8" />
<title>Document</title>
<script async src="a.js"><script>
<script async src="b.js"><script>
<script async src="c.js"><script>
</head>
JavaScript
๋ณต์ฌ
์ฌ๋ฌ ๊ฐ์ script ํ๊ทธ์ async ์ดํธ๋ฆฌ๋ทฐํธ๋ฅผ ์ง์ ํ๋ฉด script ํ๊ทธ์ ์์์๋ ์๊ด์์ด ๋ก๋๊ฐ ์๋ฃ๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ถํฐ ๋จผ์ ์คํ๋๋ฏ๋ก ์์๊ฐ ๋ณด์ฅ๋์ง ์๋๋ค. ๋ฐ๋ผ์ ์์ ๋ณด์ฅ์ด ํ์ํ script ํ๊ทธ์๋ async ์ดํธ๋ฆฌ๋ทฐํธ๋ฅผ ์ง์ ํ์ง ์์์ผ ํ๋ค. (์์์ ์์กด์ ์ธ๊ฑฐ๋ผ๋ฉด ๋ฌธ์ ๊ฐ ๋ ์ ์๋ค.)
!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8" />
<title>Document</title>
<script defer src="a.js"><script>
<script defer src="b.js"><script>
<script defer src="c.js"><script>
</head>
JavaScript
๋ณต์ฌ
ํ์ฑํ๋๋์ ํ์ํ js๋ฅผ ๋ค ๋ค์ด๋ก๋ธ๋ฐ๊ณ ์์๋๋ก ์คํ๋๋ค. ์ฆ, ์ ์ํ ์์๊ฐ ์ง์ผ์ง๋ค. โ ์ ์ผ ํจ์จ์ ์ด๊ณ ์์ ํ๋ค