๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’ป ํ”„๋ก ํŠธ์—”๋“œ/๐Ÿ“š JS

๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง ์›๋ฆฌ

by megan07 2023. 12. 27.

๋ชจ๋˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋”ฅ๋‹ค์ด๋ธŒ ์Šคํ„ฐ๋””

 

๊ฐ„๋žตํ•˜๊ฒŒ

  1. HTML๊ณผ CSS ๋“ฑ ๋ฆฌ์†Œ์Šค๋ฅผ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐ›์œผ๋ฉด, ๋ธŒ๋ผ์šฐ์ €์˜ ๋ Œ๋”๋ง ์—”์ง„์—์„œ ํŒŒ์‹ฑํ•œ๋‹ค.
  2. HTML์„ ํŒŒ์‹ฑํ•˜๋ฉด์„œ DOMํŠธ๋ฆฌ์™€ CSSOMํŠธ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
  3. DOMํŠธ๋ฆฌ์™€ CSSOMํŠธ๋ฆฌ๋ฅผ ๊ฒฐํ•ฉํ—ค์„œ Render ํŠธ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•œ ํ›„, ๋ ˆ์ด์•„์›ƒ ์ž‘์—…๊ณผ ํŽ˜์ธํŒ… ์ž‘์—…์„ ํ•œ๋‹ค.

 

์ƒ์„ธํ•˜๊ฒŒ

  1. ๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง ์—”์ง„์€ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐ›์€ HTML์„ ํ† ํฐ(๋ฌธ๋ฒ•์  ์˜๋ฏธ๋ฅผ ๊ฐ–๋Š” ์ฝ”๋“œ์˜ ์ตœ์†Œ ๋‹จ์œ„)์œผ๋กœ ๋ถ„ํ•ดํ•œ๋‹ค.
  2. ๊ฐ ํ† ํฐ๋“ค์„ ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋…ธ๋“œ๋“ค์„ ์ƒ์„ฑํ•œ๋‹ค.
    ๊ฐ ๋…ธ๋“œ๋“ค์€ ํŠธ๋ฆฌ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ ์ด๋ฅผ DOM์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.
  3.  HTML์„ ํ•œ ์ค„์”ฉ ํŒŒ์‹ฑํ•ด๋‚˜๊ฐ€๋‹ค๊ฐ€ linkํƒœ๊ทธ๋‚˜ styleํƒœ๊ทธ๋ฅผ ๋งŒ๋‚˜๋ฉด DOM์ƒ์„ฑ์„ ์ผ์‹œ์ค‘๋‹จํ•˜๊ณ  CSSํŒŒ์ผ์„ ์„œ๋ฒ„์— ์š”์ฒญํ•œ๋‹ค.
  4. ์š”์ฒญ๋ฐ›์€ CSSํŒŒ์ผ ๋˜๋Š” styleํƒœ๊ทธ ์•ˆ์˜ CSS๋ฅผ ํŒŒ์‹ฑํ•˜์—ฌ CSSOM์„ ์ƒ์„ฑํ•œ๋‹ค.
  5. HTML ํŒŒ์‹ฑ์„ ๋งˆ์ € ์ง„ํ–‰ํ•œ๋‹ค.
  6. DOM๊ณผ CSSOM์„ ๊ฒฐํ•ฉํ•˜์—ฌ ๋ Œ๋”ํŠธ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
  7. ๋ Œ๋”ํŠธ๋ฆฌ๋Š” ๋ Œ๋”๋ง์„ ์œ„ํ•œ ํŠธ๋ฆฌ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ธŒ๋ผ์šฐ์ €์— ๋ Œ๋”๋ง ๋˜๋Š” ๋…ธ๋“œ๋งŒ์œผ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.
  8. ๋ Œ๋”ํŠธ๋ฆฌ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ HTML ์š”์†Œ์˜ ๋ ˆ์ด์•„์›ƒ(์œ„์น˜, ํฌ๊ธฐ)์„ ๊ณ„์‚ฐ์„ ํ•œ ํ›„, ๋ธŒ๋ผ์šฐ์ € ํ™”๋ฉด์— ํŽ˜์ธํŠธ ์ž‘์—…์„ ํ•œ๋‹ค.

๋ ˆ์ด์•„์›ƒ ๊ณ„์‚ฐ๊ณผ ํŽ˜์ธํŠธ๋ฅผ ๋‹ค์‹œ ์‹คํ–‰ํ•˜๋Š” ๋ฆฌ๋ Œ๋”๋ง์€ ๋น„์šฉ์ด ํฌ๊ธฐ ๋•Œ๋ฌธ์— ์ฃผ์˜ํ•  ๊ฒƒ!
๋ฆฌํŽ˜์ธํŠธ : ๋ ˆ์ด์•„์›ƒ ๋ณ€๊ฒฝ ์—†๋Š” ๊ฒฝ์šฐ, ์—…๋ฐ์ดํŠธ๋œ ๋ Œ๋” ํŠธ๋ฆฌ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํŽ˜์ธํŠธ๋งŒ ๋‹ค์‹œ ์‹คํ–‰๋˜๋Š” ๊ฒƒ
๋ฆฌํ”Œ๋กœ์šฐ : ๋ ˆ์ด์•„์›ƒ ๊ณ„์‚ฐ๋ถ€ํ„ฐ ํŽ˜์ธํŠธ๊นŒ์ง€ ๋‹ค์‹œ ํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ

 

๐Ÿ’กJS๋Š” ์–ด๋–ป๊ฒŒ ํŒŒ์‹ฑ๋ ๊นŒ?

 

HTML์„ ํŒŒ์‹ฑํ•˜๋ฉด์„œ script ํƒœ๊ทธ๋ฅผ ๋งŒ๋‚˜๋ฉด HTMLํŒŒ์‹ฑ์ด ์ค‘๋‹จ๋˜๊ณ  Javascript๋ฅผ ์šฐ์„ ์ ์œผ๋กœ ํŒŒ์‹ฑํ•œ๋‹ค.

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์‹ฑ๊ณผ ์‹คํ–‰์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์ด ์ฒ˜๋ฆฌํ•œ๋‹ค.(Not ๋ Œ๋”๋ง ์—”์ง„)
์šฐ๋ฆฌ๊ฐ€ ํ”ํžˆ ์•Œ๊ณ  ์žˆ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์€ ํฌ๋กฌ์—์„œ ์‚ฌ์šฉํ•˜๋Š” V8

 

  1. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ํ† ํฐ์œผ๋กœ ๋ถ„ํ•ดํ•œ๋‹ค.
  2. ํ† ํฐ๋“ค์„ ์ง‘ํ•ฉ์„ ๊ตฌ๋ฌธ๋ถ„์„ํ•˜์—ฌ AST(์ถ”์ƒ์  ๊ตฌ๋ฌธ ํŠธ๋ฆฌ)๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
  3. AST๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์ธํ„ฐํ”„๋ฆฌํ„ฐ๊ฐ€ ์ด๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.

 

(AST๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํŠธ๋žœ์ŠคํŒŒ์ผ๋Ÿฌ๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค)

DOMํŠธ๋ฆฌ๊ฐ€ ์ƒ์„ฑ๋˜๊ธฐ ์ „์— Javascript๊ฐ€ ์‹คํ–‰๋˜๋ฉด ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค.

-> ๋”ฐ๋ผ์„œ async/defer ์–ดํŠธ๋ฆฌ๋ทฐํŠธ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋น„๋™๊ธฐ์ ์œผ๋กœ javascript๋ฅผ ๋กœ๋“œํ•ด์ฃผ๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

async๋Š” ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์„ ๋กœ๋“œํ•˜์ง€๋งŒ ๋กœ๋“œ๊ฐ€ ์™„๋ฃŒ๋œ ์งํ›„ ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— HTML ํŒŒ์‹ฑ์ด ์™„๋ฃŒ๋˜์ง€ ์•Š์€ ์ƒํƒœ์—์„œ ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋‹ค.
defer๋Š” ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์„ ๋กœ๋“œํ•˜๊ณ  HTML ํŒŒ์‹ฑ์ด ์™„๋ฃŒ๋œ ์งํ›„ ์‹คํ–‰๋œ๋‹ค. ํ•„์ž๋Š” ์ฃผ๋กœ defer๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.