λ³Έ κΈμ ν μ€νΈ λ¬Έμ μ λλ€.
- μ΄λ―Έ λΈλΌμ°μ μ λ λλ§ λμμ λν΄ "κΈ°μ΄μ μΈ" μ§μμ΄ μμΌμ λΆ
- λΈλΌμ°μ λ λλ§ κ³Όμ μ€ Parsingμ μ§μ€ ν΄λ³΄κ³ μΆμ λΆ
- μλ¬Έ
HTML Parsing
λ°©λ²CSS Parsing
λ°©λ²DOM
andCSSOM
νΉμλ λΉ λ₯΄κ² νμ΄λ³΄κ³ λ§ μΆλ€λ©΄, μ€μ λ‘ parsingμ μμ λ₯Ό λ΄μ
Tokenization Example
λ§ λ³΄μ λ μ’μ΅λλ€! (μ°μΈ‘μ λͺ©μ°¨λ‘ μ΄λν΄μ£ΌμΈμ!)
λ©΄μ κ΄ : μ£Όμμ°½μ www.google.comμ μ λ ₯νμλ μΌμ΄λλ κ³Όμ μ λν΄μ μ€λͺ ν΄λ³΄μΈμ.
λ€μκ³Ό κ°μ μ§λ¬Έμ μΌλ§λ λ§μ΄ λ€μ΄λ³΄μ ¨λμ? μ λ§ λ§μ κΈμμλ κ°μ‘°λκ³ μΈκΈλλ λ§νΌ μΉκ°λ°μμκ² μ€μν μ§λ¬ΈμΌλ‘ μ리μ‘κ³ μμ΅λλ€.
Rendering Engine
μ΄ λμνμ¬ νλ©΄μ
μ λ λ§μ°¬κ°μ§λ‘ μΉ κ°λ°μλ‘μ μ λ§ μ¬λ¬λ² λ§μ£Όνλ κ°λ μ΄μλλ°μ. νλ² κ³΅λΆνλκΉμ μ λλ‘ κ³΅λΆλ₯Ό μ§νν΄λ³΄κ³ μΆμ΄. μ΄λ² κΈ°νμ μ€λ‘μ§ Parsingλ§ λ΄μμ νμ΅μ μ§νν΄λ³΄λ € ν©λλ€.
λΆμ€νΈμΊ ν κΈ°κ°μ€μμλ Parsingμ λν΄ κ³΅λΆνλ κΈ°μ΅μ λλ¬μ΄ κ°λ©΄ μ’κ² λ€ μΆμμ΅λλ€!
κΉμ΄ μλ νμ΅μ μ§ννκΈ° μν΄μ μ΄λ² κΈμ μ€λ‘μ§ Parsing
λ§μ λ΄μ΅λλ€.
μ κ° μ°Ύμ μ μλ λ²μ λ΄μμ λΈλΌμ°μ κ° Parsing
μ νλ λ΄μ©μ μ΅λν λ΄μ보μμΌλ μ λ΄μ£ΌμκΈΈ λ°λλλ€!
HTML
μ HyperText Markup Languageμ μ½μλ‘, μΉμ κΈ°λ°μ μ΄λ£¨λ©° μΉ νμ΄μ§μ ꡬ쑰μ μλ―Έλ₯Ό μ 곡ν©λλ€. HTML
νμ±μ λ΄λΆ μλ μ리λ₯Ό μ΄ν΄νλ κ²μ μΉ μ½ν
μΈ λ₯Ό νλ‘κ·Έλλ°μ μΌλ‘ μμ±, λΆμ, λλ μμ νκ³ μ νλ κ°λ°μμ λμμ΄λμκ² νμμ μ
λλ€.
HTML Parsing
κ³Όμ μ μΉ κ°λ°μ μμ΄μ λΉμ°ν νμμ μΈ λΆλΆμ
λλ€. μ΄ κ³Όμ μ ν΅ν΄μ μΉ νμ΄μ§λ₯Ό μ½μ΄λ΄μ΄ λ΄κ° μνλ μ 보λ₯Ό μΆμΆνκ³ κ·Έ λ΄μ©μ νμ©νκ³€ ν©λλ€. νΉμ κ²μμμ§μκ² λ
ΈμΆλλλ‘ νλ κ³Όμ μμλ μ μ©νκ² μ¬μ©λ©λλ€.
νμ§λ§, μ΄ κΈμμ λ€λ£¨λ κ³Όμ μ μ€νλ € λ°λμ λλ€.
λΈλΌμ°μ λ HTML Parser
λ₯Ό ν΅ν΄μ HTML
μ μ½μ΄λ΄κ³ κ·Έ ꡬ쑰μ μλ―Έλ₯Ό λΆμνλλ‘ ν©λλ€. κΈ°λ³Έμ μΌλ‘ HTML νμ±μ HTML λ¬Έμλ₯Ό κ΅¬μ± μμλ‘ λΆν΄νκ³ Document Object Model (DOM) μ ꡬμ±νλ κ³Όμ μ ν¬ν¨ν©λλ€.
ν΄λΉ λ¨λ½μμλ, HTML
μ νμ±κ³Όμ μ μμΈν μ΄ν΄λ³Ό μμ μ
λλ€.
μλμ κ³Όμ μ λνμ μΌλ‘ λ€μκ³Ό κ°μ΅λλ€.
HTML
μ κΈ°λ³Έμ μΈ κ΅¬μ‘°μ λν΄μ μ΄ν΄νκΈ°HTML Parsing
κ³Όμ μ λν΄μ μ΄ν΄ν©λλ€. (tokenization
,tree construction
)
HTML Parsing
κ³Όμ μ μ΄ν΄νκΈ° μ μ κΈ°μ΄μ μΈ HTML
μ λ¨Όμ μ΄ν΄ν©λλ€.
HTML
μ μΉ νμ΄μ§λ₯Ό μμ±νκΈ° μν νμ€ λ§ν¬μ
μΈμ΄μ
λλ€. HTML
μ μΉ νμ΄μ§μ ꡬ쑰λ₯Ό μ μνκ³ , ν
μ€νΈ, μ΄λ―Έμ§, λ§ν¬, νΌ, λ²νΌ λ± μΉ νμ΄μ§μ νμλλ λ€μν μμλ₯Ό λ°°μΉνκ³ μ€νμΌλ§ν μ μμ΅λλ€.
HTML
μ 'νκ·Έ'λΌκ³ λΆλ¦¬λ κΊΎμ κ΄νΈ(<>
)λ‘ λλ¬μΈμΈ λͺ
λ Ήμ΄λ₯Ό μ¬μ©νμ¬ μΉ νμ΄μ§μ ꡬ쑰λ₯Ό λ§λλλ€. μ΄λ¬ν νκ·Έλ λκ² μμ νκ·Έμ μ’
λ£ νκ·Έλ‘ κ΅¬μ±λλ©°, κ·Έ μ¬μ΄μ μΉ νμ΄μ§μ μ€μ λ΄μ©μ΄ λ€μ΄κ°λλ€. μλ₯Ό λ€μ΄, <p>
λ λ¨λ½(paragraph)μ μμνλ νκ·Έμ΄κ³ , </p>
λ λ¨λ½μ λλ΄λ νκ·Έμ
λλ€.
HTML
λ¬Έμλ λΈλΌμ°μ μ μν΄ ν΄μλμ΄ μ¬μ©μμκ² μΉ νμ΄μ§μ ννλ‘ νμλ©λλ€.
<!DOCTYPE html>
<!-- λ¬Έμ νμ
μ μΈ (DOCTYPE): HTML5λ₯Ό μλ―Έ -->
<html>
<!-- HTML: λ£¨νΈ μμ -->
<head>
<!-- Head: λ©νλ°μ΄ν° λΆλΆ -->
<meta charset="UTF-8" />
<!-- λ¬Έμ μΈμ½λ© -->
<title>νμ΄μ§ μ λͺ©</title>
<!-- νμ΄μ§ μ λͺ© -->
<link rel="stylesheet" type="text/css" href="styles.css" />
<!-- μ°κ²°λ μ€νμΌμνΈ -->
<script src="script.js"></script>
<!-- μλ°μ€ν¬λ¦½νΈ νμΌ -->
</head>
<body>
<!-- Body: μ€μ 보μ΄λ λ΄μ© -->
<h1>μ λͺ©</h1>
<!-- μ λͺ© -->
<p>λ¨λ½μ
λλ€.</p>
<!-- λ¨λ½ -->
<img src="image.jpg" alt="μ΄λ―Έμ§ μ€λͺ
" />
<!-- μ΄λ―Έμ§ -->
<a href="https://www.example.com">λ§ν¬</a>
<!-- λ§ν¬ -->
<!-- κΈ°ν μμ -->
</body>
</html>
<!DOCTYPE html>
: HTML5 λ¬Έμλ₯Ό λνλ΄λ DOCTYPE μ μΈμ
λλ€.
<html>
: HTML λ¬Έμμ λ£¨νΈ μμμ
λλ€. λͺ¨λ λ€λ₯Έ HTML μμλ μ΄ νκ·Έ λ΄λΆμ μμΉν΄μΌ ν©λλ€.
<head>
: μ΄ λΆλΆμλ νμ΄μ§μ λ©νλ°μ΄ν°κ° λ€μ΄κ°λλ€. μλ‘λ νμ΄μ§ μ λͺ©, λ¬Έμ μΈμ½λ©, μΈλΆ μ€νμΌμνΈμ μλ°μ€ν¬λ¦½νΈ νμΌ λ±μ΄ μμ΅λλ€.
<body>
: μ΄ λΆλΆμλ μΉ νμ΄μ§μ μ€μ λ‘ λ³΄μ΄λ λ΄μ©μ΄ λ€μ΄κ°λλ€. μλ‘λ ν
μ€νΈ, μ΄λ―Έμ§, λ§ν¬, μ λͺ©, λ¨λ½ λ±μ΄ μμ΅λλ€.
μ΄μ λ 본격μ μΌλ‘ HTML Parsing Process
μ λν΄μ νμ΅νκ² μ΅λλ€.
HTML Parsing
μ HTML documentλ₯Ό λΆμνκ³ κ·Έ ꡬ쑰μ μΈ κ΅¬μ± μμμΈ tag
, attrivutes
, content
λ₯Ό μΆμΆνμ¬ μλ―Έμλ model
μ λ§λ€μ΄λ
λλ€.
μ¦ DOM(Document Object Model)
λ₯Ό μμ±ν΄λ
λλ€.
HTML Parsing Processμ μΌλ ¨μ κ³Όμ μ λ΄μ λμλ μ λλ€
Tokenization
μ HTML
νμ± κ³Όμ μμ κ°μ₯ κΈ°λ³Έμ μΈ λ¨κ³μ
λλ€. raw HTML
μ token
μ΄λΌκ³ λΆλ¦¬λ λ μμ λ¨μλ‘ λΆν΄νλ μν μ λ΄λΉν©λλ€. ν ν°μ HTML λ¬Έμλ₯Ό ꡬμ±νλ κ°λ³μ μΈ μμλ₯Ό μλ―Έν©λλ€. μ¦ token
μ documnet
μ μ΅μνμ κ°μΉλ₯Ό κ°μ§κ³ μμ΅λλ€.
μμ(λλ raw) HTML μ½λλ? μΉ λΈλΌμ°μ μ μν΄ μμ§ μ²λ¦¬λμ§ μμ, μλ³Έ μνμ HTML μ½λλ₯Ό μλ―Έν©λλ€. μ΄λ HTML λ¬Έμλ₯Ό ꡬμ±νλ νκ·Έ, μμ±, ν μ€νΈ λ±μ΄ ν¬ν¨λμ΄ μλ μ΄κΈ° ννμ μ½λμ λλ€. μμ HTML μ½λλ μΌλ°μ μΌλ‘ ν μ€νΈ μλν°λ μ½λ μλν°μμ λ³Ό μ μμΌλ©°, μΉ λΈλΌμ°μ μ "νμ΄μ§ μμ€ λ³΄κΈ°" μ΅μ μ ν΅ν΄μλ νμΈν μ μμ΅λλ€. μμ HTML μ½λλ νμ± κ³Όμ μ ν΅ν΄ λΈλΌμ°μ μ μν΄ ν΄μλκ³ , μ΄νμ μ¬μ©μμκ² λ³΄μ¬μ§λ μΉ νμ΄μ§μ ꡬ쑰μ λ΄μ©μ νμ±ν©λλ€. μ΄ μ½λλ μ§μ μμ±λ μλ μκ³ , μλ²μμ λμ μΌλ‘ μμ±λμ΄ ν΄λΌμ΄μΈνΈμ μ μ‘λ μλ μμ΅λλ€.
HTML Tokenizationμ λ€μκ³Ό κ°μ κ³Όμ μ μνν©λλ€.
ν ν°ν κ³Όμ μ€ HTML μ½λλ₯Ό λ¬Έμλ¨μλ‘ μ€μΊνμ¬ ν¨ν΄μ μλ³νκ³ λ€μν μ νμ ν ν°μ μΈμν μ μμ΅λλ€. μ΄ λ Parsing Algorithmμ μ½λλ₯Ό λΆμνλ©° token idetification μ ν΅ν΄μ νΉμ λ¬Έμμ μμλ₯Ό μ°Ύμ λ
λλ€. μλ₯Ό λ€μ΄μ <
λ₯Ό λ§λλ©΄ νκ·Έμ μμμ νμνκ³ μ΄λ ν ν°μ μ‘΄μ¬λ₯Ό μλ―Έν©λλ€. μ΄ κ³Όμ μμ HTML μ½λλ μμ°¨μ μΌλ‘ λΆμλλ©° νμκ° ν ν°μ λμ μΌλ‘ μλ³νλ μκ° μ½λμμ λΆλ¦¬ν©λλ€. μ΄ κ³Όμ μ μ 체 HTML μ½λκ° ν ν°ν λ λ κΉμ§ μ§νλ©λλ€.
<tag>
: μμ νκ·Έλ HTML μμμ μμμ λνλ΄λ©° <tag>
λ¬Έλ²μΌλ‘ νμλ©λλ€. μλ₯Ό λ€μ΄, <p>
λ λ¨λ½μ μμ νκ·Έλ₯Ό λνλ
λλ€. μμ νκ·Έλ μμ μ νμ λν μ 보λ₯Ό μ 곡νκ³ μμ±μ ν¬ν¨ν μ μμ΅λλ€.
</tag>
: μ’
λ£ νκ·Έλ HTML μμμ μ’
λ£λ₯Ό λνλ΄λ©° </tag>
λ¬Έλ²μΌλ‘ νμλ©λλ€. μλ₯Ό λ€μ΄, </p>
λ λ¨λ½ μμμ μ’
λ£ νκ·Έλ₯Ό λνλ
λλ€. μ’
λ£ νκ·Έλ μμ νκ·Έμ μν΄ μ μλ ꡬ쑰λ₯Ό λ°μνλ©° λ¬Έμμ κ³μΈ΅μ ꡬ쑰μ κΈ°μ¬ν©λλ€.
<tag />
: μΌλΆ HTML μμλ μ체μ μΌλ‘ μ’
λ£λ μ μμΌλ©° λ³λμ μ’
λ£ νκ·Έκ° νμνμ§ μμ΅λλ€. μ체 μ’
λ£ νκ·Έλ '
'λ μ€ λ°κΏ νκ·Έλ₯Ό λνλ
λλ€. μ체 μ’
λ£ νκ·Έλ μΌλ°μ μΌλ‘ λ΄μ©μ΄ μκ±°λ νΉλ³ν μ²λ¦¬κ° νμν μμμ μ¬μ©λ©λλ€.
Text
: ν
μ€νΈ ν ν°μ HTML μμ λ΄μ λ¬Έμ λ΄μ©μ λνλ
λλ€. μ΄λ€μ μΌλ° ν
μ€νΈ, λ¬Έμμ΄ λλ νκ·Έλ λ€λ₯Έ νΉλ³ν ν ν°μ μΌλΆκ° μλ λ¬Έμ μμλ₯Ό ν¬ν¨ν©λλ€. ν
μ€νΈ ν ν°μ HTML λ¬Έμμ 보μ΄λ λ΄μ©μ κΈ°μ¬ν©λλ€.
μ£Όμ
: HTML μ£Όμμ μ½λ λ΄μ λ
ΈνΈλ μ£Όμμ μΆκ°νλ λ° μ¬μ©λλ ν ν°μ
λλ€.
DOCTYPE
: DOCTYPE ν ν°μ λ¬Έμ μ ν μ μΈμ λνλ΄λ©° μ¬μ©λλ HTML λ²μ μ λν μ 보λ₯Ό μ 곡ν©λλ€. μ΄κ²μ HTML λ¬Έμμ μμ λΆλΆμμ νΉμ λ¬Έλ²μΌλ‘ νμλ©λλ€. DOCTYPE ν ν°μ λ¬Έμκ° λΈλΌμ°μ λ νμμ μν΄ μ¬λ°λ₯΄κ² ν΄μλλλ‘ ν©λλ€.
μ¬κΈ°κΉμ§ Tokenization κ³Ό Tokenμ μ’ λ₯μ λν΄μ νμ΅μ μ§ννμ΅λλ€. λ€μμ Tokenzation Algorithmμ λν΄μ νμ΅μ μ§νν©λλ€.
Tokenization Algorithm μ HTML νμ± κ³Όμ μ€μμ κ°μ₯ μ€μν λ¨κ³ μ λλ€. μ΄ κ³Όμ μ€μμ νμ± λμ€ λ€μν μ νμ ν ν°μ μλ³νκ³ μ²λ¦¬νκΈ° μν λ Όλ¦¬λ₯Ό μ μν©λλ€.
μ΄ λ¨κ³μμ νμλ ν ν°ν λμ€ μμ±λ ν ν°μ μ μ₯νκΈ° μν΄ νμν λ³μμ λ°μ΄ν° ꡬ쑰λ₯Ό μ€μ ν©λλ€. μ΄λ λ°°μ΄, μ°κ²° 리μ€νΈ λλ λ€λ₯Έ μ μ ν λ°μ΄ν° ꡬ쑰λ₯Ό μ΄κΈ°ννλ κ²μ ν¬ν¨ν μ μμ΅λλ€.
λν μκ³ λ¦¬μ¦μ νμ± κ³Όμ μ μΆμ νκΈ° μν΄ νμν νλκ·Έλ μν λ³μλ₯Ό μ΄κΈ°νν©λλ€. μ΄λ¬ν νλκ·Έλ νΉμ 쑰건μ λνλ΄κ±°λ μκ³ λ¦¬μ¦μ νλ¦μ μ μ΄νλ λ° μ¬μ©λ μ μμ΅λλ€.
Tokenization Algorithmμ μνμν κΈ°κ³(State Machine)λ₯Ό λ°νμΌλ‘ μ€λͺ
ν μ μμ΅λλ€. HTML λ¬Έμλ₯Ό μ½μΌλ©΄μ Data state
,Tag open state
λΌλ λκ°μ§ μνλ₯Ό κ°μ§κ² λ©λλ€.
μ΄κΈ°μνλ Data state
λ‘ μ΄κΈ°ν λμ΄ μμ΅λλ€.
HTML μ½λλ 첫 λ²μ§Έ λ¬ΈμλΆν° μ€μΊμ μμνμ¬ ν ν°ν κ³Όμ μ μμν©λλ€. νμλ μ½λμ κ° λ¬Έμλ₯Ό κ²μ¬νμ¬ HTML ꡬ쑰μμμ μν μ λΆμν©λλ€.
μ΄ λ¨κ³μμ ν ν°ν μκ³ λ¦¬μ¦μ νΉμ λ¬Έμ ν¨ν΄κ³Ό μνμ€λ₯Ό κΈ°λ°μΌλ‘ λ€μν μ νμ ν ν°μ μΈμνκ³ κ΅¬λΆν©λλ€. μκ³ λ¦¬μ¦μ ν ν°μ κ²½κ³λ₯Ό μλ³νκ³ μμ±λ ν ν°μ μ νμ κ²°μ ν©λλ€.
<
λ₯Ό λ§λκ² λλ©΄, Tag open state
μνλ‘ λ³κ²½λ©λλ€. κ·Έλ¦¬κ³ μ¬λ¬ λ¬Έμμ΄μ μ§λμΉκ² λμ§λ§ >
λ¬Έμλ₯Ό λ§λ λ κΉμ§ μνλ₯Ό λ³ννμ§ μλ€κ° >
λ¬Έμλ₯Ό λ§λκ³ λμ stateλ₯Ό λ€μ Data state
λ‘ λ³κ²½νκ³ , κΈ°μ‘΄μ <``>
λ₯Ό ν΅ν΄μ λ§λ€μ΄μ§κ² λ μμμ Tokenizationμ΄ μ§νλ©λλ€.
μκ³ λ¦¬μ¦μ΄ <
λ¬Έμλ₯Ό κ°μ§νλ©΄ μ΄μ΄μ§λ λ¬Έμκ° μμ νκ·Έλ₯Ό λνλ΄λμ§ νμΈνκΈ° μν΄ κ²μ¬ν©λλ€. νκ·Έ μ΄λ¦κ³Ό κ΄λ ¨λ μ΄νΈλ¦¬λ·°νΈλ HTML μ½λμμ μΆμΆλ©λλ€.
μμ νκ·Έ ν ν°μ΄ μμ±λμ΄ νκ·Έ μ΄λ¦κ³Ό μ΄νΈλ¦¬λ·°νΈλ₯Ό ν¬ν¨νλ©°, ν ν° λ°μ΄ν° ꡬ쑰μ μ μ₯λ©λλ€.
</
μνμ€λ₯Ό λ§λλ©΄ μκ³ λ¦¬μ¦μ μ΄μ΄μ§λ λ¬Έμλ₯Ό μ’
λ£ νκ·Έλ‘ ν΄μν©λλ€. νκ·Έ μ΄λ¦μ μ½λμμ μΆμΆλ©λλ€.
μ’
λ£ νκ·Έ ν ν°μ΄ μμ±λμ΄ νκ·Έ μ΄λ¦μ ν¬ν¨νλ©°, ν ν° λ°μ΄ν° ꡬ쑰μ μΆκ°λ©λλ€.
μκ³ λ¦¬μ¦μ΄ μ체 μ’
λ£ νκ·Έ, μλ₯Ό λ€μ΄ <br/>
μ λ§λλ©΄, μ체 μ’
λ£ νκ·Έ ν ν°μ μμ±ν©λλ€. μ체 μ’
λ£ νκ·Έμ κ΄λ ¨λ λͺ¨λ μ΄νΈλ¦¬λ·°νΈκ° ν ν°μ ν¬ν¨λ©λλ€.
μ체 μ’
λ£ νκ·Έ ν ν°μ΄ ν ν° λ°μ΄ν° ꡬ쑰μ μΆκ°λ©λλ€.
νκ·Έλ νΉλ³ν μνμ€μ μΌλΆκ° μλ λ¬Έμλ ν μ€νΈ λ΄μ©μΌλ‘ κ°μ£Όλ©λλ€. μκ³ λ¦¬μ¦μ μ°μλ λ¬Έμλ₯Ό ν μ€νΈ ν ν°μΌλ‘ μμ§νκ³ ν ν° λ°μ΄ν° ꡬ쑰μ μ μ₯ν©λλ€. μκ³ λ¦¬μ¦μ νμμ λ°λΌ ν μ€νΈ λ΄μ© λ΄μ 곡백, μ€ λ°κΏ, λ° κΈ°ν ν μ€νΈ μμμ μ²λ¦¬ν©λλ€.
μκ³ λ¦¬μ¦μ΄ <!--
μνμ€λ₯Ό κ°μ§νλ©΄ μ΄μ΄μ§λ λ¬Έμλ₯Ό μ£ΌμμΌλ‘ μΈμν©λλ€. μ£Όμμ λ΄μ©μ μΆμΆλ©λλ€.
μ£Όμ ν ν°μ΄ μμ±λμ΄ μ£Όμ λ΄μ©μ ν¬ν¨νλ©°, ν ν° λ°μ΄ν° ꡬ쑰μ μΆκ°λ©λλ€.
μκ³ λ¦¬μ¦μ HTML λ¬Έμμ μμ λΆλΆμμ DOCTYPE μ μΈμ μλ³νκ³ μΆμΆν©λλ€. DOCTYPE ν ν°μ μ¬μ©λλ HTML λ²μ μ λν μ 보λ₯Ό μ 곡ν©λλ€. DOCTYPE ν ν°μ΄ μμ±λμ΄ κ΄λ ¨ μ 보λ₯Ό ν¬ν¨νλ©°, ν ν° λ°μ΄ν° ꡬ쑰μ μ μ₯λ©λλ€.
κ° ν ν°μ μ²λ¦¬ν νμ μκ³ λ¦¬μ¦μ HTML μ½λλ₯Ό κ³μ μ€μΊνλ©°, λ€μ λ¬Έμλ‘ μ΄λνκ³ ν ν°ν κ·μΉμ κΈ°λ°μΌλ‘ νκ°ν©λλ€. μ΄ κ³Όμ μ μ 체 HTML μ½λκ° μ€μΊλκ³ ν ν°νλ λκΉμ§ λ°λ³΅λ©λλ€.
κ°λ¨ν μμλ‘ Tokenizationμ λν΄μ νμ΅μ λ§λ¬΄λ¦¬ μ§μ΄ λ³΄κ² μ΅λλ€.
<html>
<head>
<title>My Web Page</title>
</head>
<body>
<p>Welcome to my web page.</p>
</body>
</html>
μ²μ λ¬Έμλ₯Ό μ½κΈ° μμνλ©°, μ΄κΈ° μνλ Data state
μμ§λ§, <
λ₯Ό λ§λ Tag open state
μνλ‘ λ³κ²½λ©λλ€. κ·Έ μ΄ν >
λ₯Ό λ§λ λ κΉμ§ Tag open state
μνλ₯Ό μ μ§νλ€κ° >
λ₯Ό λ§λ λ€μ Data state
λ‘ λ³κ²½λ©λλ€.
λν Tag open state
κ³Όμ μμ parsingλ <html>
μ΄λΌλ λ¬Έμμ΄μ Tokenization μ΄ μ§νλ©λλ€.
μλλ μμ κ³Όμ μ κ±°μ³μ μμ±λ Token λ€ μ λλ€.
<html>
<head>
<title>
"My Web Page"
</title>
</head>
<body>
<p>
"Welcome to my web page."
</p>
</body>
</html>
μ§κΈκΉμ§ HTML documentλ₯Ό Tokenization Algorithmμ λν΄μ νμ΅μ μ§ννμ΅λλ€. ν΄λΉ ν ν°λ€μ κ²°κ΅ DOM(Document Object Model)μ μμ±νλ λ°νμ΄ λμ΄ μ€λλ€.
μ΄μ μ§κΈκΉμ§ μμ±ν Tokenλ€μ ν΅ν΄ Treeλ₯Ό λ§λ€μ΄ λ΄ μλ€.
Tree Constructionμ HTML νμ±κ³Όμ μ€μμ κ°μ₯ μ€μν λ¨κ³μ λλ€. HTML μ½λκ° ν ν°ν λκ³ νΈν°λ€μ΄ λͺ¨λ μ€λΉκ° λμλ€λ©΄, νΈλ¦¬λ₯Ό ꡬμ±νλ μκ³ λ¦¬μ¦μ μ΄λ¬ν ν ν°λ€μ κ°μ Έμμ Tree Construction μ μ§νν©λλ€. μ΄ κ³Όμ μμ λ§λ€μ΄μ§ κ²μ DOM(Document Object Model) μ΄λΌκ³ ν©λλ€. DOM tree λ HTML λ¬Έμλ₯Ό Pasing νκ³ μ΄λ₯Ό μλ―Έμλ λ¨μμ μ§ν© (Token)μΌλ‘ λ³νμν¨ λ€ , μ΄λ₯Ό ν΅ν΄ κ³μΈ΅μ μΈ κ΅¬μ‘°λ‘ λ§λ€μ΄ λ λλ€!
μ΄μ λΆν° ꡬ체μ μΌλ‘ Dom treeλ₯Ό λ§λ€μ΄ λ΄λ κ³Όμ μ λν΄μ νμ΅μ μ§νν©λλ€.
νΈλ¦¬ κ΅¬μ± κ³Όμ μ μμμμ μκ³ λ¦¬μ¦μ DOM νΈλ¦¬μ λ£¨νΈ λ Έλλ₯Ό μμ±ν©λλ€. μ΄ λ£¨νΈ λ Έλλ μ 체 HTML λ¬Έμλ₯Ό λνν©λλ€. μ΄κ²μ DOM νΈλ¦¬μ κ³μΈ΅μ ꡬ쑰λ₯Ό ꡬμ±νκΈ° μν μμμ μΌλ‘ μμ©ν©λλ€.
μκ³ λ¦¬μ¦μ΄ ν ν°ν κ³Όμ μμ μμ±λ ν ν°λ€μ μννλ©΄μ, HTML μμλ₯Ό λννλ μμ νκ·Έλ₯Ό λ§λ©λλ€. κ° μμ νκ·Έμ λν΄ μκ³ λ¦¬μ¦μ DOM νΈλ¦¬μ μμ λ Έλλ₯Ό μμ±ν©λλ€.
μμ λ Έλλ€μ HTML μμμ λν μ 보λ₯Ό λ΄κ³ μμΌλ©°, μμμ νκ·Έ μ΄λ¦, μμ±, κ·Έλ¦¬κ³ μ€μ²©λ λ΄μ©μ ν¬ν¨ν©λλ€. μ΄λ¬ν μμ λ Έλλ€μ DOM νΈλ¦¬μ κ΅¬μ± μμκ° λμ΄, HTML λ¬Έμμ ꡬ쑰λ₯Ό νμ±ν©λλ€.
HTML λ¬Έμμ κ³μΈ΅μ ꡬ쑰λ₯Ό λ°μνκΈ° μν΄ μκ³ λ¦¬μ¦μ μμ λ Έλλ€ μ¬μ΄μ λΆλͺ¨-μμ κ΄κ³λ₯Ό μ€μ ν©λλ€. μμ νκ·Έκ° λ°κ²¬λλ©΄, ν΄λΉ μμ λ Έλλ μ΄μ μ μ΄λ¦° μμμ μμμ΄ λ©λλ€. μ΄λ κ² ν΄μ μ€μ²©λ κ΅¬μ‘°κ° μμ±λλ©°, μμλ€μ κ·Έλ€μ΄ ν¬ν¨λλ κΈ°μ€μ λ°λΌ κ³μΈ΅μ μΌλ‘ μ‘°μ§λ©λλ€.
μλ₯Ό λ€μ΄, HTML μ½λ <div><p>Hello, World!</p></div>
λ₯Ό κ³ λ €ν΄λ³΄λ©΄, μκ³ λ¦¬μ¦μ <div>
μμμ λν μμ λ
Έλμ <p>
μμμ λν λ
Έλλ₯Ό μμ±ν©λλ€. <p>
μμ λ
Έλλ <div>
μμ λ
Έλμ μμμ΄ λμ΄, λΆλͺ¨-μμ κ΄κ³λ₯Ό νμ±ν©λλ€.
λΆλͺ¨-μμ κ΄κ³ μΈμλ μκ³ λ¦¬μ¦μ μμλ€ μ¬μ΄μ νμ κ΄κ³λ μ²λ¦¬ν©λλ€. μλ‘μ΄ μμ νκ·Έκ° μ΄μ μ μ΄λ¦° μμμ κ°μ λΆλͺ¨λ₯Ό 곡μ ν λ, κ·Έκ²μ κΈ°μ‘΄ μμμ νμ κ° λ©λλ€.
μλ₯Ό λ€μ΄, HTML μ½λ <div><p>Paragraph 1</p><p>Paragraph 2</p></div>
μμλ μκ³ λ¦¬μ¦μ΄ λ κ°μ <p>
μμ λ
Έλλ₯Ό μμ±ν©λλ€. λ <p>
μμλ λμΌν λΆλͺ¨ <div>
λ₯Ό κ°μ§κ³ μλ‘μ νμ μ
λλ€.
μ΄λ¬ν λΆλͺ¨-μμ λ° νμ κ΄κ³λ₯Ό μ ννκ² μ€μ ν¨μΌλ‘μ¨ μκ³ λ¦¬μ¦μ DOMμ νΈλ¦¬ ꡬ쑰λ₯Ό ꡬμ±ν©λλ€. κ²°κ³Όλ‘ λμ¨ DOM νΈλ¦¬λ HTML μμμ μ€μ²©λ μ‘°μ§μ λ°μνμ¬ HTML λ¬Έμμ κ³μΈ΅μ ννμ μ 곡ν©λλ€.
HTML μμμ μ€μ²©λ ꡬ쑰(nested structure)λ, ν μμκ° λ€λ₯Έ μμ λ΄λΆμ μμΉνλ κ²μ μλ―Έν©λλ€. μ΄λ νΈλ¦¬ κ΅¬μ‘°λ‘ ννλλ©°, μ΄λ¬ν ꡬ쑰λ₯Ό ν΅ν΄ μΉ νμ΄μ§μ λ μ΄μμκ³Ό λ΄μ©μ΄ μ μλ©λλ€.
<div>
<p>μλ
νμΈμ.</p>
<ul>
<li>νλͺ© 1</li>
<li>νλͺ© 2</li>
</ul>
</div>
μ΄ μμμμ <div>
μμλ <p>
μμμ <ul>
μμλ₯Ό λ΄λΆμ ν¬ν¨νκ³ μμ΅λλ€. λν, <ul>
μμλ <li>
μμλ₯Ό λ΄λΆμ ν¬ν¨νκ³ μμ΅λλ€. μ΄λ° μμΌλ‘ νλμ μμκ° λ€λ₯Έ μμλ₯Ό ν¬ν¨νλ ꡬ쑰λ₯Ό "μ€μ²©λ ꡬ쑰"λΌκ³ ν©λλ€.
μ΄ μ€μ²©λ ꡬ쑰λ Document Object Model (DOM) νΈλ¦¬λ‘ ννλ λ, λΆλͺ¨-μμ κ΄κ³λ₯Ό νμ±νκ² λ©λλ€. μλ₯Ό λ€μ΄, μμ HTML μ½λμμ <div>
μμλ <p>
μ <ul>
μ λΆλͺ¨κ° λλ©°, <ul>
μ <li>
μ λΆλͺ¨κ° λ©λλ€. μ΄λ κ² μ€μ²©λ ꡬ쑰λ₯Ό ν΅ν΄ μΉ νμ΄μ§μ κ³μΈ΅μ κ΅¬μ‘°κ° νμ±λκ³ , μ΄λ₯Ό μ½κ² μ‘°μνκ±°λ μ€νμΌμ μ μ©ν μ μμ΅λλ€.
μκ³ λ¦¬μ¦μ μ€μ²©λ μμλ₯Ό μ²λ¦¬νκΈ° μν΄ "open element stack" λλ "element stack"μ΄λΌλ μ€νμ μ μ§ν©λλ€.
μ΄ μ€νμ ν ν°νλ HTML
μ½λλ₯Ό ν΅ν΄ μκ³ λ¦¬μ¦μ΄ μ§νλλ©΄μ νμ¬ μ΄λ € μλ μμλ₯Ό μΆμ ν©λλ€.
μμ§ λ«νμ§ μμ κ° μμ λ
Έλλ μ€νμ νΈμλ©λλ€.
μκ³ λ¦¬μ¦μ΄ μμ νκ·Έ ν ν°μ λ§λλ©΄ ν΄λΉ HTML
μμμ λν μλ‘μ΄ μμ λ
Έλλ₯Ό μμ±ν©λλ€.
μλ‘ μμ±λ μμ λ
Έλλ κ·Έ λ€μ DOM
νΈλ¦¬μ μΆκ°λ©λλ€.
μμ λ
Έλλ₯Ό μΆκ°νκΈ° μ μ, μκ³ λ¦¬μ¦μ νμ¬ μμμ μ μ ν λΆλͺ¨λ₯Ό κ²°μ νκΈ° μν΄ μ€ν μμ μ€νμ νμΈν©λλ€.
λΆλͺ¨ μμλ μ€νμμ κ°μ₯ μ΅κ·Όμ μ΄λ¦° μμμ
λλ€.
μκ³ λ¦¬μ¦μ HTML μ½λμμμ μ€μ²©μ κΈ°λ°μΌλ‘ μμ κ°μ λΆλͺ¨-μμ κ΄κ³λ₯Ό μ€μ ν©λλ€. λΆλͺ¨-μμ κ΄κ³λ DOM νΈλ¦¬μμ λ°μλλ©°, λΆλͺ¨ μμκ° μμ μμμ μ§μ μ μΈ μ‘°μ μν μ ν©λλ€. μκ³ λ¦¬μ¦μ κ° μμ μμ λ Έλκ° κ·Έκ²μ λΆλͺ¨ μμ λ Έλ λ΄μ μ¬λ°λ₯΄κ² μ€μ²©λλλ‘ ν©λλ€.
μκ³ λ¦¬μ¦μ΄ μ’ λ£ νκ·Έ ν ν°μ λ§λλ©΄, ν΄λΉ μμκ° λ«νλ€λ κ²μ λνλ λλ€. μκ³ λ¦¬μ¦μ μΌμΉνλ νκ·Έ μ΄λ¦μ κ°μ§ κ°μ₯ μ΅κ·Όμ μ΄λ¦° μμλ₯Ό μ°ΎκΈ° μν΄ μ€ν μμ μ€νμ νμΈν©λλ€. μκ³ λ¦¬μ¦μ μΌμΉνλ νκ·Έ μ΄λ¦μ κ°μ§ μμλ₯Ό μ°Ύκ³ λ«μ λκΉμ§ μ€νμμ μμλ₯Ό μ κ±°ν©λλ€. μμλ₯Ό λ«λ κ²μ κ·Έκ²μ΄ μμ νκ³ , κ·Έκ²μ λΆλͺ¨ μμ λ΄μ μ¬λ°λ₯΄κ² μ€μ²©λμλ€κ³ κ°μ£Όλ©λλ€. μμκ° λ«νλ©΄, κ·Έλ€μ μ€νμμ μ κ±°λμ΄ μμ ν μ²λ¦¬λμλ€κ³ νμλ©λλ€.
κ°λ¨ν μμλ‘ Tree Constructionμ λν΄μ νμ΅μ λ§λ¬΄λ¦¬ μ§μ΄ λ³΄κ² μ΅λλ€.
<html>
<head>
<title>My Web Page</title>
</head>
<body>
<p>Welcome to my web page.</p>
</body>
</html>
DOM νΈλ¦¬λ₯Ό ꡬμΆν μ°¨λ‘μ λλ€. μ²μμλ λ£¨νΈ λ Έλλ§ μλ μνμ λλ€. 'html' μμ νκ·Έ ν ν°μ λ§λλ©΄, 'html' λ Έλκ° λ£¨νΈ λ Έλμ μμμΌλ‘ μΆκ°λ©λλ€. μ΄ν 'head', 'title', 'body', 'p' λ±μ λ Έλλ λμΌν λ°©μμΌλ‘ νΈλ¦¬μ μΆκ°λ©λλ€.
'p' λ Έλλ₯Ό μλ‘ λ€λ©΄, μ΄ λ Έλλ 'body' λ Έλμ μμμΌλ‘ λ€μ΄κ°λλ€. κ·Έλ¦¬κ³ κ·Έ μμ ν μ€νΈ "Welcome to my web page."λ 'p' λ Έλμ μμμΌλ‘ λ€μ΄κ°κ² λ©λλ€.
μλλ μμλ‘ μμ±λ tree ꡬ쑰 μ λλ€.
html
βββ head
β βββ title
β βββ "My Web Page"
βββ body
βββ p
βββ "Welcome to my web page."
HTML νμ± μκ³ λ¦¬μ¦μ μ’ μ’ μλ¬λ‘ μΈν΄ νλ‘μΈμ€λ₯Ό μ’ λ£ν기보λ€λ μ½ν μΈ μ 볡ꡬμ λ λλ§μ μ°μ μν©λλ€. μ°μν μ ν κΈ°μ μ μ¬μ©ν¨μΌλ‘μ¨ μκ³ λ¦¬μ¦μ μλ¬κ° μλλΌλ κ°λ₯ν λ§μ μ ν¨ν μ½ν μΈ λ₯Ό νμ±νκ³ λ λλ§νλ €κ³ λ Έλ ₯ν©λλ€. μ΄ μ κ·Ό λ°©μμ μ¬μ©μκ° HTML λ¬Έμμ μΌλΆκ° λ¬Έμ κ° μλλΌλ μ¬μ© κ°λ₯ν μ½ν μΈ μ κ³μ μ κ·Όνκ³ μνΈ μμ©ν μ μλλ‘ ν©λλ€.
<!--μλͺ»λ μ½λ-->
<!DOCTYPE html>
<html>
<head>
<title>Test Page</title>
</head>
<body>
<h1>Welcome to My Website
<p>This is a paragraph.</p>
<p>This is another paragraph
<ul>
<li>List Item 1
<li>List Item 2
</ul>
</body>
</html>
λ€μμ μ½λλ₯Ό ν΅ν΄μ νμΈν κ²°κ³Ό
μμ HTML μ½λλ λ§μ λ¬Έλ² μ€λ₯λ₯Ό ν¬ν¨νκ³ μμ΅λλ€.
<h1>
νκ·Έκ° λ«νμ§ μμμ΅λλ€.
λ λ²μ§Έ <p>
νκ·Έκ° λ«νμ§ μμμ΅λλ€.
<li>
νκ·Έλ€μ΄ λ«νμ§ μμμ΅λλ€.
κ·ΈλΌμλ λΆκ΅¬νκ³ λλΆλΆμ μΉ λΈλΌμ°μ λ μ΄λ₯Ό μ μ ν λ λλ§νμ¬ μ¬μ©μμκ² μλ―Έ μλ μ½ν μΈ λ₯Ό 보μ¬μ€λλ€. μ΄κ²μ΄ λ°λ‘ "μ°μν μ ν"μ ν μμλΌκ³ ν μ μμ΅λλ€. μ½λκ° μλ²½νμ§ μλλΌλ λΈλΌμ°μ κ° μ΄ν΄ν μ μλλ‘ μ΅λν λ Έλ ₯ν©λλ€.
Cascading Style Sheets (CSS)λ μΉ μλΉμ€μμ μκ°μ μΈκ΄μ νμ±νλ μν μ μνν©λλ€. μ¬μ©μμκ² λ§€λ ₯μ μ΄κ³ νΈλ¦¬ν μΈν°νμ΄μ€λ₯Ό λ§λ€λ €κ³ λ Έλ ₯νκ³ μμ΅λλ€. λΉμ°νκ²λ λΈλΌμ°μ λ CSS documentλ₯Ό parsingνμ¬, μ°λ¦¬κ° λ§λ dom treeμ μ°κ²°νλ κΈ°λ₯(μ΄ κ³Όμ μμ CSSOMμ΄ μμ±λ©λλ€)μ μνν©λλ€.
CSS Parsingμ νλ κ°μ₯ μ£Όμν μ΄μ λ CSS μ½λλ₯Ό ν΅ν΄μ μ€νμΌ μ λΆλ¦¬νκ³ μΆμΆνλ κ²μ λλ€. μ΄λ¬ν μΆμΆλ μ€νμΌ μ€μμλ HTML μμμ μκ°μ λͺ¨μ(μ, ν¬κΈ°, λͺ¨μ, μμΉ λ±λ±)μ κ²°μ νλ μ 보λ₯Ό λͺ¨λ ν¬ν¨ν©λλ€. λΈλΌμ°μ λ Parsingμ ν΅ν΄μ styleμ μΆμΆνκ³ μ μ₯νμ¬ μ°¨ν λ λλ§ κ³Όμ μμ νμ©ν©λλ€.
CSS Parsingdms λ€μκ³Ό κ°μ μ΄μ λ₯Ό κ°μ§κ³ μμ΅λλ€.
CSS Parsingμ CSS μ½λκ° μ μλ ꡬ문 κ·μΉ λ° κ΅¬μ‘°λ₯Ό μ€μνλμ§ νμΈν©λλ€. μ νκΈ°, μμ±, κ° λ° κ΅¬λμ μ μ¬λ°λ₯Έ μ¬μ©μ ν¬ν¨νμ¬ μ½λκ° μ¬λ°λ₯΄κ² μμ±λμλμ§ νμΈν©λλ€. ꡬ문 μ ν¨μ± κ²μ¬λ CSS μ½λμ μ€λ₯λ λΆμΌμΉλ₯Ό μλ³νκ³ νμνλ λ° λμμ΄ λλ―λ‘ κ°λ°μλ μ΄λ₯Ό μμ νκ³ μ€νμΌμ΄ μ μ νκ² λ λλ§λλλ‘ ν μ μμ΅λλ€.
CSS Parsingμ CSS κ°μ²΄ λͺ¨λΈ(CSSOM)μ ꡬμ±νλ λ° μ€μν μν μ ν©λλ€. CSSOMμ CSS μ½λμ ꡬ쑰νλ ννμ λνλ΄λ―λ‘ κ°λ°μλ νλ‘κ·Έλλ° λ°©μμΌλ‘ CSS μμ± λ° κ°μ μ‘μΈμ€νκ³ μ‘°μν μ μμ΅λλ€. μ΄λ μ€νμΌμνΈμ μνΈ μμ©νκ³ μΉ μμ νμμ λμ λ³κ²½ μ¬νμ μ μ©νλ λ°©λ²μ μ 곡ν©λλ€.
ꡬ문 λΆμ μ€μ CSS κ·μΉμ μ νκΈ°λ₯Ό κΈ°λ°μΌλ‘ ν΄λΉ HTML μμμ μΌμΉλ©λλ€. λΈλΌμ°μ μ λ λλ§ μμ§μ ꡬ문 λΆμλ CSSλ₯Ό νμ©νμ¬ κ° μμμ μ΄λ€ μ€νμΌμ μ μ©ν΄μΌ νλμ§ κ²°μ ν©λλ€. μ€νμΌμ μ ννκ² κ΅¬λ¬Έ λΆμνκ³ ν΄κ²°ν¨μΌλ‘μ¨ CSS ꡬ문 λΆμμ μΉ νμ΄μ§μ μκ°μ ννμ΄ μλν λμμΈκ³Ό μΌμΉνλμ§ νμΈν©λλ€.
Toknizationλ CSS ꡬ문 λΆμ νλ‘μΈμ€μ 첫 λ¨κ³μ λλ€. μ¬κΈ°μλ CSS μ½λλ₯Ό CSS OMμ κ΅¬μ± μμμΈ κ°λ³ ν ν°μΌλ‘ λλλ μμ μ΄ ν¬ν¨λ©λλ€. ν ν°μ μ νμ(Selector), μμ±(Property), κ°(Value), κΈ°νΈ λ° ν€μλμ κ°μ κ³ μ ν λ¨μλ₯Ό λνλ λλ€. CSS μ½λλ₯Ό ν ν°νν¨μΌλ‘μ¨ λΈλΌμ°μ μ ꡬ문 λΆμ μμ§μ CSS κ·μΉμ κ° μμλ₯Ό μλ³νκ³ μ²λ¦¬ν μ μμ΅λλ€.
λ€μμ cssκ° Toknization λλ Token type λ€μ λͺ μν©λλ€.
{
}
display
, border
λ±λ±:
;
κ°λ¨ν μμλ‘ css Toknizationμ λ§λ¬΄λ¦¬ ν΄λ³΄κ² μ΅λλ€.
#main-header {
font-size: 24px;
color: blue;
}
#main-header
{
font-size
:
24px
;
color
:
blue
;
}
μμ§μ κ° Tokenλ€μ΄ λλμ΄μ Έ μμ§λ§ μλ―Έλ λΆμ¬λμ§ μμμ΅λλ€.
μ§κΈκΉμ§ CSS Tokenizaionμ λν΄μ νμ΅μ μ§μ νμ΅λλ€. κΈλ¨Έ λ€μ λ¨κ³μΈ Lexical Analysis λ‘ μ΄λνκ² μ΅λλ€.
Lexical Analysisμ CSS parsingμ Tokenν μ΄νμ λ¨κ³ μ λλ€. μ΄ κ³Όμ μμ Token ν λ κ²°κ³Όλ¬Όμ λ°νμΌλ‘ μλ―Έ μλ λ¨μλ‘ λΆν΄νκ³ μ°κ²°νλ μμ μ μ²λ§λ°λλ€.
Lexical Analysis κ³Όμ μ€μλ μμ±λ Tokenμ μλ―Έ μλ λ¨μλ‘ ν©μΉλ κΈ°λ₯μ μνν©λλ€. μλ₯Ό λ€μ΄ μ νμ, μμ±, κ° λ±λ±μ ν ν°μ CSS λ¬Έμ λ΄λΆμμ ν΄λΉ κΈ°λ₯μ μννμ¬ μΈμλκ³ λΆλ₯λ©λλ€. μ΄λ ν ν°μ μλ―Έ μλ λ¨μλ‘ λΆν΄νλκ²μ μ°¨ν CSSλ₯Ό ꡬ쑰νλ ννμ μ§νν λ νμμ μ λλ€.
body {
background-color: #f2f2f2;
color: #333;
}
ν ν°ν κ²°κ³Όλ¬Ό
body
,{
,background-color
,:
,#f2f2f2
,;
,color
,:
,#333
,;
,}
Lexical Analysis κ³Όμ μ΄ν κ²°κ³Ό
body
=> μ νμ{
=> μ¬λ μ€κ΄νΈbackground-color
=> μμ±:
=> μ½λ‘#f2f2f2
=> κ°;
=> μΈλ―Έμ½λ‘color
=> μμ±:
=> μ½λ‘#333
=> κ°;
=> μΈλ―Έμ½λ‘}
=> λ«λ μ€κ΄νΈ
Token ν ν κ²°κ³Όλ¬Όμ λ°νμΌλ‘ μλ―Έλ₯Ό λΆμ¬νλ Lexical Analysis κΉμ§ μννμ΅λλ€. λ€μμ Syntax Analysis μ λλ€.
Syntax Analysisμ CSS Parsingμ 3λ²μ§Έ λ¨κ³ μ λλ€. CSS μ½λμ ꡬ쑰μ λ¬Έλ²μ λΆμνμ¬ μ μλ ꡬ문 κ·μΉμ μ€μνλμ§ νμΈνλ μμ μ΄ ν¬ν¨λ©λλ€. ꡬ문 λΆμμ CSS μ½λμ κ³μΈ΅ ꡬ쑰λ₯Ό λνλ΄λ parse treeμ ꡬμΆνκΈ° μν΄ ν ν°μ λ°°μ΄κ³Ό κ΄κ³λ₯Ό νμΈν©λλ€.
Syntax Analysisμ Tokenization μ€μ μμ±λ ν ν°μ CSS ꡬ문 κ·μΉμ λ°λΌ μλ―Έ μλ μμλ‘ μ λ ¬ν©λλ€. μ΄ λ¨κ³μμλ Tokenμ μμμ λ°°μΉλ₯Ό κ³ λ €νμ¬ CSS κ·μΉ, μμ±, κ° λ° κΈ°ν μμμ ꡬ쑰λ₯Ό κ²°μ ν©λλ€.κ·Έλ¦¬κ³ κ·Έ μ΄ν parse treeλ₯Ό ꡬμΆν©λλ€.
ꡬ문 λΆμ νΈλ¦¬λ CSS μ½λμ κ³μΈ΅ ꡬ쑰λ₯Ό λνλ λλ€. ꡬ문 λΆμμ ν ν°μ λ Έλλ‘ κ΅¬μ±νκ³ λ Έλ κ°μ κ΄κ³λ₯Ό μ μνμ¬ κ΅¬λ¬Έ λΆμ νΈλ¦¬λ₯Ό ꡬμ±ν©λλ€. μλ₯Ό λ€μ΄ ꡬ문 λΆμ νΈλ¦¬μλ CSS μ½λμ κ³μΈ΅ ꡬ쑰λ₯Ό λ°μνλ μμ-νμ κ΄κ³μ ν¨κ» μ νκΈ°, μμ±, κ° λ° μ μΈμ λν λ Έλκ° μμ μ μμ΅λλ€.
μλ₯Ό λ€μ΄ μλμ κ°μ css λ¬Έμκ° μ‘΄μ¬ν λ
/* CSS Comment */
h1 {
color: #333;
font-size: 24px;
text-align: center;
}
p {
font-family: Arial, sans-serif;
font-size: 16px;
line-height: 1.5;
}
λ€μκ³Ό κ°μ parse treeλ₯Ό κ°μ§κ² λ©λλ€.
StyleSheet
ββ Comment: " CSS Comment "
ββ Rule
β ββ Selector: "h1"
β ββ DeclarationBlock
β ββ Declaration
β β ββ Property: "color"
β β ββ Value: "#333"
β ββ Declaration
β β ββ Property: "font-size"
β β ββ Value: "24px"
β ββ Declaration
β ββ Property: "text-align"
β ββ Value: "center"
ββ Rule
β ββ Selector: "p"
β ββ DeclarationBlock
β ββ Declaration
β β ββ Property: "font-family"
β β ββ Value: "Arial, sans-serif"
β ββ Declaration
β β ββ Property: "font-size"
β β ββ Value: "16px"
β ββ Declaration
β ββ Property: "line-height"
β ββ Value: "1.5"
λν μ΄ λ¨κ³ μμ μλͺ»λ κ·μΉμ΄ μλμ§ νμΈνλλ°,
body {
color red;
}
μ΄ λ Syntax Analysisλ μ€λ₯λ₯Ό κ°μ§νκ³ μ€λ₯ λ©μΈμ§λ₯Ό λ°ννκ±°λ 볡ꡬνλ κΈ°λ₯μ μνν©λλ€.
CSS Parsing Algorithmμ CSS κ·μΉμ΄ νμ±λκ³ νκ°λμ΄ μΉ νμ΄μ§ λ΄μ HTML μμμ μ μ©λλ 체κ³μ μΈ κ³Όμ μ μ μν©λλ€. μ΄λ CSS μ½λλ₯Ό ν΄μνκ³ κ° μμμ μ μ©ν΄μΌ ν μ΅μ’ μ€νμΌμ κ²°μ νλ μ£Όμ λ¨κ³λ₯Ό κ°μνν©λλ€.
CSS Parsing Algorithmμ 첫 λ²μ§Έ λ¨κ³λ κ·μΉ μ ν λ° μΌμΉμ λλ€. μ΄ κ³Όμ μ CSS κ·μΉμ μ ννκ³ λ¬Έμ νΈλ¦¬μ ν΄λΉ HTML μμμ μΌμΉνλμ§ κ²°μ νλ κ²μ ν¬ν¨ν©λλ€.
CSS νμ± μκ³ λ¦¬μ¦μ λ λ²μ§Έ λ¨κ³λ μ€νμΌ μμ λ° μ°μμ λλ€.
CSS νμ± μκ³ λ¦¬μ¦μ μΈ λ²μ§Έ λ° λ§μ§λ§ λ¨κ³λ κ° CSS μμ±μ λν μ΅μ’ μμ± κ°μ κ³μ°νλ κ²μ λλ€.
μ§κΈκΉμ§ νμ΅ν CSS parser
λ°©μμ ν΅ν΄ CSSλ¬Έμλ‘ CSSOM λ¬Έμλ₯Ό μμ±νλ μμλ₯Ό μ§νν΄ λ³΄κ² μ΅λλ€.
body {
background-color: #f5f5f5;
}
h1 {
font-size: 24px;
color: #333;
}
p {
font-size: 16px;
color: #666;
}
μμλ‘ μ¬μ©ν css
ꡬ문μ
λλ€.
ν ν°ν κ²°κ³Όλ¬Όμ λ€μκ³Ό κ°γ λΈλλ€.
body
, {
, background-color
, :
, #f5f5f5
, ;
, }
h1
, {
, font-size
, :
, 24px
, ;
, color
, :
, #333
, ;
, }
p
, {
, font-size
, :
, 16px
, ;
, color
, :
, #666
, ;
,}
- STYLESHEET
- RULESET1
- SELECTOR: body
- DECLARATION BLOCK
- PROPERTY: background-color
- VALUE: #f5f5f5
- RULESET2
- SELECTOR: h1
- DECLARATION BLOCK
- PROPERTY: font-size
- VALUE: 24px
- PROPERTY: color
- VALUE: #333
- RULESET3
- SELECTOR: p
- DECLARATION BLOCK
- PROPERTY: font-size
- VALUE: 16px
- PROPERTY: color
- VALUE: #666
μ΅μ’
μ μΌλ‘ μμ±ν CSSOM Tree
μ
λλ€!
λ§μ§λ§μΌλ‘ DOM
κ³Ό CSSOM
μ μ 리νκ³ λ§λ¬΄λ¦¬ νκ² μ΅λλ€
κΈ΄ κΈ μ½μ΄μ£Όμ
μ μ λ§ κ°μ¬ν©λλ€.
- ꡬ쑰νλ κ°μ²΄ λͺ¨λΈ:
DOM
μHTML
λ¬Έμμ ꡬ쑰μ λ΄μ©μ νΈλ¦¬ ννλ‘ λνλ λλ€.- APIμ μΈν°νμ΄μ€:
HTML
λ¬Έμμ μμμ λ΄μ©μ μ κ·Ό, μμ , νμν μ μλ APIμ μΈν°νμ΄μ€λ₯Ό μ 곡ν©λλ€.- λμ μμ κ°λ₯:
DOM
μ ν΅ν΄ κ°λ°μλ ꡬ쑰, λ΄μ©, μμ± λ±μ λμ μΌλ‘ μμ ν μ μμΌλ©°, μ΄λ₯Ό ν΅ν΄ λμ μ΄κ³ λ°μμ μΈ μΉ κ²½νμ μ 곡ν©λλ€.- κ°μ²΄λ‘μ νν:
HTML
μμ, ν μ€νΈ λ Έλ, μμ±, κ·Έλ¦¬κ³ λ€λ₯Έ λ¬Έμ κ΅¬μ± μμλ€μ κ°μ²΄λ‘ λνλ λλ€.CSSOM
κ³Όμ μνΈμμ©:DOM
μ κ° μμμ λν μ°κ΄λCSS
μ€νμΌμ μ κ·Όν μ μλλ‘CSSOM
μ ν΅ν΄ μ 곡ν©λλ€.CSSOM
μ ν΅ν μ€νμΌ μ λ°μ΄νΈ: DOMμ λ³κ²½μ΄ μκΈ°λ©΄, μλ₯Ό λ€μ΄ μμμ ꡬ쑰λ λ΄μ©μ μμ νλ κ²½μ°, μ΄λ¬ν λ³κ²½μCSSOM
μ ν΅ν΄ μ°κ΄λCSS
μ€νμΌμ μ λ°μ΄νΈλ₯Ό μ λ°ν μ μμ΅λλ€.- λ λλ§ μμ§κ³Όμ νλ ₯:
CSSOM
μ λ λλ§ μμ§μ νμν μ€νμΌ μ 보λ₯Ό μ 곡νλ©°, μ΄ μ 보λDOM
ꡬ쑰λ₯Ό κΈ°λ°μΌλ‘ μμμ μκ°μ λ λλ§μ μ μ©λ©λλ€.
- ꡬ쑰νλ κ°μ²΄ λͺ¨λΈ:
CSSOM
μ μΉ νμ΄μ§μCSS
μ€νμΌμνΈλ₯Ό ꡬ쑰νλ κ°μ²΄ λͺ¨λΈλ‘ λνλ λλ€.- APIμ μΈν°νμ΄μ€: νλ‘κ·Έλλ°μ μΌλ‘
CSS
μ€νμΌμ μ κ·Ό, μ‘°μ, μ μ©ν μ μλ APIμ μΈν°νμ΄μ€λ₯Ό μ 곡ν©λλ€.- λμ μμ κ°λ₯: κ°λ°μλ
CSSOM
μ ν΅ν΄CSS
μ€νμΌμ λμ μΌλ‘ μμ , μΆκ°, μ κ±°ν μ μμΌλ©°, μ΄λ₯Ό ν΅ν΄ μΉ νμ΄μ§μ μκ°μ ννκ³Ό λμμ λν κ°λ ₯ν μ μ΄κ° κ°λ₯ν©λλ€.- κ°μ²΄λ‘μ νν:
CSS
κ·μΉ, μ νμ, μ μΈ, κ·Έλ¦¬κ³ λ€λ₯Έ μ€νμΌλ§ μμ±λ€μ κ°μ²΄λ‘ λνλ λλ€.DOM
κ³Όμ μνΈμμ©:CSSOM
μ νΉμ DOM μμμ μ°κ²°λCSS
κ·μΉμ κ΄λ¦¬ν©λλ€.- λ λ νΈλ¦¬μ λ°μ:
CSSOM
μ λ³κ²½μ΄ μκΈ°λ©΄, μλ₯Ό λ€μ΄CSS
κ·μΉμ μμ νκ±°λ μΆκ°νλ κ²½μ°, μ΄λ¬ν λ³κ²½μ λ λ νΈλ¦¬μ λ°μλμ΄ μν₯μ λ°λ μμμ μκ°μ λ λλ§μ΄ μ λ°μ΄νΈλ©λλ€.- λ λλ§ κ³Όμ μμμ μν :
CSSOM
κ³ΌDOM
μ λ λλ§ κ³Όμ μμ νλ ₯νμ¬ μΉ νμ΄μ§μ μμλ€μ ν¬κΈ°, μμΉ, μΈκ΄, λμμ κ²°μ ν©λλ€.