////
Search
Duplicate
๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ’ป

๋ Œ๋”๋ง ๊ณผ์ • - ๋ธŒ๋ผ์šฐ์ €๋Š” ์–ด๋–ป๊ฒŒ ํ™”๋ฉด์„ ๋ Œ๋”๋งํ• ๊นŒ?

์ฐธ๊ณ ์ž๋ฃŒ: ๋ชจ๋˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ 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๋ฅผ ๋‹ค ๋‹ค์šด๋กœ๋ธŒ๋ฐ›๊ณ  ์ˆœ์„œ๋Œ€๋กœ ์‹คํ–‰๋œ๋‹ค. ์ฆ‰, ์ •์˜ํ•œ ์ˆœ์„œ๊ฐ€ ์ง€์ผœ์ง„๋‹ค. โ†’ ์ œ์ผ ํšจ์œจ์ ์ด๊ณ  ์•ˆ์ „ํ•˜๋‹ค