Skip to content

Commit

Permalink
Merge pull request #1200 from nincoding/nincoding
Browse files Browse the repository at this point in the history
38-2์žฅ ๋ธŒ๋ผ์šฐ์ €์˜ ๋ Œ๋”๋ง ๊ณผ์ • - ํ•œ์ˆ˜์ง€
  • Loading branch information
Ryan-Dia authored Jan 11, 2024
2 parents 02f7e9a + c9732ee commit f668249
Showing 1 changed file with 84 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -97,3 +97,87 @@ Node.js์˜ ๋“ฑ์žฅ์œผ๋กœ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ์›น ๋ธŒ๋ผ์šฐ์ €๋ฅผ ๋ฒ—์–ด๋‚˜ ์„œ
![](https://velog.velcdn.com/images/ninto_2/post/3c56e361-f321-48b5-ae46-8455b94b3ba5/image.png)

---

### ๐Ÿ“Œ 38-4. CSS ํŒŒ์‹ฑ๊ณผ CSSOM ์ƒ์„ฑ

๋ Œ๋”๋ง ์—”์ง„์€ HTML์„ ์ฒ˜์Œ๋ถ€ํ„ฐ ํ•œ ์ค„์”ฉ ์ˆœ์ฐจ์ ์œผ๋กœ ํŒŒ์‹ฑํ•˜์—ฌ DOM์„ ์ƒ์„ฑํ•ด๋‚˜๊ฐ„๋‹ค.

๊ทธ ๊ณผ์ •์—์„œ CSS๋ฅผ ๋กœ๋“œํ•˜๋Š” linkํƒœ๊ทธ๋‚˜ styleํƒœ๊ทธ๋ฅผ ๋งŒ๋‚˜๋ฉด DOM์ƒ์„ฑ์„ ์ผ์‹œ ์ค‘๋‹จํ•˜๊ณ , ์ง€์ •๋œ CSSํŒŒ์ผ์„ ์„œ๋ฒ„์— ์š”์ฒญํ•˜์—ฌ HTML๊ณผ ๋™์ผํ•œ ํŒŒ์‹ฑ ๊ณผ์ •์„ ๊ฑฐ์น˜๋ฉฐ ํ•ด์„ํ•˜์—ฌ CSSOM์„ ์ƒ์„ฑํ•œ๋‹ค.

> ๋ฐ”์ดํŠธ -> ๋ฌธ์ž -> ํ† ํฐ -> ๋…ธ๋“œ -> CSSOM ์ƒ์„ฑ
์ดํ›„ CSSํŒŒ์‹ฑ์ด ์™„๋ฃŒ๋˜๋ฉด HTML ํŒŒ์‹ฑ์ด ์ค‘๋‹จ๋œ ์ง€์ ๋ถ€ํ„ฐ ๋‹ค์‹œ HTMLํŒŒ์‹ฑ์„ ํ•˜๊ธฐ ์‹œ์ž‘ํ•˜์—ฌ DOM ์ƒ์„ฑ์„ ์žฌ๊ฐœํ•œ๋‹ค.

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

DOM๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€์˜ ํ˜•ํƒœ๋กœ, ๋ชจ๋“  ์š”์†Œ์˜ ์Šคํƒ€์ผ ์š”์†Œ๊ฐ€ ํŠธ๋ฆฌ ํ˜•ํƒœ๋กœ ์ƒ์† ๊ด€๊ณ„๊ฐ€ ๋ฐ˜์˜๋˜์–ด ์ƒ์„ฑ๋œ๋‹ค.

---

### ๐Ÿ“Œ 38-5. ๋ Œ๋” ํŠธ๋ฆฌ ์ƒ์„ฑ

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

> **DOM๊ณผ CSSOM์€ ๋ Œ๋”๋ง์„ ์œ„ํ•ด ๋ Œ๋” ํŠธ๋ฆฌ๋กœ ๊ฒฐํ•ฉ๋œ๋‹ค.**
- ๋ Œ๋”ํŠธ๋ฆฌ : ๋ Œ๋”๋ง์„ ์œ„ํ•œ ํŠธ๋ฆฌ ๊ตฌ์กฐ์˜ ์ž๋ฃŒ๊ตฌ์กฐ

๋ Œ๋”ํŠธ๋ฆฌ๋Š” ๋ธŒ๋ผ์šฐ์ € ํ™”๋ฉด์— ๋ Œ๋”๋ง๋˜์ง€ ์•Š๋Š” ๋…ธ๋“œ(ex. meta, script ํƒœ๊ทธ ๋“ฑ)์™€ CSS์— ์˜ํ•ด ๋น„ํ‘œ์‹œ(ex. display: none)๋˜๋Š” ๋…ธ๋“œ๋“ค์€ ํฌํ•จํ•˜์ง€ ์•Š๋Š”๋‹ค.

์ฆ‰, **๋ Œ๋”ํŠธ๋ฆฌ๋Š” ๋ธŒ๋ผ์šฐ์ € ํ™”๋ฉด์— ๋ Œ๋”๋ง๋˜๋Š” ๋…ธ๋“œ๋งŒ์œผ๋กœ ๊ตฌ์„ฑ**๋œ๋‹ค.

> ์™„์„ฑ๋œ ๋ Œ๋” ํŠธ๋ฆฌ๋Š” ๊ฐ HTML์š”์†Œ์˜ ๋ ˆ์ด์•„์›ƒ(์œ„์น˜์™€ ํฌ๊ธฐ)์„ ๊ณ„์‚ฐํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋˜๋ฉฐ, ๋ธŒ๋ผ์šฐ์ € ํ™”๋ฉด ํ”ฝ์…€์„ ๋ Œ๋”๋งํ•˜๋Š” ํŽ˜์ธํŒ… ์ฒ˜๋ฆฌ์— ์ž…๋ ฅ๋œ๋‹ค.
โ–ผ **์ฃผ์š” ๋ Œ๋”๋ง ๊ฒฝ๋กœ** (Critical Rendering Path = CRP) ๊ณผ์ •

HTML, CSS, JS ๋“ฑ ์ž‘์„ฑํ•œ ๋‚ด์šฉ์„ ๋ธŒ๋ผ์šฐ์ € ํ™”๋ฉด์˜ ํ”ฝ์…€๋กœ ๋‚˜ํƒ€๋‚ด๋Š” ๋ Œ๋”๋ง ๊ณผ์ •์ธ CRP๋ฅผ ์‚ดํŽด๋ณด๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

![](https://velog.velcdn.com/images/ninto_2/post/ab67933c-4d73-49c7-8477-617e09786e6b/image.png)

์ด ๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง ๊ณผ์ •์€ ๋ฐ˜๋ณตํ•ด์„œ ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋‹ค.

๋‹ค์‹œ๋งํ•ด, **๋ ˆ์ด์•„์›ƒ ๊ณ„์‚ฐ๊ณผ ํŽ˜์ธํŒ…์„ ๋‹ค์‹œ ์‹คํ–‰ํ•˜๋Š” ๋ฆฌ๋ Œ๋”๋ง**์€ **๋น„์šฉ์ด ๋งŽ์ด ๋“œ๋Š” ์„ฑ๋Šฅ์— ์•…์˜ํ–ฅ์„ ์ฃผ๋Š” ์ž‘์—…**์ด๋‹ค.

๋”ฐ๋ผ์„œ **๊ฐ€๊ธ‰์  ๋ฆฌ๋ Œ๋”๋ง์ด ๋นˆ๋ฒˆํ•˜๊ฒŒ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋„๋ก ์ฃผ์˜ํ•  ํ•„์š”**๊ฐ€ ์žˆ๋‹ค.

---

### ๐Ÿ“Œ 38-6. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์‹ฑ๊ณผ ์‹คํ–‰

`DOM`์€ `HTML ๋ฌธ์„œ๋ฅผ ํŒŒ์‹ฑํ•œ ๊ฒฐ๊ณผ๋ฌผ`๋กœ์„œ ์ƒ์„ฑ๋œ๋‹ค.

์ด DOM์€ **HTML ๋ฌธ์„œ์˜ ๊ตฌ์กฐ์™€ ์ •๋ณด**๋ฟ๋งŒ ์•„๋‹ˆ๋ผ **HTML ์š”์†Œ์™€ ์Šคํƒ€์ผ ๋“ฑ์„ ๋ณ€๊ฒฝ**ํ•  ์ˆ˜ ์žˆ๋Š” **ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ธํ„ฐํŽ˜์ด์Šค๋กœ์„œ DOM API๋ฅผ ์ œ๊ณต**ํ•œ๋‹ค.

> **์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ์—์„œ DOM API๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ด๋ฏธ ์ƒ์„ฑ๋œ DOM์„ ๋™์ ์œผ๋กœ ์กฐ์ž‘**ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.
`์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์‹ฑ๊ณผ ์‹คํ–‰`์€ ๋ธŒ๋ผ์šฐ์ €์˜ ๋ Œ๋”๋ง ์—”์ง„์ด ์•„๋‹Œ `์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์ด ์ฒ˜๋ฆฌ`ํ•œ๋‹ค.

๐Ÿ”Ž **์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์˜ ํŠน์ง•**

- `์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋ฅผ ํŒŒ์‹ฑ`ํ•˜์—ฌ `CPU๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ์ €์ˆ˜์ค€ ์–ธ์–ด๋กœ ๋ณ€ํ™˜`ํ•˜๊ณ  `์‹คํ–‰`ํ•œ๋‹ค.
- ๊ตฌ๊ธ€ ํฌ๋กฌ๊ณผ Node.js์˜ V8, ํŒŒ์ด์–ดํญ์Šค์˜ SpiderMonkey, ์‚ฌํŒŒ๋ฆฌ์˜ JavaScriptCore ๋“ฑ ๋‹ค์–‘ํ•œ ์ข…๋ฅ˜๊ฐ€ ์žˆ๋‹ค.
- ๋ชจ๋“  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์€ `ECMAScript ์‚ฌ์–‘์„ ์ค€์ˆ˜`ํ•œ๋‹ค.

๐Ÿ”Ž **์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์‹ฑ๊ณผ ์‹คํ–‰ ๊ณผ์ •**

![](https://velog.velcdn.com/images/ninto_2/post/e685a02e-8a4a-4491-ad1a-882d3a8ee97e/image.png)

> ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์ด `์ฝ”๋“œ๋ฅผ ํŒŒ์‹ฑํ•˜๊ธฐ ์‹œ์ž‘`ํ•˜๋ฉด, `์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ•ด์„`ํ•˜์—ฌ `AST(์ถ”์ƒ์  ๊ตฌ๋ฌธ ํŠธ๋ฆฌ)๋ฅผ ์ƒ์„ฑ`ํ•œ๋‹ค.
- `AST` (์ถ”์ƒ์  ๊ตฌ๋ฌธ ํŠธ๋ฆฌ) : **ํ† ํฐ์— ๋ฌธ๋ฒ•์  ์˜๋ฏธ์™€ ๊ตฌ์กฐ๋ฅผ ๋ฐ˜์˜ํ•œ ํŠธ๋ฆฌ ๊ตฌ์กฐ์˜ ์ž๋ฃŒ๊ตฌ์กฐ**
- AST๋Š” ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋‚˜ ์ปดํŒŒ์ผ๋Ÿฌ๋งŒ์ด ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹˜
- AST๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด TypeScripte, Babel, Prettier ๊ฐ™์€ ํŠธ๋žœ์ŠคํŒŒ์ผ๋Ÿฌ๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด `AST๋ฅผ ๊ธฐ๋ฐ˜`์œผ๋กœ `์ธํ„ฐํ”„๋ฆฌํ„ฐ๊ฐ€ ์‹คํ–‰ ํ•  ์ˆ˜ ์žˆ๋Š” ์ค‘๊ฐ„ ์ฝ”๋“œ์ธ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑ`ํ•˜์—ฌ `์‹คํ–‰`ํ•œ๋‹ค.

- `ํ† ํฌ๋‚˜์ด์ง•` (tokenizing) : ๋‹จ์ˆœํ•œ ๋ฌธ์ž์—ด์ธ **์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์–ดํœ˜๋ถ„์„**ํ•˜์—ฌ **๋ฌธ๋ฒ•์  ์˜๋ฏธ๋ฅผ ๊ฐ–๋Š” ์ฝ”๋“œ์˜ ์ตœ์†Œ ๋‹จ์œ„์ธ ํ† ํฐ๋“ค๋กœ ๋ถ„ํ•ด**ํ•œ๋‹ค. (= ์ด ๊ณผ์ •์„ ๋ ‰์‹ฑ์ด๋ผ๊ณ  ๋ถ€๋ฅด๊ธฐ๋„ ํ•˜์ง€๋งŒ ํ† ํฌ๋‚˜์ด์ง•๊ณผ ๋ฏธ๋ฌ˜ํ•œ ์ฐจ์ด๊ฐ€ ์žˆ์Œ)

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

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

V8์—”์ง„์˜ ๊ฒฝ์šฐ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ์ฝ”๋“œ๋Š” ํ„ฐ๋ณดํŒฌ์ด๋ผ ๋ถˆ๋ฆฌ๋Š” ์ปดํŒŒ์ผ๋Ÿฌ์— ์˜ํ•ด ์ตœ์ ํ™”๋œ ๋จธ์‹ ์ฝ”๋“œ๋กœ ์ปดํŒŒ์ผ๋˜์–ด ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•œ๋‹ค.

๋งŒ์•ฝ ์ฝ”๋“œ์˜ ์‚ฌ์šฉ ๋นˆ๋„๊ฐ€ ์ ์–ด์ง€๋ฉด ๋‹ค์‹œ ๋””์˜ตํ‹ฐ๋งˆ์ด์ง•ํ•˜๊ธฐ๋„ ํ•œ๋‹ค.

---

0 comments on commit f668249

Please sign in to comment.