front-end/JavaScript

[JavaScript] 38. ๋ธŒ๋ผ์šฐ์ €์˜ ๋ Œ๋”๋ง ๊ณผ์ •

gaan 2023. 6. 27. 13:59

๐Ÿ”น ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ๋ถ„์•ผ๋Š” ์›น ๋ธŒ๋ผ์šฐ์ € ํ™˜๊ฒฝ์—์„œ ๋™์ž‘ํ•˜๋Š” ์›นํŽ˜์ด์ง€/์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ๋‹ค.

๐Ÿ”น ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๋ธŒ๋ผ์šฐ์ €์—์„œ HTML, CSS์™€ ํ•จ๊ป˜ ์‹คํ–‰๋œ๋‹ค.

 

๐Ÿ’ก ์ด ๋•Œ, ๋ธŒ๋ผ์šฐ์ €๊ฐ€ HTML, CSS, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ์ž‘์„ฑ๋œ ํ…์ŠคํŠธ ๋ฌธ์„œ๋ฅผ ํŒŒ์‹ฑ(ํ•ด์„)ํ•˜๊ณ , ๋ธŒ๋ผ์šฐ์ €์— ๋ Œ๋”๋งํ•˜๋Š” ๊ณผ์ •์„ ๊ฑฐ์น˜๊ฒŒ ๋œ๋‹ค.

 

1. ๋ธŒ๋ผ์šฐ์ €๋Š” HTML, CSS, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ, ์ด๋ฏธ์ง€, ํฐํŠธ ํŒŒ์ผ ๋“ฑ ๋ Œ๋”๋ง์— ํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ์š”์ฒญํ•˜๊ณ  ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์‘๋‹ต๋ฐ›์Œ

2. ๋ธŒ๋ผ์šฐ์ €์˜ ๋ Œ๋”๋ง ์—”์ง„์€ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์‘๋‹ต๋œ HTML๊ณผ CSS๋ฅผ ํŒŒ์‹ฑํ•˜์—ฌ DOM๊ณผ CSSOM์„ ์ƒ์„ฑํ•˜๊ณ  ์ด๋“ค์„ ๊ฒฐํ•ฉํ•˜์—ฌ ๋ Œ๋”ํŠธ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•จ

3. ๋ธŒ๋ผ์šฐ์ €์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์€ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์‘๋‹ต๋œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ํŒŒ์‹ฑํ•˜์—ฌ AT(Abstract Syntax Tree)๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ๋ฐ”์ดํŠธ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์‹คํ–‰ํ•จ. ์ด ๋•Œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” DOM API๋ฅผ ํ†ตํ•ด DOM์ด๋‚˜ CSSOM์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Œ. ๋ณ€๊ฒฝ๋œ DOM๊ณผ CSSOM์€ ๋‹ค์‹œ ๋ Œ๋” ํŠธ๋ฆฌ๋กœ ๊ฒฐํ•ฉ๋จ.

4. ๋ Œ๋” ํŠธ๋ฆฌ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ HTML์š”์†Œ์˜ ๋ ˆ์ด์•„์›ƒ(์œ„์น˜์™€ ํฌ๊ธฐ)์„ ๊ณ„์‚ฐํ•˜๊ณ  ๋ธŒ๋ผ์šฐ์ € ํ™”๋ฉด์— HTML์š”์†Œ๋ฅผ ํŽ˜์ธํŒ…ํ•จ

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

๐Ÿ”น ๋ธŒ๋ผ์šฐ์ €์˜ ํ•ต์‹ฌ ๊ธฐ๋Šฅ : ํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ์„œ๋ฒ„์— ์š”์ฒญํ•˜๊ณ , ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐ›์€ ์‘๋‹ต์œผ๋กœ ๋ธŒ๋ผ์šฐ์ €์— ๋ Œ๋”๋งํ•˜๋Š” ๊ฒƒ

๐Ÿ”น ์„œ๋ฒ„๋Š” ๋ฃจํŠธ ์š”์ฒญ์— ๋Œ€ํ•ด ์•”๋ฌต์ ์œผ๋กœ ์„œ๋ฒ„์˜ ๋ฃจํŠธ ํด๋”์— ์กด์žฌํ•˜๋Š” ์ •์  ํŒŒ์ผ index.html์„ ๋ธŒ๋ผ์šฐ์ €๋กœ ์‘๋‹ตํ•œ๋‹ค.

 

โž• ์š”์ฒญ๊ณผ ์‘๋‹ต์€ ๊ฐœ๋ฐœ์ž ๋„๊ตฌ์˜ Network ํŒจ๋„์—์„œ ํ™•์ธ ๊ฐ€๋Šฅํ•˜๋‹ค.

02. HTTP 1.1๊ณผ HTTP 2.0

๐Ÿ”น HTTP๋Š” ์›น์—์„œ ๋ธŒ๋ผ์šฐ์ €์™€ ์„œ๋ฒ„๊ฐ€ ํ†ต์‹ ํ•˜๊ธฐ ์œ„ํ•œ ํ”„๋กœํ† ์ฝœ์ด๋‹ค.

 

๐Ÿ”น HTTP/1.1 ์€ ์ปค๋„ฅ์…˜ ๋‹น ํ•˜๋‚˜์˜ ์š”์ฒญ๊ณผ ์‘๋‹ต๋งŒ ์ฒ˜๋ฆฌํ•œ๋‹ค.

๐Ÿ”น HTTP/2.0 ์€ ์ปค๋„ฅ์…˜ ๋‹น ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์š”์ฒญ๊ณผ ์‘๋‹ต์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

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

๐Ÿ’ก DOM ์€ HTML ๋ฌธ์„œ๋ฅผ ํŒŒ์‹ฑํ•œ ๊ฒฐ๊ณผ๋ฌผ์ธ ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค.

โ“ ๊ทธ๋ฆผ ์„ค๋ช…!!

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

๐Ÿ”น ๋ Œ๋”๋ง ์—”์ง„์€ HTML์„ ํ•œ ์ค„์”ฉ ํŒŒ์‹ฑํ•˜๋ฉฐ DOM์„ ์ƒ์„ฑํ•˜๋‹ค๊ฐ€, CSS๋ฅผ ๋กœ๋“œํ•˜๋Š” ํƒœ๊ทธ๋ฅผ ๋งŒ๋‚˜๋ฉด DOM ์ƒ์„ฑ์„ ์ผ์‹œ ์ค‘๋‹จํ•œ๋‹ค.

๐Ÿ”น CSS๋ฅผ HTML๊ณผ ๋™์ผํ•œ ํŒŒ์‹ฑ๊ณผ์ •(๋ฐ”์ดํŠธ -> ๋ฌธ์ž -> ํ† ํฐ -> ๋…ธ๋“œ -> CSSOM)์„ ๊ฑฐ์น˜๋ฉฐ CSSOM(CSS Object Model)์„ ์ƒ์„ฑํ•œ๋‹ค.

๐Ÿ”น CSS ํŒŒ์‹ฑ์„ ์™„๋ฃŒํ•˜๋ฉด ๋‹ค์‹œ HTML์„ ํŒŒ์‹ฑํ•˜์—ฌ DOM ์ƒ์„ฑ์„ ์žฌ๊ฐœํ•œ๋‹ค.

๐Ÿ”น CSSOM์€ CSS์˜ ์ƒ์†์„ ๋ฐ˜์˜ํ•˜์—ฌ ์ƒ์„ฑ๋œ๋‹ค.

 

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

๐Ÿ”น ๋ Œ๋”๋ง ์—”์ง„์ด ์ƒ์„ฑํ•œ DOM๊ณผ CSSOM์€ ๋ Œ๋”๋ง์„ ์œ„ํ•ด ๋ Œ๋” ํŠธ๋ฆฌ(render tree)๋กœ ๊ฒฐํ•ฉ๋œ๋‹ค.

๐Ÿ”น ๋ Œ๋”ํŠธ๋ฆฌ๋Š” ๋ Œ๋”๋ง์„ ์œ„ํ•œ ํŠธ๋ฆฌ๊ตฌ์กฐ์˜ ์ž๋ฃŒ๊ตฌ์กฐ์ด๊ณ , ํ™”๋ฉด์— ๋ Œ๋”๋ง๋˜๋Š” ๋…ธ๋“œ๋งŒ์œผ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.

(ex. HTML์˜ metaํƒœ๊ทธ, script ํƒœ๊ทธ, CSS์˜ display:none์€ ๋ถˆํฌํ•จ)

๐Ÿ”น ์ดํ›„ ์™„์„ฑ๋œ ๋ Œ๋”ํŠธ๋ฆฌ๋Š” ๊ฐ HTML์š”์†Œ์˜ ๋ ˆ์ด์•„์›ƒ์„ ๊ณ„์‚ฐํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋˜๋ฉฐ, ๋ธŒ๋ผ์šฐ์ € ํ™”๋ฉด์— ํ”ฝ์…€์„ ๋ Œ๋”๋งํ•˜๋Š” ํŽ˜์ธํŒ… ์ฒ˜๋ฆฌ์— ์ž…๋ ฅ๋œ๋‹ค.

 

โž• ๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง ๊ณผ์ • ๋ฐ˜๋ณต์‹คํ–‰ ์š”์ธ (-> ์„ฑ๋Šฅ์— ์•…์˜ํ–ฅ)

โžก๏ธ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์— ์˜ํ•œ ๋…ธ๋“œ ์ถ”๊ฐ€ ๋˜๋Š” ์‚ญ์ œ

โžก๏ธ ๋ธŒ๋ผ์šฐ์ € ์ฐฝ์˜ ๋ฆฌ์‚ฌ์ด์ง•์— ์˜ํ•œ ๋ทฐํฌํŠธ ํฌ๊ธฐ ๋ณ€๊ฒฝ

โžก๏ธ HTML์š”์†Œ์˜ ๋ ˆ์ด์•„์›ƒ์— ๋ณ€๊ฒฝ์„ ๋ฐœ์ƒ์‹œํ‚ค๋Š” width/height, margin, padding, border, display, position, top/right/bottom/left ๋“ฑ์˜ ์Šคํƒ€์ผ ๋ณ€๊ฒฝ

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

๐Ÿ”น HTML์€ DOM ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๋‹ค๊ฐ€ script ํƒœ๊ทธ๋ฅผ ๋งŒ๋‚˜๋ฉด DOM ์ƒ์„ฑ์„ ์ผ์‹œ ์ค‘๋‹จํ•œ๋‹ค.

๐Ÿ”น ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์— ์ œ์–ด๊ถŒ์„ ๋„˜๊ฒจ, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์‹ฑ์„ ์‹คํ–‰ํ•œ๋‹ค.

๐Ÿ”น ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์‹ฑ์ด ์ข…๋ฃŒ๋˜๋ฉด ๋ Œ๋”๋ง ์—”์ง„์œผ๋กœ ์ œ์–ด๊ถŒ์„ ๋„˜๊ฒจ ๋‹ค์‹œ HTML ํŒŒ์‹ฑ์„ ์‹œ์ž‘ํ•œ๋‹ค.

 

๐Ÿ’ก ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์ด ํ•˜๋Š” ์ผ

๐Ÿ”น ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ•ด์„ํ•˜์—ฌ AST(Abstract Syntax Tree, ์ถ”์ƒ์  ๊ตฌ๋ฌธ ํŠธ๋ฆฌ)๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

๐Ÿ”น AST๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์‹คํ–‰ํ•œ๋‹ค.

 

1. ํ† ํฌ๋‚˜์ด์ง• (tokenizing)

๐Ÿ”น ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์–ดํœ˜๋ถ„์„ํ•˜์—ฌ ํ† ํฐ๋“ค๋กœ ๋ถ„ํ•ดํ•œ๋‹ค.

 

2. ํŒŒ์‹ฑ (parsing)

๐Ÿ”น ํ† ํฐ๋“ค์˜ ์ง‘ํ•ฉ์„ ๊ตฌ๋ฌธ๋ถ„์„ํ•˜์—ฌ AST๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

 

3. ๋ฐ”์ดํŠธ์ฝ”๋“œ ์ƒ์„ฑ๊ณผ ์‹คํ–‰

๐Ÿ”น AST๋Š” ๋ฐ”์ดํŠธ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜๋˜๊ณ , ์ธํ„ฐํ”„๋ฆฌํ„ฐ์— ์˜ํ•ด ์‹คํ–‰๋œ๋‹ค.

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

๐Ÿ”น ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ์— DOM์ด๋‚˜ CSSOM์„ ๋ณ€๊ฒฝํ•˜๋Š” DOM API๊ฐ€ ์‚ฌ์šฉ๋œ ๊ฒฝ์šฐ -> ๋ฆฌํ”Œ๋กœ์šฐ, ๋ฆฌํŽ˜์ธํŠธ๊ฐ€ ์ผ์–ด๋‚œ๋‹ค.

๐Ÿ”น ๋ฆฌํ”Œ๋กœ์šฐ : ๋ ˆ์ด์•„์›ƒ ๋ณ€๊ฒฝ์ด ์ผ์–ด๋‚˜ ๋ ˆ์ด์•„์›ƒ ๊ณ„์‚ฐ์„ ๋‹ค์‹œ ํ•˜๋Š” ๊ฒƒ

๐Ÿ”น ๋ฆฌํŽ˜์ธํŠธ : ๋ ˆ์ด์•„์›ƒ ๋ณ€๊ฒฝ์ด ์—†๋Š” ๊ฒฝ์šฐ, ์žฌ๊ฒฐํ•ฉ๋œ ๋ Œ๋” ํŠธ๋ฆฌ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋‹ค์‹œ ํŽ˜์ธํŠธ ํ•˜๋Š” ๊ฒƒ

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

๐Ÿ”น ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ script ํƒœ๊ทธ๊ฐ€ html ํƒœ๊ทธ๊ฐ€ ๋ชจ๋‘ ํŒŒ์‹ฑ๋˜๊ธฐ ์ „์— ์‹คํ–‰๋œ๋‹ค๋ฉด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—

(HTML ํŒŒ์‹ฑ์ด ๋ธ”๋กœํ‚น๋˜์–ด DOM ์ƒ์„ฑ์ด ์ง€์—ฐ๋จ์œผ๋กœ์จ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์ ๋“ค์ด ์กด์žฌํ•จ)

โžก๏ธ body ์š”์†Œ ๊ฐ€์žฅ ์•„๋ž˜์— ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์œ„์น˜์‹œํ‚ค๋Š” ํŽธ์ด ์ข‹๋‹ค.

โžก๏ธ ์ด๋กœ์จ ํŽ˜์ด์ง€ ๋กœ๋”ฉ์‹œ๊ฐ„์„ ๋‹จ์ถ•์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

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

๐Ÿ’ก ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์‹ฑ์— ์˜ํ•œ DOM ์ƒ์„ฑ์ด ์ค‘๋‹จ๋˜๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๋Œ€์ฑ…์œผ๋กœ HTML5๋ถ€ํ„ฐ ์ถ”๊ฐ€๋˜์—ˆ๋‹ค.

 

<script async src='extern.js'></script>
<script defer src='extern.js'></script>

1. asynce ์–ดํŠธ๋ฆฌ๋ทฐํŠธ

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

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

 

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

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

๐Ÿ”น ๋‹จ, HTML ํŒŒ์‹ฑ์ด ๋๋‚œ ํ›„์— ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์‹ฑ์ด ์‹คํ–‰๋œ๋‹ค.

 

 

๐Ÿ“– ์ฐธ๊ณ ์ž๋ฃŒ

https://www.inflearn.com/course/%EB%AA%A8%EB%8D%98-%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%EB%94%A5%EB%8B%A4%EC%9D%B4%EB%B8%8C/dashboard