๐Ÿ“ŒLanguage/JavaScript

[Deep Dive] ๋ธŒ๋ผ์šฐ์ €์˜ ๋ Œ๋”๋ง ๊ณผ์ •

hellohailie 2022. 12. 14. 19:19

โœ”๏ธ ์ด๋ฒˆ ์ •๋…์„ ํ†ตํ•ด ์•Œ๊ฒŒ ๋œ ๊ฒƒ
ํŒŒ์‹ฑ์ด ๋ฌด์—‡์ธ๊ฐ€์š”?
๋ Œ๋”๋ง์ด ๋ฌด์—‡์ธ๊ฐ€์š”?
๋ธŒ๋ผ์šฐ์ €์˜ ๋ Œ๋”๋ง ๊ณผ์ •?
script ํƒœ๊ทธ๋ฅผ body ํƒœ๊ทธ ์ตœํ•˜๋‹จ์— ์ถ”๊ฐ€ํ•˜๋Š” ์ด์œ 

 

<๋‹ต ๋ฏธ๋ฆฌ๋ณด๊ธฐ>

๐Ÿค” ํŒŒ์‹ฑ์ด ๋ฌด์—‡์ธ๊ฐ€์š”?

๐Ÿค“ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜ ๋ฌธ๋ฒ•์— ๋งž๊ฒŒ ์ž‘์„ฑ๋œ ํ…์ŠคํŠธ ๋ฌธ์„œ๋ฅผ ์ฝ๊ณ  ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ํ† ํฐ์œผ๋กœ ๋ถ„ํ•ดํ•˜๊ณ  ํ† ํฐ์— ๋ฌธ๋ฒ•์  ์˜๋ฏธ์™€ ๊ตฌ์กฐ๋ฅผ ๋ฐ˜์˜ํ•˜์—ฌ ํŠธ๋ฆฌ ๊ตฌ์กฐ์˜ ์ž๋ฃŒ๊ตฌ์กฐ์ธ ํŒŒ์Šค ํŠธ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ณผ์ •์„ ๋งํ•ฉ๋‹ˆ๋‹ค. 

 

๐Ÿค” ๋ Œ๋”๋ง์ด ๋ฌด์—‡์ธ๊ฐ€์š”?

๐Ÿค“ HTML, CSS, JS๋กœ ์ž‘์„ฑ๋œ ๋ฌธ์„œ๋ฅผ ํŒŒ์‹ฑํ•ด์„œ ๋ธŒ๋ผ์šฐ์ €์— ์‹œ๊ฐ์ ์œผ๋กœ ์ถœ๋ ฅํ•˜๋Š” ๊ฒƒ์„ ๋งํ•ฉ๋‹ˆ๋‹ค. 

 

๐Ÿค” ๋ธŒ๋ผ์šฐ์ €์˜ ๋ Œ๋”๋ง ๊ณผ์ •?

๐Ÿค“

  1. ๋ธŒ๋ผ์šฐ์ €๋Š” ๋ Œ๋”๋ง์— ํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ์š”์ฒญํ•˜๊ณ  ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์‘๋‹ต์„ ๋ฐ›์Šต๋‹ˆ๋‹ค.
  2. ๋ธŒ๋ผ์šฐ์ €์˜ ๋ Œ๋”๋ง ์—”์ง„์€ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์‘๋‹ต๋œ HTML, CSS๋ฅผ ํŒŒ์‹ฑํ•˜์—ฌ DOM๊ณผ CSSOM์„ ์ƒ์„ฑํ•˜๊ณ , ์ด๋ฅผ ๊ฒฐํ•ฉํ•˜์—ฌ ๋ Œ๋” ํŠธ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. 
  3. ๋ธŒ๋ผ์šฐ์ €์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์€ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์‘๋‹ต๋œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ํŒŒ์‹ฑํ•˜์—ฌ AST(abstract syntax tree)*๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๋ฐ”์ดํŠธ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” DOM API๋ฅผ ํ†ตํ•ด DOM์ด๋‚˜ CSSOM๋ฅผ ๋ณ€๊ฒฝํ•˜๊ณ , ๋ณ€๊ฒฝ๋œ DOM๊ณผ CSSOM์€ ๋‹ค์‹œ ๋ Œ๋”ํŠธ๋ฆฌ๋กœ ๊ฒฐํ•ฉ๋ฉ๋‹ˆ๋‹ค.
  4. ๋ Œ๋” ํŠธ๋ฆฌ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ HTML ์š”์†Œ์˜ ๋ ˆ์ด์•„์›ƒ์„ ๊ณ„์‚ฐํ•˜๊ณ  ๋ธŒ๋ผ์šฐ์ € ํ™”๋ฉด์— HTML ์š”์†Œ๋ฅผ ํŽ˜์ธํŒ…ํ•ฉ๋‹ˆ๋‹ค. 

๐Ÿค” script ํƒœ๊ทธ๋ฅผ body ํƒœ๊ทธ ์ตœํ•˜๋‹จ์— ์ถ”๊ฐ€ํ•˜๋Š” ์ด์œ 

๐Ÿค“ ๋ธŒ๋ผ์šฐ์ €๋Š” ์œ„์—์„œ ์•„๋ž˜๋ฐฉํ–ฅ์œผ๋กœ ์ˆœ์ฐจ์ ์œผ๋กœ HTML, CSS, JS๋ฅผ ํŒŒ์‹ฑํ•˜๊ณ  ์‹คํ–‰ํ•˜๋Š”๋ฐ script ํƒœ๊ทธ๋ฅผ body ํƒœ๊ทธ ์ตœํ•˜๋‹จ์— ์ถ”๊ฐ€ํ•˜๋ฉด DOM์ด ์™„์„ฑ๋˜์ง€ ์•Š์€ ์ƒํƒœ์—์„œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ DOM์„ ์กฐ์ž‘ํ•˜๋ฉด ์—๋Ÿฌ๊ฐ€ ๋‚  ์ˆ˜ ์žˆ๋Š”๋ฐ ์ด๋ฅผ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์‹คํ–‰๋˜๊ธฐ ์ „์— DOM ์ƒ์„ฑ์ด ์™„์„ฑ๋˜์–ด ๋ Œ๋”๋ง๋˜๋ฏ€๋กœ ํŽ˜์ด์ง€ ๋กœ๋”ฉ ์‹œ๊ฐ„์ด ๋‹จ์ถ•๋ฉ๋‹ˆ๋‹ค. 


โœ”๏ธ ๋ธŒ๋ผ์šฐ์ €์˜ ํŒŒ์‹ฑ๊ณผ ๋ Œ๋”๋ง ๊ณผ์ •

  • ํŒŒ์‹ฑ parsing

ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜ ๋ฌธ๋ฒ•์— ๋งž๊ฒŒ ์ž‘์„ฑ๋œ ํ…์ŠคํŠธ ๋ฌธ์„œ๋ฅผ ์ฝ๊ณ  ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ํ† ํฐ์œผ๋กœ ๋ถ„ํ•ดํ•˜๊ณ  ํ† ํฐ์— ๋ฌธ๋ฒ•์  ์˜๋ฏธ์™€ ๊ตฌ์กฐ๋ฅผ ๋ฐ˜์˜ํ•˜์—ฌ ํŠธ๋ฆฌ ๊ตฌ์กฐ์˜ ์ž๋ฃŒ๊ตฌ์กฐ์ธ ํŒŒ์Šค ํŠธ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ณผ์ •์„ ๋งํ•œ๋‹ค. 

(๋ฐ”์ดํŠธ → ๋ฌธ์ž → ํ† ํฐ → ๋…ธ๋“œ → tree ๊ตฌ์กฐ)

  • ๋ Œ๋”๋ง rendering

HTML, CSS, JS๋กœ ์ž‘์„ฑ๋œ ๋ฌธ์„œ๋ฅผ ํŒŒ์‹ฑํ•ด์„œ ๋ธŒ๋ผ์šฐ์ €์— ์‹œ๊ฐ์ ์œผ๋กœ ์ถœ๋ ฅํ•˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค. 

 

 

  1. ๋ธŒ๋ผ์šฐ์ €๋Š” HTML, CSS, JS, ์ด๋ฏธ์ง€, ํฐํŠธ ํŒŒ์ผ ๋“ฑ ๋ Œ๋”๋ง์— ํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ์š”์ฒญํ•˜๊ณ  ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์‘๋‹ต์„ ๋ฐ›๋Š”๋‹ค.
  2. ๋ธŒ๋ผ์šฐ์ €์˜ ๋ Œ๋”๋ง ์—”์ง„์€ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์‘๋‹ต๋œ HTML, CSS๋ฅผ ํŒŒ์‹ฑํ•˜์—ฌ DOM๊ณผ CSSOM์„ ์ƒ์„ฑํ•˜๊ณ , ์ด๋ฅผ ๊ฒฐํ•ฉํ•˜์—ฌ ๋ Œ๋” ํŠธ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. 
  3. ๋ธŒ๋ผ์šฐ์ €์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์€ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์‘๋‹ต๋œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ํŒŒ์‹ฑํ•˜์—ฌ AST(abstract syntax tree)*๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๋ฐ”์ดํŠธ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์‹คํ–‰ํ•œ๋‹ค. ์ด๋•Œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” DOM API๋ฅผ ํ†ตํ•ด DOM์ด๋‚˜ CSSOM๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ณ€๊ฒฝ๋œ DOM๊ณผ CSSOM์€ ๋‹ค์‹œ ๋ Œ๋”ํŠธ๋ฆฌ๋กœ ๊ฒฐํ•ฉ๋œ๋‹ค.
  4. ๋ Œ๋” ํŠธ๋ฆฌ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ 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๋ฅผ ์ •๋…ํ•˜๊ณ  ์ œ๊ฐ€ ์ดํ•ดํ•œ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค ๐Ÿ‘ฉ‍๐Ÿ’ป