πŸ–₯️ λΈŒλΌμš°μ € λ Œλ”λ§ κ³Όμ •

μ‹ νƒœμΌΒ·2024λ…„ 10μ›” 15일

🌁 Background

λΈŒλΌμš°μ € ?

  • μ‚¬μš©μžκ°€ μž…λ ₯ν•œ(μ›ν•˜λŠ”) μ›ΉνŽ˜μ΄μ§€(url에 μ˜ν•΄ μ •ν•΄μ§„), 이미지, λ™μ˜μƒ λ“±μ˜ μžμ›μ„ μ„œλ²„μ—κ²Œ μš”μ²­ν•œλ‹€.

  • μ„œλ²„λ‘œλΆ€ν„° 전달(응닡) 받은 μžμ›μ„ 화면에 좜λ ₯ν•œλ‹€.

  • 인터넷 μ΅μŠ€ν”Œλ‘œλŸ¬, 크둬, μ‚¬νŒŒλ¦¬ 등이 이에 ν•΄λ‹Ήν•œλ‹€.

    ν”„λ‘œλ―ΈμŠ€ 101이 μ•„λ‹Œ λΈŒλΌμš°μ € 101

λΈŒλΌμš°μ €μ˜ ꡬ성 μš”μ†Œ


ComponentDescription
User Interface- μ‚¬μš©μžκ°€ μ ‘κ·Όν•  수 μžˆλŠ” μ˜μ—­μ΄λ‹€.
- 예컨데 검색창, λ’€λ‘œκ°€κΈ°/μ•žμœΌλ‘œ κ°€κΈ° λ²„νŠΌ, μƒˆλ‘œ κ³ μΉ¨ λ²„νŠΌ λ“± λΈŒλΌμš°μ € ν”„λ‘œκ·Έλž¨ 자체의 GUIλ₯Ό κ΅¬μ„±ν•˜λŠ” 뢀뢄이닀.
Browser Engine- User Interface와 Rendering Engine μ‚¬μ΄μ˜ λ™μž‘μ„ μ œμ–΄ν•΄μ£ΌλŠ” 엔진이닀.
- λΈŒλΌμš°μ €λΌλŠ” ν”„λ‘œκ·Έλž¨μ˜ λΉ„μ¦ˆλ‹ˆμŠ€ 둜직, 핡심 쀑좔 뢀뢄이닀.
- Data Storageλ₯Ό μ°Έμ‘°ν•˜λ©° λ‘œμ»¬μ— 데이터λ₯Ό μ“°κ³  μ½μœΌλ©΄μ„œ λ‹€μ–‘ν•œ μž‘μ—…μ„ ν•œλ‹€.
Rendering Engine- μš”μ²­ν•œ μ½˜ν…μΈ λ₯Ό 화면에 좜λ ₯ν•˜λŠ” 역할이닀.
- HTML, CSS 등을 νŒŒμ‹±ν•˜μ—¬ μ΅œμ’…μ μœΌλ‘œ 화면에 κ·Έλ¦°λ‹€.
Networking- HTTP μš”μ²­μ„ ν•  수 있으며 λ„€νŠΈμ›Œν¬λ₯Ό ν˜ΈμΆœν•  수 μžˆλ‹€.
JS Engine- JavaScript μ½”λ“œλ₯Ό ν•΄μ„ν•˜κ³  μ‹€ν–‰ν•œλ‹€.
UI Backend- 기본적인 μœ„μ ―μ„ κ·Έλ¦¬λŠ” μΈν„°νŽ˜μ΄μŠ€μ΄λ‹€.
Data Storage- Local Storage, IndexedDB, μΏ ν‚€ λ“± λΈŒλΌμš°μ € λ©”λͺ¨λ¦¬λ₯Ό ν™œμš©ν•˜μ—¬ μ €μž₯ν•˜λŠ” μ˜μ—­μ΄λ‹€.

λ Œλ”λ§ μ—”μ§„μ˜ λ™μž‘ 원리


이λ₯Ό 크게 λ‘κ°€μ§€λ‘œ μš”μ•½ν•˜μžλ©΄ λ‹€μŒκ³Ό κ°™λ‹€.

  • HTML, CSS, JS, 이미지 λ“± μ›Ή νŽ˜μ΄μ§€μ— ν¬ν•¨λœ λͺ¨λ“  μš”μ†Œλ“€μ„ 화면에 보여쀀닀.
  • μ—…λ°μ΄νŠΈκ°€ ν•„μš”ν•  λ•Œ 효율적으둜 λ Œλ”λ§ν•  수 μžˆλ„λ‘ 자료ꡬ쑰λ₯Ό μƒμ„±ν•œλ‹€.

1. DOM 트리 ꡬ좕

  1. λΈŒλΌμš°μ €λŠ” μ„œλ²„λ‘œλΆ€ν„° HTML λ¬Έμ„œλ₯Ό λͺ¨λ‘ 전달 λ°›λŠ”λ‹€.
  2. νŒŒμ‹± 트리λ₯Ό 기반으둜 DOM μš”μ†Œμ™€ 속성 λ…Έλ“œλ₯Ό κ°€μ§€λŠ” DOM 트리λ₯Ό μƒμ„±ν•œλ‹€.
  • μ–΄νœ˜μ™€ ꡬ문을 λΆ„μ„ν•˜μ—¬ HTML λ¬Έμ„œλ₯Ό νŒŒμ‹±ν•˜κ³ , νŒŒμ‹± 트리λ₯Ό μƒμ„±ν•œλ‹€. λ¬Έμ„œ νŒŒμ‹±μ€ λΈŒλΌμš°μ €κ°€ μ½”λ“œλ₯Ό μ΄ν•΄ν•˜κ³  μ‚¬μš©ν•  수 μžˆλŠ” ꡬ쑰둜 λ³€ν™˜ν•˜λŠ” 것을 μ˜λ―Έν•œλ‹€.

    νŒŒμ‹±(ꡬ문 뢄석)은 ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μ˜ 문법에 맞게 μž‘μ„±λœ ν…μŠ€νŠΈ λ¬Έμ„œλ₯Ό 읽어 λ“€μ—¬ μ‹€ν–‰ν•˜κΈ° μœ„ν•΄ ν…μŠ€νŠΈ λ¬Έμ„œμ˜ λ¬Έμžμ—΄μ„ ν† ν°μœΌλ‘œ λΆ„ν•΄ν•˜κ³ , 토큰에 문법적 μ˜λ―Έμ™€ ꡬ쑰λ₯Ό λ°˜μ˜ν•˜μ—¬ 트리 ꡬ쑰의 자료ꡬ쑰인 파슀 트리λ₯Ό μƒμ„±ν•˜λŠ” 일련의 과정을 λ§ν•œλ‹€.

2. CSSOM(CSS Object Model) 생성

CSS νŒŒμ‹±

  • 1οΈβƒ£μ˜Β DOM을 생성할 λ•Œ 거쳀던 과정을 κ·ΈλŒ€λ‘œ CSS에 λ°˜λ³΅ν•œλ‹€.
  • κ·Έ 결과둜 λΈŒλΌμš°μ €κ°€ μ΄ν•΄ν•˜κ³  μ²˜λ¦¬ν•  수 μžˆλŠ” ν˜•μ‹μœΌλ‘œ λ³€ν™˜λœλ‹€.

3. λ Œλ” 트리(DOM + CSSOM) 생성

  • DOM νŠΈλ¦¬μ™€ CSSOM 트리λ₯Ό 합쳐 λ Œλ” 트리(Render Tree)λ₯Ό κ΅¬μΆ•ν•œλ‹€. λ Œλ” νŠΈλ¦¬λŠ” 화면에 ν‘œμ‹œλ˜μ–΄μ•Ό ν•  λͺ¨λ“  λ…Έλ“œμ˜ 컨텐츠, μŠ€νƒ€μΌ 정보λ₯Ό ν¬ν•¨ν•˜κ³  μžˆλŠ” νŠΈλ¦¬μ΄λ‹€.
    • DOM 트리의 μ΅œμƒλ‹¨μΈ document 객체뢀터 각 λ…Έλ“œλ₯Ό μˆœνšŒν•˜λ©΄μ„œ 각각에 λ§žλŠ” CSSOM을 μ°Ύμ•„μ„œ κ·œμΉ™μ„ μ μš©ν•œλ‹€. κ·ΈλŸ¬λ©΄μ„œ λ Œλ”μ™€ κ΄€λ ¨λœ μš”μ†Œλ“€μ„ λ Œλ” νŠΈλ¦¬μ— ν¬ν•¨μ‹œν‚¨λ‹€.
    • μ΄λ•Œ, meta νƒœκ·Έλ‚˜ display: none; 속성을 κ°€μ§„ μš”μ†Œλ“€μ€ λ Œλ”μ™€ 관계가 μ—†κΈ° λ•Œλ¬Έμ— λ Œλ” νŠΈλ¦¬μ— ν¬ν•¨λ˜μ§€ μ•ŠλŠ”λ‹€.

4. Layout(λ¦¬ν”Œλ‘œμš°)

  • 뷰포트 λ‚΄μ—μ„œ μš”μ†Œλ“€μ˜ μ •ν™•ν•œ μœ„μΉ˜μ™€ 크기λ₯Ό κ³„μ‚°ν•˜λŠ” κ³Όμ •.
  • Display 속성에 λ”°λΌμ„œ ν…μŠ€νŠΈλ‚˜ μš”μ†Œμ˜ λ°•μŠ€κ°€ ν™”λ©΄μ—μ„œ μ°¨μ§€ν•˜λŠ” μ˜μ—­μ΄λ‚˜ μ—¬λ°±, 그리고 μ΄μ™Έμ˜ μŠ€νƒ€μΌ 속성이 κ³„μ‚°λœλ‹€. 이 λ•Œ, CSSμ—μ„œ %λ‚˜ em 같은 μƒλŒ€μ μΈ λ‹¨μœ„λ₯Ό μ‚¬μš©ν–ˆμ„ λ•Œμ—λŠ” λ·°ν¬νŠΈμ— λ§žμΆ°μ„œ ν”½μ…€ λ‹¨μœ„λ‘œ λ³€ν™˜λœλ‹€.
  • λ ˆμ΄μ•„μ›ƒμ€ μ‚¬μš©μžμ˜ μ–΄λ– ν•œ μ•‘μ…˜μ΄λ‚˜ μ΄λ²€νŠΈμ— μ˜ν•΄ DOM μš”μ†Œμ˜ ν¬κΈ°λ‚˜ μœ„μΉ˜ 등을 λ³€κ²½ν•˜λ©΄ ν•΄λ‹Ή λ…Έλ“œμ˜ ν•˜μœ„ λ…Έλ“œμ™€ μƒμœ„ λ…Έλ“œλ“€μ„ ν¬ν•¨ν•˜μ—¬ λ ˆμ΄μ•„μ›ƒ 단계λ₯Ό λ‹€μ‹œ μˆ˜ν–‰(λ¦¬ν”Œλ‘œμš°)ν•˜κ²Œ λœλ‹€.

βœ…Β λ¦¬ν”Œλ‘œμš° λ°œμƒ μ‹œμ 

  1. DOM λ…Έλ“œμ˜ λ³€κ²½: μΆ”κ°€, 제거, μ—…λ°μ΄νŠΈ
  2. DOM λ…Έλ“œμ˜ λ…ΈμΆœ 속성을 ν†΅ν•œ λ³€κ²½: display: none은 λ¦¬ν”Œλ‘œμš°μ™€ 리페인트λ₯Ό λ°œμƒμ‹œν‚€μ§€λ§Œ, λΉ„μŠ·ν•œ 속성인 visibility: hidden은 μš”μ†Œκ°€ μ°¨μ§€ν•œ μ˜μ—­μ„ μœ μ§€ν•΄ λ ˆμ΄μ•„μ›ƒμ— 영ν–₯을 μ£Όμ§€ μ•ŠμœΌλ―€λ‘œ 리페인트만 λ°œμƒμ‹œν‚¨λ‹€.
  3. 슀크립트 μ• λ‹ˆλ©”μ΄μ…˜: μ• λ‹ˆλ©”μ΄μ…˜μ€ DOM λ…Έλ“œμ˜ 이동과 μŠ€νƒ€μΌ 변경이 짧은 μ‹œκ°„ 내에 μˆ˜μ°¨λ‘€ λ°˜λ³΅ν•΄ λ°œμƒλ˜λŠ” μž‘μ—…μ΄λ‹€.
  4. μŠ€νƒ€μΌ: μƒˆλ‘œμš΄ μŠ€νƒ€μΌμ‹œνŠΈμ˜ μΆ”κ°€ 등을 ν†΅ν•œ μŠ€νƒ€μΌ 정보 λ³€κ²½ λ˜λŠ” κΈ°μ‘΄ μŠ€νƒ€μΌ κ·œμΉ™μ˜ λ³€κ²½
  5. μ‚¬μš©μžμ˜ μ•‘μ…˜: λΈŒλΌμš°μ € 크기 λ³€κ²½, κΈ€κΌ΄ 크기 λ³€κ²½ λ“±
β†’ λ³€κ²½ν•˜λ €λŠ” νŠΉμ • μš”μ†Œμ˜ μœ„μΉ˜μ™€ 크기뿐만 μ•„λ‹ˆλΌ μ—°κ΄€λœ μš”μ†Œλ“€μ˜ μœ„μΉ˜μ™€ 크기도 μž¬κ³„μ‚°ν•˜μ—¬ 영ν–₯을 μ£ΌκΈ° λ•Œλ¬Έμ— λΈŒλΌμš°μ €μ˜ μ„±λŠ₯을 μ €ν•˜μ‹œν‚€λŠ” μš”μΈμ΄ 될 수 μžˆλ‹€. (κ³„μ‚°λŸ‰ high β†’ λΉ„μš©μ΄ 큰 μž‘μ—…)

β—οΈλ¦¬ν”Œλ‘œμš°λ₯Ό λ°œμƒμ‹œν‚€λŠ” 속성(λ ˆμ΄μ•„μ›ƒμ— 영ν–₯을 μ£ΌλŠ” 속성듀)

position / width / height / margin / padding / display / top / left / right / bottom / box-sizing / border-color / text-align / border / border-width / font-family / float / font-size / font-weight / line-height / vertical-align / white-space / word-wrap / text-overflow / text-shadow ...

5. Paint

μœ„μ— Layout κ³Όμ •μ—μ„œ λ Œλ”λ§ 엔진이 각 μš”μ†Œλ“€μ΄ μ–΄λ–»κ²Œ 생겼고 이λ₯Ό μ–΄λ–»κ²Œ 보여쀄 μ§€ μ•Œκ²Œ λœλ‹€λ©΄ λ§ˆμ§€λ§‰μœΌλ‘œ 화면에 μ‹€μ œ ν”½μ…€λ‘œ 그렀지도둝 λ³€ν™˜ν•˜λŠ” 과정을 κ±°μΉ˜λŠ”λ°, 이것이 λ°”λ‘œ Paint 과정이고,

계산이 λ³€κ²½λœ μš”μ†Œλ₯Ό 화면에 λ‹€μ‹œ κ·Έλ €μ£ΌλŠ” μž‘μ—…μ„ 리페인트라고 ν•œλ‹€.

βœ…Β λ¦¬νŽ˜μΈνŠΈ λ°œμƒ μ‹œμ 

  1. λ¦¬ν”Œλ‘œμš°κ°€ λ°œμƒν–ˆμ„ λ•Œ
  2. μš”μ†Œμ˜ μŠ€νƒ€μΌ(색상, 배경색 λ“±)이 λ³€κ²½λ˜μ—ˆμ„ λ•Œ
  3. visibility: hidden ↔ visible둜 λ³€κ²½λ˜μ—ˆμ„ λ•Œ

β—οΈλ¦¬νŽ˜μΈνŠΈλ₯Ό λ°œμƒμ‹œν‚€λŠ” 속성(λ ˆμ΄μ•„μ›ƒμ— 영ν–₯을 μ£Όμ§€ μ•ŠλŠ” 속성듀)

color / border-style / visibility / background / background-color / background-image / background-position / background-repeat / background-size / text-decoration / outline / outline-style / outline-color / outline-width / border-radius / box-shadow ...

profile
노원거인

0개의 λŒ“κΈ€