๊ด€๋ฆฌ ๋ฉ”๋‰ด

Daehyunii's Dev-blog

38์žฅ ๋ธŒ๋ผ์šฐ์ €์˜ ๋ Œ๋”๋ง ๊ณผ์ • ๋ณธ๋ฌธ

๐Ÿ“š Language & CS knowledge/JavaScript (๋ชจ๋˜์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ Deep Dive)

38์žฅ ๋ธŒ๋ผ์šฐ์ €์˜ ๋ Œ๋”๋ง ๊ณผ์ •

Daehyunii 2022. 7. 28. 16:07

  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๋ธŒ๋ผ์šฐ์ €์—์„œ HTML, CSS์™€ ํ•จ๊ป˜ ์‹คํ–‰๋œ๋‹ค. ๋”ฐ๋ผ์„œ ๋ธŒ๋ผ์šฐ์ € ํ™˜๊ฒฝ์„ ๊ณ ๋ คํ•  ๋•Œ ๋” ํšจ์œจ์ ์ธ ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ์ด๋ฅผ ์œ„ํ•ด ๋ธŒ๋ผ์šฐ์ €๊ฐ€ HTML, CSS, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ์ž‘์„ฑ๋œ ํ…์ŠคํŠธ ๋ฌธ์„œ๋ฅผ ์–ด๋–ป๊ฒŒ ํŒŒ์‹ฑ(ํ•ด์„)ํ•˜์—ฌ ๋ธŒ๋ผ์šฐ์ €์— ๋ Œ๋”๋งํ•˜๋Š”์ง€ ์‚ดํŽด ๋ณผ ํ•„์š”๊ฐ€ ์žˆ๋‹ค.

 

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

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

 

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

 

38.1 ์š”์ฒญ๊ณผ ์‘๋‹ต

  ๋ธŒ๋ผ์šฐ์ €์˜ ํ•ต์‹ฌ ๊ธฐ๋Šฅ์€ ํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ์„œ๋ฒ„์— ์š”์ฒญํ•˜๊ณ  ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์‘๋‹ต๋ฐ›์•„ ๋ธŒ๋ผ์šฐ์ €์— ์‹œ๊ฐ์ ์œผ๋กœ ๋ Œ๋”๋งํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์ฆ‰ ๋ Œ๋”๋ง์— ํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค๋Š” ๋ชจ๋‘ ์„œ๋ฒ„์— ์กด์žฌํ•˜๋ฏ€๋กœ ํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ์„œ๋ฒ„์— ์š”์ฒญํ•˜๊ณ  ์„œ๋ฒ„๊ฐ€ ์‘๋‹ตํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ํŒŒ์‹ฑํ•˜์—ฌ ๋ Œ๋”๋ง ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์„œ๋ฒ„์— ์š”์ฒญ์„ ์ „์†กํ•˜๊ธฐ ์œ„ํ•ด ๋ธŒ๋ผ์šฐ์ €๋Š” ์ฃผ์†Œ์ฐฝ์„ ์ œ๊ณตํ•œ๋‹ค. ๋ธŒ๋ผ์šฐ์ €์˜ ์ฃผ์†Œ์ฐฝ์— URL์„ ์ž…๋ ฅํ•˜๊ณ  ์—”ํ„ฐ ํ‚ค๋ฅผ ๋ˆ„๋ฅด๋ฉด URL ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์ด DNS๋ฅผ ํ†ตํ•ด IP ์ฃผ์†Œ๋กœ ๋ณ€ํ™˜๋˜๊ณ  ์ด IP ์ฃผ์†Œ๋ฅผ ๊ฐ–๋Š” ์„œ๋ฒ„์—๊ฒŒ ์š”์ฒญ์„ ์ „์†กํ•œ๋‹ค.

 

38.2 HTTP 1.1 ๊ณผ HTTP 2.0

  HTTP๋Š” HyperText Transfer Protocol์˜ ์•ฝ์ž๋กœ ์›น์—์„œ ๋ธŒ๋ผ์šฐ์ €์™€ ์„œ๋ฒ„๊ฐ€ ํ†ต์‹ ํ•˜๊ธฐ ์œ„ํ•œ ๊ทœ์•ฝ์ด๋‹ค. HTTP 1.1์€ ๋‹ค์ค‘ ์š”์ฒญ/์‘๋‹ต์ด ๋ถˆ๊ฐ€ํ•˜๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ์ง€๋งŒ HTTP/2๋Š” ์ปค๋„ฅ์…˜๋‹น ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์š”์ฒญ๊ณผ ์‘๋‹ต, ์ฆ‰ ๋‹ค์ค‘ ์š”์ฒญ/์‘๋‹ต์ด ๊ฐ€๋Šฅํ•˜๋‹ค. 

 

38.2 HTMLํŒŒ์‹ฑ๊ณผ DOM์ƒ์„ฑ

  ๋ธŒ๋ผ์šฐ์ €์˜ ์š”์ฒญ์— ์˜ํ•ด ์„œ๋ฒ„๊ฐ€ ์‘๋‹ตํ•œ HTML ๋ฌธ์„œ๋Š” ๋ฌธ์ž์—ด๋กœ ์ด๋ฃจ์–ด์ง„ ์ˆœ์ˆ˜ํ•œ ํ…์ŠคํŠธ๋‹ค. ์ˆœ์ˆ˜ํ•œ ํ…์ŠคํŠธ์ธ HTML ๋ฌธ์„œ๋ฅผ ๋ธŒ๋ผ์šฐ์ €์— ์‹œ๊ฐ์ ์ธ ํ”ฝ์…€๋กœ ๋ Œ๋”๋งํ•˜๋ ค๋ฉด HTML ๋ฌธ์„œ๋ฅผ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ(๊ฐ์ฒด)๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•ด์•ผ ํ•œ๋‹ค. ๋ธŒ๋ผ์šฐ์ €์˜ ๋ Œ๋”๋ง ์—”์ง„์€ ๋‹ค์Œ ๊ณผ์ •์„ ํ†ตํ•ด ์‘๋‹ต๋ฐ›์€ HTML ๋ฌธ์„œ๋ฅผ ํŒŒ์‹ฑํ•˜์—ฌ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ธ DOM์„ ์ƒ์„ฑํ•œ๋‹ค.

 

1.  ๋ธŒ๋ผ์šฐ์ €๋Š” ์„œ๋ฒ„๊ฐ€ ์‘๋‹ตํ•œ HTML ๋ฌธ์„œ๋ฅผ ๋ฐ”์ดํŠธ(2์ง„์ˆ˜) ํ˜•ํƒœ๋กœ ์‘๋‹ต๋ฐ›๋Š”๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด๋ฅผ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.

2. ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜๋œ HTML ๋ฌธ์„œ๋ฅผ ์ฝ์–ด ๋ฌธ๋ฒ•์  ์˜๋ฏธ๋ฅผ ๊ฐ–๋Š” ์ฝ”๋“œ์˜ ์ตœ์†Œ ๋‹จ์œ„์ธ ํ† ํฐ๋“ค๋กœ ๋ถ„ํ•ดํ•œ๋‹ค.

3. ๊ฐ ํ† ํฐ๋“ค์„ ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋…ธ๋“œ๋“ค์„ ์ƒ์„ฑํ•œ๋‹ค.

4. HTML ์š”์†Œ ๊ฐ„์˜ ๋ถ€์ž ๊ด€๊ณ„๋ฅผ ๋ฐ˜์˜ํ•˜์—ฌ ๋ชจ๋“  ๋…ธ๋“œ๋“ค์„  ํŠธ๋ฆฌ ์ž๋ฃŒ๊ตฌ์กฐ๋กœ ๊ตฌ์„ฑํ•œ๋‹ค ์ด๋ฅผ DOM์ด๋ผ ๋ถ€๋ฅธ๋‹ค.

 

38.4 CSS ํŒŒ์‹ฑ๊ณผ CSSOM ์ƒ์„ฑ  

  ๋ Œ๋”๋ง ์—”์ง„์€ HTML์„ ์ฒ˜์Œ๋ถ€ํ„ฐ ํ•œ ์ค„์”ฉ ์ˆœ์ฐจ์ ์œผ๋กœ ํŒŒ์‹ฑํ•˜์—ฌ DOM์„ ์ƒ์„ฑํ•ด ๋‚˜๊ฐ„๋‹ค. ์ด์ฒ˜๋Ÿผ ๋ Œ๋”๋ง ์—”์ง„์€ DOM์„ ์ƒ์„ฑํ•ด ๋‚˜๊ฐ€๋‹ค๊ฐ€ CSS๋ฅผ ๋กœ๋“œํ•˜๋Š” linkํƒœ๊ทธ๋‚˜ styleํƒœ๊ทธ๋ฅผ ๋งŒ๋‚˜๋ฉด DOM ์ƒ์„ฑ์„ ์ผ์‹œ ์ค‘๋‹จํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  link ํƒœ๊ทธ์˜ href ์–ดํŠธ๋ฆฌ๋ทฐํŠธ์— ์ง€์ •๋œ CSS ํŒŒ์ผ์„ ์„œ๋ฒ„์— ์š”์ฒญํ•˜์—ฌ ๋กœ๋“œํ•œ CSS ํŒŒ์ผ์ด๋‚˜ style ํƒœ๊ทธ ๋‚ด์˜ CSS๋ฅผ HTML๊ณผ ๋™์ผํ•œ ํŒŒ์‹ฑ๊ณผ์ •์„ ๊ฑฐ์ณ CSSOM์„ ์ƒ์„ฑํ•œ๋‹ค. ๊ทธ ํ›„ ์ค‘๋‹จ๋œ ์ง€์ ๋ถ€ํ„ฐ ๋‹ค์‹œ HTML์„ ํŒŒ์‹ฑํ•˜๊ธฐ ์‹œ์ž‘ํ•˜์—ฌ DOM ์ƒ์„ฑ์„ ์žฌ๊ฐœํ•œ๋‹ค.

 

38.5 ๋ Œ๋” ํŠธ๋ฆฌ ์ƒ์„ฑ

  ๋ Œ๋”๋ง ์—”์ง„์€ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์‘๋‹ต๋œ HTML๊ณผ CSS๋ฅผ ํŒŒ์‹ฑํ•˜์—ฌ ๊ฐ๊ฐ DOM๊ณผ CSSOM๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  DOM๊ณผ CSSOM์€ ๋ Œ๋”๋ง์„ ์œ„ํ•ด ๋ Œ๋” ํŠธ๋ฆฌ๋กœ ๊ฒฐํ•ฉ๋œ๋‹ค. ๋ Œ๋” ํŠธ๋ฆฌ๋Š” ๋ Œ๋”๋ง์„ ์œ„ํ•œ ํŠธ๋ฆฌ ๊ตฌ์กฐ์˜ ์ž๋ฃŒ๊ตฌ์กฐ๋‹ค. ๋”ฐ๋ผ์„œ ๋ธŒ๋ผ์šฐ์ € ํ™”๋ฉด์— ๋ Œ๋”๋ง๋˜์ง€ ์•Š๋Š” ๋…ธ๋“œ์™€ CSS์— ์˜ํ•ด ๋น„ํ‘œ์‹œ๋˜๋Š” ๋…ธ๋“œ๋“ค์€ ํฌํ•จํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ดํ›„ ์™„์„ฑ๋œ ๋ Œ๋” ํŠธ๋ฆฌ๋Š” ๊ฐ HTML ์š”์†Œ์˜ ๋ ˆ์ด์•„์›ƒ์„ ๊ณ„์‚ฐํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋ฉฐ ๋ธŒ๋ผ์šฐ์ € ํ™”๋ฉด์— ํ”ฝ์…€์„ ๋ Œ๋”๋งํ•˜๋Š” ํŽ˜์ธํŒ… ์ฒ˜๋ฆฌ์— ์ž…๋ ฅ๋œ๋‹ค. 

 

38.6 ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์‹ฑ๊ณผ ์‹คํ–‰

  CSS ํŒŒ์‹ฑ ๊ณผ์ •๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ Œ๋”๋ง ์—”์ง„์€ HTML์„ ํ•œ ์ค„์”ฉ ์ˆœ์ฐจ์ ์œผ๋กœ ํŒŒ์‹ฑํ•˜๋ฉฐ DOM์„ ์ƒ์„ฑํ•ด ๋‚˜๊ฐ€๋‹ค๊ฐ€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์„ ๋กœ๋“œํ•˜๋Š” script ํƒœ๊ทธ๋‚˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋ฅผ ์ปจํ…์ธ ๋กœ ๋‹ด์€ script ํƒœ๊ทธ๋ฅผ ๋งŒ๋‚˜๋ฉด DOM์ƒ์„ฑ์„ ์ผ์‹œ ์ค‘๋‹จํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  script ํƒœ๊ทธ์˜ src ์–ดํŠธ๋ฆฌ๋ทฐํŠธ์— ์ •์˜๋œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์„ ์„œ๋ฒ„์— ์š”์ฒญํ•˜์—ฌ ๋กœ๋“œํ•œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์ด๋‚˜ script ํƒœ๊ทธ ๋‚ด์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋ฅผ ํŒŒ์‹ฑํ•˜๊ธฐ ์œ„ํ•ด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์— ์ œ์–ด๊ถŒ์„ ๋„˜๊ธด๋‹ค. ์ดํ›„ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์‹ฑ๊ณผ ์‹คํ–‰์ด ์ข…๋ฃŒ๋˜๋ฉด ๋ Œ๋”๋ง ์—”์ง„์œผ๋กœ ๋‹ค์‹œ ์ œ์–ด๊ถŒ์„ ๋„˜๊ฒจ HTML ํŒŒ์‹ฑ์ด ์ค‘๋‹จ๋œ ์ง€์ ๋ถ€ํ„ฐ ๋‹ค์‹œ HTML ํŒŒ์‹ฑ์„ ์‹œ์ž‘ํ•˜์—ฌ DOM ์ƒ์„ฑ์„ ์žฌ๊ฐœํ•œ๋‹ค.

 

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์‹ฑ ๊ณผ์ •

1. ํ† ํฌ๋‚˜์ด์ง•  : ๋‹จ์ˆœํ•œ ๋ฌธ์ž์—ด์ธ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์–ดํœ˜ ๋ถ„์„ํ•˜์—ฌ ๋ฌธ๋ฒ•์  ์˜๋ฏธ๋ฅผ ๊ฐ–๋Š” ์ฝ”๋“œ์˜ ์ตœ์†Œ ๋‹จ์œ„์ธ ํ† ํฐ์œผ๋กœ ๋ถ„ํ•ดํ•œ๋‹ค.

2. ํŒŒ์‹ฑ : ํ† ํฐ๋“ค์˜ ์ง‘ํ•ฉ์„ ๊ตฌ๋ฌธ ๋ถ„์„ํ•˜์—ฌ AST(์ถ”์ƒ์  ๊ตฌ๋ฌธ ํŠธ๋ฆฌ)๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

3. ๋ฐ”์ดํŠธ์ฝ”๋“œ ์ƒ์„ฑ๊ณผ ์‹คํ–‰ : ํŒŒ์‹ฑ์˜ ๊ฒฐ๊ณผ๋ฌผ๋กœ ์ƒ์„ฑ๋œ AST๋Š” ์ธํ„ฐํ”„๋ฆฌํ„ฐ๊ฐ€ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ค‘๊ฐ„ ์ฝ”๋“œ์ธ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜๋˜๊ณ  ์ธํ„ฐํ”„๋ฆฌํ„ฐ์— ์˜ํ•ด ์‹คํ–‰๋œ๋‹ค.

 

38.7 ๋ฆฌํ”Œ๋กœ์šฐ์™€ ๋ฆฌํŽ˜์ธํŠธ

  ๋งŒ์•ฝ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ์— DOM์ด๋‚˜ CSSOM์„ ๋ณ€๊ฒฝํ•˜๋Š” DOM API๊ฐ€ ์‚ฌ์šฉ๋œ ๊ฒฝ์šฐ DOM์ด๋‚˜ CSSOM์ด ๋ณ€๊ฒฝ๋œ๋‹ค. ์ด๋•Œ ๋ณ€๊ฒฝ๋œ DOM๊ณผ CSSOM์€ ๋‹ค์‹œ ๋ Œ๋” ํŠธ๋ฆฌ๋กœ ๊ฒฐํ•ฉ๋˜๊ณ  ๋ณ€๊ฒฝ๋œ ๋ Œ๋” ํŠธ๋ฆฌ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ ˆ์ด์•„์›ƒ๊ณผ ํŽ˜์ธํŠธ ๊ณผ์ •์„ ๊ฑฐ์ณ ๋ธŒ๋ผ์šฐ์ €์˜ ํ™”๋ฉด์— ๋‹ค์‹œ ๋ Œ๋”๋งํ•œ๋‹ค. ์ด๋ฅผ ๋ฆฌํ”Œ๋กœ์šฐ, ๋ฆฌํŽ˜์ธํŠธ๋ผ ํ•œ๋‹ค.

 

38.8 ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์‹ฑ์— ์˜ํ•œ HTML ํŒŒ์‹ฑ ์ค‘๋‹จ

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

 

38.9 script ํƒœ๊ทธ์˜ async/defer ์–ดํŠธ๋ฆฌ๋ทฐํŠธ

  ์œ„์—์„œ ์‚ดํŽด๋ณธ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์‹ฑ์— ์˜ํ•œ DOM ์ƒ์„ฑ์ด ์ค‘๋‹จ๋˜๋Š” ๋ฌธ์ œ๋ฅผ ๊ทผ๋ณธ์ ์œผ๋กœ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด HTML5๋ถ€ํ„ฐ script ํƒœ๊ทธ์— async์™€ defer ์–ดํŠธ๋ฆฌ๋ทฐํŠธ๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ๋‹ค. async์™€ defer ์–ดํŠธ๋ฆฌ๋ทฐํŠธ๋Š” src ์–ดํŠธ๋ฆฌ๋ทฐํŠธ๋ฅผ ํ†ตํ•ด ์™ธ๋ถ€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์„ ๋กœ๋“œํ•˜๋Š” ๊ฒฝ์šฐ์—๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰ src ์–ดํŠธ๋ฆฌ๋ทฐํŠธ๊ฐ€ ์—†๋Š” ์ธ๋ผ์ธ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.

 

async ์–ดํŠธ๋ฆฌ๋ทฐํŠธ

HTML ํŒŒ์‹ฑ๊ณผ ์™ธ๋ถ€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์˜ ๋กœ๋“œ๊ฐ€ ๋น„๋™๊ธฐ์ ์œผ๋กœ ๋™์‹œ์— ์ง„ํ–‰๋œ๋‹ค. ๋‹จ, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ํŒŒ์‹ฑ๊ณผ ์‹คํ–‰์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์˜ ๋กœ๋“œ๊ฐ€ ์™„๋ฃŒ๋œ ์งํ›„ ์ง„ํ–‰๋˜๋ฉฐ, ์ด๋•Œ HTML ํŒŒ์‹ฑ์ด ์ค‘๋‹จ๋œ๋‹ค.

 

defer ์–ดํŠธ๋ฆฌ๋ทฐํŠธ

HTML ํŒŒ์‹ฑ๊ณผ ์™ธ๋ถ€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์˜ ๋กœ๋“œ๊ฐ€ ๋น„๋™๊ธฐ์ ์œผ๋กœ ๋™์‹œ์— ์ง„ํ–‰๋œ๋‹ค. ๋‹จ, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ํŒŒ์‹ฑ๊ณผ ์‹คํ–‰์€ HTML ํŒŒ์‹ฑ์ด ์™„๋ฃŒ๋œ ์งํ›„, ์ฆ‰ DOM ์ƒ์„ฑ์ด ์™„๋ฃŒ๋œ ์งํ›„ ์ง„ํ–‰๋œ๋‹ค.