Skip to content

Commit

Permalink
Merge pull request #1196 from narinn-star/narinn-star
Browse files Browse the repository at this point in the history
38-2μž₯ λΈŒλΌμš°μ €μ˜ λ Œλ”λ§ κ³Όμ • - μ΄λ‚˜λ¦°
  • Loading branch information
Ryan-Dia authored Jan 11, 2024
2 parents 1e8d3ce + bab3e20 commit 8594338
Showing 1 changed file with 74 additions and 2 deletions.
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
# 🎯 38 λΈŒλΌμš°μ €μ˜ λ Œλ”λ§ κ³Όμ •

[38.1 μš”μ²­κ³Ό 응닡](#1-μš”μ²­κ³Ό-응닡)
[38.2 HTTP 1.1κ³Ό HTTP 2.0](#2-http-11κ³Ό-http-20)
[38.3 HTML νŒŒμ‹±κ³Ό DOM 생성](#3-html-νŒŒμ‹±κ³Ό-dom-생성)
[38.2 HTTP 1.1κ³Ό HTTP 2.0](#2-http-11κ³Ό-http-20)
[38.3 HTML νŒŒμ‹±κ³Ό DOM 생성](#3-html-νŒŒμ‹±κ³Ό-dom-생성)
[38.4 CSS νŒŒμ‹±κ³Ό CSSOM 생성](#4-css-νŒŒμ‹±κ³Ό-cssom-생성)
[38.5 λ Œλ” 트리 생성](#5-λ Œλ”-트리-생성)
[38.6 μžλ°”μŠ€ν¬λ¦½νŠΈ νŒŒμ‹±κ³Ό μ‹€ν–‰](#6-μžλ°”μŠ€ν¬λ¦½νŠΈ-νŒŒμ‹±κ³Ό-μ‹€ν–‰)

## 0. λΈŒλΌμš°μ €μ˜ λ Œλ”λ§ κ³Όμ •

Expand Down Expand Up @@ -54,3 +57,72 @@
λΈŒλΌμš°μ €μ˜ λ Œλ”λ§ 엔진은 HTML νŒŒμ‹± 과정을 거쳐 λΈŒλΌμš°μ €κ°€ 이해할 수 μžˆλŠ” 자료ꡬ쑰인 DOM을 μƒμ„±ν•œλ‹€.

**DOM은 HTML λ¬Έμ„œλ₯Ό νŒŒμ‹±ν•œ 결과물이닀.**

## 4. CSS νŒŒμ‹±κ³Ό CSSOM 생성

λ Œλ”λ§ 엔진은 HTML을 μ²˜μŒλΆ€ν„° ν•œ 쀄씩 νŒŒμ‹±ν•˜μ—¬ DOM을 생성해 λ‚˜κ°„λ‹€. DOM을 생성해 λ‚˜κ°€λ‹€κ°€ CSSλ₯Ό λ‘œλ“œν•˜λŠ” link νƒœκ·Έλ‚˜ style νƒœκ·Έλ₯Ό λ§Œλ‚˜λ©΄ DOM 생성을 μΌμ‹œ μ€‘λ‹¨ν•œλ‹€. κ·Έ ν›„ link νƒœκ·Έμ˜ href μ–΄νŠΈλ¦¬λ·°νŠΈμ— μ§€μ •λœ CSS νŒŒμΌμ„ μ„œλ²„μ— μš”μ²­ν•˜μ—¬ λ‘œλ“œν•œ CSS νŒŒμΌμ΄λ‚˜ style νƒœκ·Έ λ‚΄μ˜ CSSλ₯Ό HTMLκ³Ό λ™μΌν•œ νŒŒμ‹± 과정을 거치며 ν•΄μ„ν•˜μ—¬ CSSOM(CSS Object Model)을 μƒμ„±ν•œλ‹€. CSS νŒŒμ‹±μ„ μ™„λ£Œν•˜λ©΄ HTML νŒŒμ‹±μ΄ μ€‘λ‹¨λœ 지점뢀터 λ‹€μ‹œ νŒŒμ‹±ν•˜κΈ° μ‹œμž‘ν•΄ DOM 생성을 μž¬κ°œν•œλ‹€.

```html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<link rel="stylesheet" href="style.css" />
...
</head>
</html>
```

λ Œλ”λ§ 엔진은 meta νƒœκ·ΈκΉŒμ§€ 순차적으둜 ν•΄μ„ν•œ λ‹€μŒ, link νƒœκ·Έλ₯Ό λ§Œλ‚˜λ©΄ CSS νŒŒμΌμ„ μ„œλ²„μ— μš”μ²­ν•œλ‹€.

μ„œλ²„λ‘œλΆ€ν„° CSS 파일이 μ‘λ‹΅λ˜λ©΄ λ Œλ”λ§ 엔진은 HTMLκ³Ό λ™μΌν•œ 해석 과정을 거쳐 CSSλ₯Ό νŒŒμ‹±ν•˜μ—¬ CSSOM을 μƒμ„±ν•œλ‹€.

CSSOM은 CSS 상속을 λ°˜μ˜ν•˜μ—¬ μƒμ„±λœλ‹€.

```css
body {
font-size: 18px;
}

ul {
list-style-type: none;
}
```

πŸ‘‰πŸ» body μš”μ†Œμ— μ μš©ν•œ font-size ν”„λ‘œνΌν‹°μ™€ ul μš”μ†Œμ— μ μš©ν•œ list-style-type ν”„λ‘œνΌν‹°λŠ” λͺ¨λ“  li μš”μ†Œμ— μƒμ†λ˜κ³ , μ΄λŸ¬ν•œ 상속 관계가 λ°˜μ˜λ˜μ–΄ CSSOM이 μƒμ„±λœλ‹€.

## 5. λ Œλ” 트리 생성

νŒŒμ‹±μ„ 거쳐 μƒμ„±λœ DOMκ³Ό CSSOM은 λ Œλ”λ§μ„ μœ„ν•΄ λ Œλ” 트리둜 κ²°ν•©λœλ‹€.

λ Œλ” νŠΈλ¦¬λŠ” λ Œλ”λ§μ„ μœ„ν•œ 트리 ꡬ쑰의 자료ꡬ쑰둜, λΈŒλΌμš°μ € 화면에 λ Œλ”λ§λ˜μ§€ μ•ŠλŠ” λ…Έλ“œμ™€ CSS에 μ˜ν•΄ λΉ„ν‘œμ‹œλ˜λŠ” λ…Έλ“œλ“€μ„ μ œμ™Έν•˜κ³  λΈŒλΌμš°μ € 화면에 λ Œλ”λ§λ˜λŠ” λ…Έλ“œλ§ŒμœΌλ‘œ κ΅¬μ„±λ˜μ–΄ μžˆλ‹€.

μ™„μ„±λœ λ Œλ” νŠΈλ¦¬λŠ” 각 HTML μš”μ†Œμ˜ λ ˆμ΄μ•„μ›ƒμ„ κ³„μ‚°ν•˜λŠ”λ° μ‚¬μš©λ˜λ©° λΈŒλΌμš°μ € 화면에 픽셀을 λ Œλ”λ§ν•˜λŠ” νŽ˜μΈνŒ… μ²˜λ¦¬μ— μž…λ ₯λœλ‹€.

μ•„λž˜μ™€ 같은 경우, λ ˆμ΄μ•„μ›ƒ 계산과 νŽ˜μΈνŒ…μ΄ 재차 μ‹€ν–‰λ˜λ©° λ Œλ”λ§ 과정이 λ°˜λ³΅ν•΄μ„œ 싀행될 수 μžˆλ‹€.

- μžλ°”μŠ€ν¬λ¦½νŠΈμ— μ˜ν•œ λ…Έλ“œ μΆ”κ°€ λ˜λŠ” μ‚­μ œ
- λΈŒλΌμš°μ € 창의 리사이징에 μ˜ν•œ 뷰포트 크기 λ³€κ²½
- HTML μš”μ†Œμ˜ λ ˆμ΄μ•„μ›ƒμ— 변경을 λ°œμƒμ‹œν‚€λŠ” μŠ€νƒ€μΌ λ³€κ²½

πŸ‘‰πŸ» λ¦¬λ Œλ”λ§μ€ λΉ„μš©μ΄ λ§Žμ΄λ“€μ–΄ μ„±λŠ₯에 μ•…μ˜ν–₯을 μ£ΌλŠ” μž‘μ—…μ΄λ―€λ‘œ, 가급적 λΉˆλ²ˆν•˜κ²Œ λ°œμƒν•˜μ§€ μ•Šλ„λ‘ μ£Όμ˜ν•΄μ•Ό ν•œλ‹€.

## 6. μžλ°”μŠ€ν¬λ¦½νŠΈ νŒŒμ‹±κ³Ό μ‹€ν–‰

HTML λ¬Έμ„œλ₯Ό νŒŒμ‹±ν•΄ μƒμ„±λœ DOM은 HTML λ¬Έμ„œμ˜ ꡬ쑰와 μ •λ³΄λ§Œμ΄ μ•„λ‹ˆλΌ μš”μ†Œμ™€ μŠ€νƒ€μΌ 등을 λ³€κ²½ν•  수 μžˆλŠ” ν”„λ‘œκ·Έλž˜λ° μΈν„°νŽ˜μ΄μŠ€λ‘œμ„œ DOM APIλ₯Ό μ œκ³΅ν•œλ‹€. (39μž₯μ—μ„œ 계속)

CSS νŒŒμ‹± κ³Όμ •κ³Ό λ§ˆμ°¬κ°€μ§€λ‘œ λ Œλ”λ§ 엔진은 HTML을 순차적으둜 νŒŒμ‹±ν•˜λ©° DOM을 μƒμ„±ν•΄λ‚˜κ°€λ‹€ script νƒœκ·Έλ₯Ό λ§Œλ‚˜λ©΄ DOM 생성을 μΌμ‹œ μ€‘λ‹¨ν•˜κ³  μžλ°”μŠ€ν¬λ¦½νŠΈ νŒŒμΌμ„ μ„œλ²„μ— μš”μ²­ν•΄ μžλ°”μŠ€ν¬λ¦½νŠΈ 엔지에 μ œμ–΄κΆŒμ„ λ„˜κΈ΄λ‹€. 이후 μžλ°”μŠ€ν¬λ¦½νŠΈ νŒŒμ‹±κ³Ό 싀행이 μ’…λ£Œλ˜λ©΄ HTML νŒŒμ‹±μ΄ μ€‘λ‹¨λœ 지점뢀터 λ‹€μ‹œ νŒŒμ‹±μ„ μ‹œμž‘ν•΄ DOM 생성을 μž¬κ°œν•œλ‹€. (CSS νŒŒμ‹± κ³Όμ •κ³Ό κ°™λ‹€.)

μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진은 μžλ°”μŠ€ν¬λ¦½νŠΈλ₯Ό ν•΄μ„ν•˜μ—¬ AST(좔상적 ꡬ문 트리, Abstract Syntax Tree)λ₯Ό μƒμ„±ν•œλ‹€. 그리고 ASTλ₯Ό 기반으둜 인터프리터가 μ‹€ν–‰ν•  수 μžˆλŠ” 쀑간 μ½”λ“œμΈ λ°”μ΄νŠΈμ½”λ“œλ₯Ό μƒμ„±ν•˜μ—¬ μ‹€ν–‰ν•œλ‹€.

**ν† ν¬λ‚˜μ΄μ§• (Tokenizing)**

λ‹¨μˆœ λ¬Έμžμ—΄μΈ μžλ°”μŠ€ν¬λ¦½νŠΈ μ†ŒμŠ€μ½”λ“œλ₯Ό μ–΄νœ˜ 뢄석해 문법적 의미λ₯Ό κ°–λŠ” μ½”λ“œμ˜ μ΅œμ†Œ λ‹¨μœ„μΈ ν† ν°λ“€λ‘œ λΆ„ν•΄ν•œλ‹€.

**νŒŒμ‹± (Parsing)**

ν† ν°λ“€μ˜ 집합을 ꡬ문 λΆ„μ„ν•˜μ—¬ ASTλ₯Ό μƒμ„±ν•œλ‹€.

**λ°”μ΄νŠΈμ½”λ“œ 생성과 μ‹€ν–‰**

νŒŒμ‹±μ˜ κ²°κ³Όλ¬Όλ‘œμ„œ μƒμ„±λœ ASTλŠ” 인터프리터가 μ‹€ν–‰ν•  수 μžˆλŠ” 쀑간 μ½”λ“œμΈ λ°”μ΄νŠΈμ½”λ“œλ‘œ λ³€ν™˜λ˜κ³  인터프리터에 μ˜ν•΄ μ‹€ν–‰λœλ‹€.

0 comments on commit 8594338

Please sign in to comment.