μλ°μ€ν¬λ¦½νΈμ AJAXμμ μ΄ν΄λ³Έ λ΄μ©μ μνλ©΄ AJAXλ₯Ό ν΅ν΄ λΈλΌμ°μ λ μλ°μ€ν¬λ¦½νΈλ₯Ό μ¬μ©νμ¬ μλ²μκ² λΉλκΈ°λ‘ λ°μ΄ν°λ₯Ό μμ²νκ³ , μλ²μ μλ΅μ λ°μ, λ°μ λ°μ΄ν°λ‘ μΉνμ΄μ§λ₯Ό λμ μΌλ‘ κ°±μ νκ² λλ€λ κ²μ μκ²λμλ€. μ΄λ² κΈμμλ μ΄λ€ λ°©μμΌλ‘ μλ΅μ μ£Όκ³ λ°λ κ²μΈμ§, λ°μμ¨ λ°μ΄ν°λ₯Ό μ΄λ»κ² λΈλΌμ°μ κ° μΉ νμ΄μ§λ₯Ό λ λλ§νλ κ²μΈμ§λ₯Ό μ€μ μ μΌλ‘ μ΄ν΄λ³΄μ.
νμ±λ μλ°μ€ν¬λ¦½νΈ μ½λμμ DOM API λ₯Ό μ΄μ©ν΄ DOM μ μ‘°μν κ²½μ° λ λ νΈλ¦¬λ₯Ό μ¬κ΅¬μ±νλ©΄μ μλμ κ³Όμ λ€μ΄ λ€μ λ°μν μ μλ€.
Style
λΈλΌμ°μ λ λλ§ μμ§μ΄ DOM, CSSOM μ κ²°ν©ν΄ νλ©΄μ νμλμ΄μΌν λͺ¨λ λ
Έλμ 컨ν
μΈ , μ€νμΌ μ λ³΄κ° ν¬ν¨λ λ λ νΈλ¦¬λ₯Ό μμ±νλ€.
Layout (Reflow)
μμ±λ λ λνΈλ¦¬λ₯Ό ν΅ν΄ Layout κ³Όμ μ ν΅ν΄ μμ λ§₯λ½μ μλμ μλ μμλλ‘ μ¬κ·μ μΌλ‘ κ° λ
Έλμ μμΉμ ν¬κΈ°λ₯Ό μΈ‘μ κ°λ₯ν ν½μ
λ¨μλ‘ κ³μ°νλ€.
Paint (Repaint)
Layout κ³Όμ μμ κ³μ°λ κ°μ μ΄μ©ν΄ Paint κ³Όμ μ ν΅ν΄ κ° λ
Έλλ₯Ό μμ λ§₯λ½μ μλμ μλ μμλλ‘ μ¬κ·μ μΌλ‘ νλ©΄μμ μ€μ ν½μ
λ‘ λ³ννκ³ λ μ΄μμκ³Ό μκ΄μλ CSS μμ±λ€μ μ μ©ν΄ μ¬λ¬κ°μ λ μ΄μ΄λ€μ μμ±νλ€.
Composite & Render
λ μ΄μ΄λ₯Ό ν©μ±νμ¬ μ€μ νλ©΄μ λνλΈλ€.
λΈλΌμ°μ μ ν΅μ¬ κΈ°λ₯μ νμν 리μμ€(HTML, CSS, μλ°μ€ν¬λ¦½νΈ, μ΄λ―Έμ§. ν°νΈ λ±μ μ μ νμΌ λλ μλ²κ° λμ μΌλ‘ μμ±ν λ°μ΄ν°)λ₯Ό μλ²μ μμ²(request)νκ³ μλ²λ‘λΆν° μλ΅(response)λ°μ λΈλΌμ°μ μ μκ°μ μΌλ‘ λ λλ§νλ κ²μ΄λ€. μλ²μ μμ²μ λ³΄λΌ μ μλ μΈν°νμ΄μ€ μ€ νλμΈ μ£Όμμ°½μ ν΅ν΄ μμ²κ³Ό μλ΅μ μ΄ν΄λ³΄μ.
λΈλΌμ°μ μ μ£Όμμ°½μ URL
μ μ
λ ₯νκ³ μν° ν€λ₯Ό λλ₯΄λ©΄ URL
μ νΈμ€νΈ μ΄λ¦μ΄ DNS
λ₯Ό ν΅ν΄ IP μ£Όμλ‘ λ³νλκ³ μ΄ IP μ£Όμλ₯Ό κ°λ μλ²μκ² μμ²μ μ μ‘νλ€. μλλ URI
ꡬ쑰μ κ΄ν μ¬μ§μ΄λ€.
λΈλΌμ°μ μ μ£Όμμ°½μ https://naver.com
λ₯Ό μ
λ ₯νκ³ μν° ν€λ₯Ό λλ₯΄λ©΄ λ£¨νΈ μμ²(/
, μ€ν΄(scheme)
, νΈμ€νΈ(host)
λ§μΌλ‘ ꡬμ±λ URIμ μν μμ²)μ΄ naver.com
μλ²λ‘ μ μ‘λλ€. λ£¨νΈ μμ²μλ λͺ
νν 리μμ€λ₯Ό μμ²νλ λ΄μ©μ΄ μμ§λ§ μΌλ°μ μΌλ‘ μλ²λ λ£¨νΈ μμ²μ λν΄ μ묡μ μΌλ‘ index.html
μ μλ΅νλλ‘ κΈ°λ³Έ μ€μ λμ΄μλ€.
λ§μ½ index.html
μ΄ μλ λ€λ₯Έ μ μ νμΌμ μλ²μ μμ²νλ €λ©΄ λΈλΌμ°μ μ£Όμμ°½μ https://naver.com/assets/data/data.json
μ²λΌ μμ²ν μ μ νμΌμ κ²½λ‘μ νμΌ μ΄λ¦μ URIμ νΈμ€νΈ λ€μ ν¨μ€(path)μ κΈ°μ νμ¬ μλ²μ μμ²νλ€. κ·Έλ¬λ©΄ μλ²λ λ£¨νΈ ν΄λμ asset/data
ν΄λ λ΄μ μλ μ μ νμΌ data.json
μ μλ΅ν κ²μ΄λ€.
(λ¬Όλ‘ μ°λ¦¬κ° μ κ·Όν μ μλ μ¬λ°λ₯Έ URIκ° λ§λ€λ κ°μ νμμ...)
μμ²κ³Ό μλ΅μ κ°λ°μ λꡬμ Network
ν¨λμμ νμΈν μ μλ€.
μμμ λ³΄λΈ λ£¨νΈ μμ²μ λν μ 보과 μλ²μ μλ΅μ κ°λ°μ λꡬμ Network
ν¨λμμ μ΄ν΄λ³΄μ.
μ κ·Έλ¦Όμ μ΄ν΄λ³΄λ©΄ index.html(www.naver.com)
λΏλ§ μλλΌ CSS, μλ°μ€ν¬λ¦½νΈ, μ΄λ―Έμ§, ν°νΈ νμΌλ€λ μλ΅λμλ€. μμ²λ νμ§ μμ μ΄ λ¦¬μμ€λ€μ μ μλ΅λμμκΉ?
μ΄λ λΈλΌμ°μ λ λλ§ μμ§μ΄ HTMLμ νμ±νλ λμ€μ μΈλΆ 리μμ€λ₯Ό λ‘λνλ νκ·Έ, μ¦ CSS νμΌμ λ‘λνλ link
νκ·Έ, μ΄λ―Έμ§ νμΌμ λ‘λνλ img
νκ·Έ, μλ°μ€ν¬λ¦½νΈλ₯Ό λ‘λνλ script
νκ·Έ λ±μ λ§λλ©΄ HTMLμ νμ±μ μΌμ μ€λ¨νκ³ ν΄λΉ 리μμ€ νμΌμ μλ²λ‘ μμ²νκΈ° λλ¬Έμ΄λ€.
λΈλΌμ°μ μμ²μ μν΄ μλ²κ° μλ΅ν HTML
λ¬Έμλ λ¬Έμμ΄λ‘ μ΄λ£¨μ΄μ§ μμν ν
μ€νΈλ€. μμν ν
μ€νΈμΈ HTML
λ¬Έμλ₯Ό λΈλΌμ°μ μ μκ°μ μΈ ν½μ
λ‘ λ λλ§νλ €λ©΄ HTML
λ¬Έμλ₯Ό λΈλΌμ°μ κ° μ΄ν΄ν μ μλ μλ£κ΅¬μ‘°(κ°μ²΄)λ‘ λ³ννμ¬ λ©λͺ¨λ¦¬μ μ μ₯ν΄μΌ νλ€.
μλλ λΈλΌμ°μ λ λλ§ μμ§μ΄ μλ΅λ°μ HTML
λ¬Έμλ₯Ό νμ±νμ¬ DOM
μ μμ±νλ κ³Όμ μ΄λ€.
1. μλ²μ μ‘΄μ¬νλ HTML νμΌμ΄ λΈλΌμ°μ μ μμ²μ μν΄ μλ΅λλ€.
2. λΈλΌμ°μ λ μλ²κ° μλ΅ν HTML λ¬Έμλ₯Ό λ°μ΄νΈ(2μ§μ) ννλ‘ μλ΅λ°λλ€.
meta
νκ·Έμ charset
μ΄νΈλ¦¬λ·°νΈμ μν΄ μ§μ λ μΈμ½λ© λ°©μ(μ: UTF-8)μ κΈ°μ€μΌλ‘ λ¬Έμμ΄λ‘ λ³νλλ€.meta
νκ·Έμ charset
μ΄νΈλ¦¬λ·°νΈμ μ μΈλ μΈμ½λ© λ°©μμ content-type: text/html; charset=utf-8
κ³Ό κ°μ΄ μλ΅ ν€λμ λ΄κ²¨ μλ΅λλ€.3. λ¬Έμμ΄λ‘ λ³νλ HTML λ¬Έμ
λ₯Ό μ½μ΄ λ€μ¬ λ¬Έλ²μ μλ―Έλ₯Ό κ°λ μ½λμ μ΅μ λ¨μμΈ ν ν°(token)
λ€λ‘ λΆν΄νλ€.
4. κ° ν ν°λ€μ κ°μ²΄λ‘ λ³ννμ¬ λ
Έλ(node)
λ€μ μμ±νλ€.
5. HTML λ¬Έμλ HTML μμλ€μ μ§ν©μΌλ‘ μ΄λ£¨μ΄μ§λ©° HTML μμλ μ€μ²© κ΄κ³λ₯Ό κ°λλ€.
μ΄ λ Έλλ€λ‘ ꡬμ±λ νΈλ¦¬ μλ£κ΅¬μ‘°λ₯Ό
DOM(Document Object Model)
μ΄λΌ λΆλ₯Έλ€.
λ λλ§ μμ§μ μμμ μ΄ν΄λ³Έ κ³Όμ μ ν΅ν΄ HTML μ μ²μλΆν° ν μ€μ© μμ°¨μ μΌλ‘ νμ±νμ¬ DOM
μ μμ±ν΄ λκ°λ€. μ΄μ²λΌ λ λλ§ μμ§μ DOM
μ μμ±ν΄ λκ°λ€κ° CSSλ₯Ό λ‘λνλ link
νκ·Έλ style
νκ·Έλ₯Ό λ§λλ©΄ DOM
μμ±μ μΌμ μ€λ¨νλ€.
κ·Έλ¦¬κ³ link
νκ·Έμ href
μ΄νΈλ¦¬λ·°νΈμ μ§μ λ CSS νμΌμ μλ²μ μμ²νμ¬ λ‘λν CSS νμΌμ΄λ style
νκ·Έ λ΄μ CSSλ₯Ό HTMLκ³Ό λμΌν νμ± κ³Όμ μ κ±°μΉλ©° ν΄μνμ¬ CSSOM(CSS Object Model)
μ μμ±νλ€.
DOM
κ³Ό CSSOM
μ λ λλ§μ μν΄ λ λ νΈλ¦¬(render tree)
λ‘ κ²°ν©λλ€.
λ λ νΈλ¦¬λ λ λλ§μ μν νΈλ¦¬ ꡬ쑰μ μλ£κ΅¬μ‘°μ΄λ€. λ°λΌμ λΈλΌμ°μ νλ©΄μ λ λλ§λμ§ μλ λ Έλμ CSSμ μν΄ λΉνμλλ λ Έλλ€μ ν¬ν¨νμ§ μλλ€.
μ΄ν μμ±λ λ λ νΈλ¦¬λ κ° HTML
μμμ λ μ΄μμ(μμΉμ ν¬κΈ°)μ κ³μ°νλ λ° μ¬μ©λλ©° λΈλΌμ°μ νλ©΄μ ν½μ
μ λ λλ§νλ νμΈν
(painting) μ²λ¦¬μ μ
λ ₯λλ€.
μ§κΈκΉμ§ μ΄ν΄λ³Έ λΈλΌμ°μ λ λλ§ κ³Όμ μ λ°λ³΅ν΄μ μ€νλ μ μλ€. κ·Έλ¬λ, λ μ΄μμ κ³μ°κ³Ό νμΈν μ λ€μ μ€ννλ 리λ λλ§μ λΉμ©μ΄ λ§μ΄ λλ, μ±λ₯μ μ μν₯μ μ£Όλ μμ μ΄λ€.
HTML
λ¬Έμλ₯Ό νμ±ν κ²°κ³Όλ¬Όλ‘μ μμ±λ DOM
μ HTML
λ¬Έμμ ꡬ쑰μ μ 보λΏλ§ μλλΌ HTML
μμμ μ€νμΌ λ±μ λ³κ²½ν μ μλ νλ‘κ·Έλλ° μΈν°νμ΄μ€λ‘μ DOM API
λ₯Ό μ 곡νλ€.
μ¦, μλ°μ€ν¬λ¦½νΈ μ½λμμ DOM API
λ₯Ό μ¬μ©νλ©΄ μ΄λ―Έ μμ±λ DOM
μ λμ μΌλ‘ μ‘°μν μ μλ€.
CSS
νμ± κ³Όμ κ³Ό λ§μ°¬κ°μ§λ‘ λ λλ§ μμ§μ HTML
μ ν μ€μ© μμ°¨μ μΌλ‘ νμ±νλ©° DOM
μ μμ±ν΄ λκ°λ€ μλ°μ€ν¬λ¦½νΈ νμΌμ λ‘λνλ script
νκ·Έλ μλ°μ€ν¬λ¦½νΈ μ½λλ₯Ό μ½ν
μΈ λ‘ λ΄μ script
νκ·Έλ₯Ό λ§λλ©΄ DOM
μμ±μ μΌμ μ€λ¨νλ€.
script
νκ·Έμ src
μ΄νΈλ¦¬λ·°νΈμ μ μλ μλ°μ€ν¬λ¦½νΈ νμΌμ μλ²μ μμ²νμ¬ λ‘λν μλ°μ€ν¬λ¦½νΈ νμΌμ΄λ script
νκ·Έ λ΄μ μλ°μ€ν¬λ¦½νΈ μ½λλ₯Ό νμ±νκΈ° μν΄ μλ°μ€ν¬λ¦½νΈ μμ§μ μ μ΄κΆμ λκΈ΄λ€.AST(Abstract Syntax Tree(μΆμμ ꡬ문 νΈλ¦¬))
λ₯Ό μμ±νλ€. κ·Έλ¦¬κ³ AST
λ₯Ό κΈ°λ°μΌλ‘ μΈν°ν리ν°κ° μ€νν μ μλ μ€κ° μ½λμΈ λ°μ΄νΈμ½λλ₯Ό μμ±νμ¬ μ€ννλ€.μ΄μ μμ±λ λ λνΈλ¦¬λ₯Ό μμ λ§₯λ½μ μλμ μλ μμλλ‘ μ¬κ·μ μΌλ‘ κ° λ Έλμ μμΉμ ν¬κΈ°λ₯Ό μΈ‘μ κ°λ₯ν ν½μ λ¨μλ‘ κ³μ°νλ Layoutλ¨κ³λ₯Ό κ±°μΉλ€.
κ·Έ ν Layout κ³Όμ μμ κ³μ°λ κ°μ μ΄μ©ν΄ Paint κ³Όμ μ ν΅ν΄ κ° λ Έλλ₯Ό μμ λ§₯λ½μ μλμ μλ μμλλ‘ μ¬κ·μ μΌλ‘ νλ©΄μμ μ€μ ν½μ λ‘ λ³ννκ³ λ μ΄μμκ³Ό μκ΄μλ CSS μμ±λ€μ μ μ©ν΄ μ¬λ¬κ°μ λ μ΄μ΄λ€μ μμ±νλ€.
λ§μ½ μλ°μ€ν¬λ¦½νΈ μ½λμ DOM
μ΄λ CSSOM
μ λ³κ²½νλ DOM API
κ° μ¬μ©λ κ²½μ° DOM
μ΄λ CSSOM
μ΄ λ³κ²½λλ€. μ΄λ λ³κ²½λ DOM
κ³Ό CSSOM
μ λ€μ λ λ νΈλ¦¬λ‘ κ²°ν©λκ³ λ³κ²½λ λ λ νΈλ¦¬λ₯Ό κΈ°λ°μΌλ‘ λ μ΄μμκ³Ό νμΈνΈ κ³Όμ μ κ±°μΉλ€.
μ΄λ₯Ό Layout(reflow) & Paint(repaint)λΌ νλ€.
λ μ΄μμμ μν₯μ΄ μλ λ³κ²½μ Layout μμ΄ Paintλ§ μ€νλλ€.
μ΄ν Composite & Render κ³Όμ μ κ±°μ³ λ μ΄μ΄λ₯Ό ν©μ±νμ¬ μ€μ νλ©΄μ λνλΈλ€.
μ΄μ²λΌ λΈλΌμ°μ λ λκΈ°μ (synchronous)μΌλ‘, μ¦ μμμ μλ λ°©ν₯μΌλ‘ μμ°¨μ μΌλ‘ HTML, CSS, μλ°μ€ν¬λ¦½νΈλ₯Ό νμ±νκ³ μ€ννλ€. μ΄κ²μ script
νκ·Έμ μμΉμ λ°λΌ HTML
νμ±μ΄ λΈλ‘νΉλμ΄ DOM μμ±μ΄ μ§μ°λ μ μλ€λ κ²μ μλ―Ένλ€.
λ§μ½, script
νκ·Έμ μλ μλ°μ€ν¬λ¦½νΈ μ½λκ° DOM API
λ₯Ό νμ©νμ¬ DOM
μ΄ μμ±λμ§ μμ μνμμ μλ°μ€ν¬λ¦½νΈλ‘ DOM
μ μ‘°μνλ©΄ λ¬Έμ κ° λ°μν μ μλ€.
μ΄λ¬ν λ¬Έμ μ μ΄ λ°μνμ§ μκ² νκΈ°μν΄ body
μμμ κ°μ₯ μλμ μλ°μ€ν¬λ¦½νΈλ₯Ό μμΉμν€λ κ²μ΄ μ’λ€. κ·Έλ¬λ©΄ μμ λ¬Έμ μ μ΄ ν΄κ²°λλ©°, μλ°μ€ν¬λ¦½νΈ λ‘λ©/νμ±/μ€νμΌλ‘ μΈν΄ HTML
μμλ€μ λ λλ§μ μ§μ₯λ°λ μΌμ΄ λ°μνμ§ μμ νμ΄μ§ λ‘λ© μκ°μ΄ λ¨μΆλλ€.
μμμ μ΄ν΄λ³Έ μλ°μ€ν¬λ¦½νΈ νμ±μ μν DOM μμ±μ΄ μ€λ¨λλ λ¬Έμ λ₯Ό κ·Όλ³Έμ μΌλ‘ ν΄κ²°νκΈ° μν΄ HTML5
λΆν° script
νκ·Έμ async
μ defer
μ΄νΈλ¦¬λ·°νΈκ° μΆκ°λμλ€.
async
μ defer
μ΄νΈλ¦¬λ·°νΈλ₯Ό μ¬μ©νλ©΄ HTML νμ±κ³Ό μΈλΆ μλ°μ€ν¬λ¦½νΈ νμΌμ λ‘λκ° λΉλκΈ°μ (asynchronous)μΌλ‘ λμμ μ§νλλ€. νμ§λ§ μλ°μ€ν¬λ¦½νΈμ μ€ν μμ μ μ°¨μ΄κ° μλ€.
HTML
νμ±κ³Ό μΈλΆ μλ°μ€ν¬λ¦½νΈ νμΌμ ν¬λκ° λΉλκΈ°μ μΌλ‘ λμμ μ§νλλ€. λ¨, μλ°μ€ν¬λ¦½νΈμ νμ±κ³Ό μ€νμ μλ°μ€ν¬λ¦½νΈ νμΌμ λ‘λκ° μλ£λ μ§ν μ§νλλ©°, μ΄λ HTML
νμ±μ΄ μ€λ¨λλ€.
μ¬λ¬κ°μ script
νκ·Έμ async
μ΄νΈλ¦¬λ·°νΈλ₯Ό μ§μ νλ©΄ script
νκ·Έμ μμμλ μκ΄μμ΄ λ‘λκ° μλ£λ μλ°μ€ν¬λ¦½νΈλΆν° λ¨Όμ μ€νλλ―λ‘ μμκ° λ³΄μ₯λμ§ μλλ€.
μμ async
μ΄νΈλ¦¬λ·°νΈμ κ°μΌλ, μλ°μ€ν¬λ¦½νΈμ νμ±κ³Ό μ€νμ HTML
νμ±μ΄ μλ£λ μ§ν, μ¦ DOM
μμ±μ΄ μλ£λ μ§ν μ§νλλ€. (μ΄λ DOMContentLoaded
μ΄λ²€νΈ λ°μ.)
λ°λΌμ DOM
μμ±μ΄ μλ£λ μ΄ν μ€νλμ΄μΌ ν μλ°μ€ν¬λ¦½νΈμ μ μ©νλ€.
λΈλΌμ°μ λ λλ§ κ³Όμ μ ν¬κ² 5λ¨κ³λ‘ λλ μ μλ€.
μλ°μ€ν¬λ¦½νΈμ DOM APIλ₯Ό ν΅ν΄ DOMμ΄λ CSSOMμ λ³κ²½ν μ μλ€.
μ΄ κ³Όμ μμ λ λ νΈλ¦¬λ₯Ό μ¬μ±μ±νλ©° *Layout, Paintκ° λ°μνκ³ μ΄λ μ±λ₯μ μ μν₯μ μ€ μ μλ€.