🌎 λΈŒλΌμš°μ € λ Œλ”λ§ κ³Όμ •

Lee JooamΒ·2022λ…„ 5μ›” 1일
0

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

좜처: https://d2.naver.com/helloworld/59361

인터넷은 κΈ€λ‘œλ²Œν•˜κ²Œ μ—°κ²°λ˜μ–΄ μžˆλ‹€. 그리고 λΈŒλΌμš°μ €λŠ” κ·Έ 인터넷 λ‚΄μ—μ„œ λ‹€μ–‘ν•œ 정보듀을 μ—΄μ–΄λ³Ό 수 있게 λ„μ™€μ£ΌλŠ” 도ꡬ이닀.

BrowserλΌλŠ” 이름(browse: 검색)에 걸맞게 HTML, 이미지, λ™μ˜μƒ λ“± λ‹€μ–‘ν•œ 자료λ₯Ό μ‚¬μš©μžμ—κ²Œ 좜λ ₯ν•΄μ£ΌλŠ” ν•„μˆ˜μ μΈ μ†Œν”„νŠΈμ›¨μ–΄λ‹€. λΈŒλΌμš°μ €λŠ” λ‹¨μˆœνžˆ 좜λ ₯ 뿐만 μ•„λ‹ˆλΌ μ—¬λŸ¬ νŽΈλ¦¬ν•œ κΈ°λŠ₯ λ˜ν•œ μ œκ³΅ν•œλ‹€.

즐겨찾기, 캐싱, μ›Ή μŠ€ν† λ¦¬μ§€, λ³΄μ•ˆ 제곡 λ“± 일반 μ‚¬μš©μžλ“€μ˜ 눈이 닿지 μ•ŠλŠ” κ³³μ—μ„œ νŽΈμ˜μ„±μ„ μœ„ν•΄ λ‹€μ–‘ν•œ μž‘μ—…μ„ ν•œλ‹€.

μ•„λ§ˆ 전세계인듀이 κ°€μž₯ 많이 μ΄μš©ν•˜λŠ” μ†Œν”„νŠΈμ›¨μ–΄λΌλ©΄ λΈŒλΌμš°μ €λ₯Ό 꼽을 수 μžˆμ„ 것 κ°™λ‹€.

λΈŒλΌμš°μ €μ˜ ꡬ성은 μœ„μ˜ κ·Έλ¦Όκ³Ό κ°™λ‹€.

  1. μ‚¬μš©μž μΈν„°νŽ˜μ΄μŠ€
    μ‚¬μš©μž μΈν„°νŽ˜μ΄μŠ€λŠ” 직관적이닀. λ’€λ‘œκ°€κΈ°, URLμž…λ ₯ μ°½, 즐겨찾기 λ“± μ‚¬μš©μžκ°€ λΈŒλΌμš°μ €μ— 내릴 수 μžˆλŠ” λͺ…령을 μΈν„°νŽ˜μ΄μŠ€ ν˜•νƒœλ‘œ λ‚˜νƒ€λ‚Έλ‹€.
  2. λΈŒλΌμš°μ € 엔진
    λΈŒλΌμš°μ € 엔진은 μ‚¬μš©μž μΈν„°νŽ˜μ΄μŠ€μ—μ„œ 받은 λͺ…λ Ήκ³Ό λ Œλ”λ§ 엔진 μ‚¬μ΄μ˜ λ™μž‘μ„ μ œμ–΄ν•œλ‹€.
  3. λ Œλ”λ§ 엔진
    HTML, CSS 파일 등을 νŒŒμ‹±ν•˜κ³  화면에 κ·Έλ¦¬λŠ” 역할을 ν•œλ‹€.
  4. UI λ°±μ—”λ“œ
    μ°½, 콀보 λ°•μŠ€ λ“± 일반적인 μΈν„°νŽ˜μ΄μŠ€λ₯Ό λ‹΄λ‹Ήν•œλ‹€.
  5. 톡신
    HTTP μš”μ²­ λ“± μ™ΈλΆ€ λ¦¬μ†ŒμŠ€μ˜ μš”μ²­, 전솑을 μ²˜λ¦¬ν•œλ‹€.
  6. μžλ°”μŠ€ν¬λ¦½νŠΈ 해석기
    μžλ°”μŠ€ν¬λ¦½νŠΈ μ½”λ“œλ₯Ό ν•΄μ„ν•˜κ³  μ‹€ν–‰ν•œλ‹€.
  7. 자료 μ €μž₯μ†Œ
    μ›Ή μŠ€ν† λ¦¬μ§€, μΏ ν‚€ 등을 μ €μž₯ν•œλ‹€.

이 ν¬μŠ€νŠΈμ—μ„œλŠ” λΈŒλΌμš°μ €μ˜ ꡬ성 μš”μ†Œ 쀑 λ Œλ”λ§ μ—”μ§„μ—μ„œ μ–΄λ–»κ²Œ λ Œλ”λ§μ΄ μ΄λ£¨μ–΄μ§€λŠ”μ§€ κ°„λž΅ν•˜κ²Œ μ•Œμ•„λ³΄κ² λ‹€. 🚍

🧭 λ Œλ”λ§ 엔진 κΈ°λ³Έ 흐름


좜처: How Browsers Work: Behind the scenes of modern web browsers

λ Œλ”λ§ μ—”μ§„μ˜ 큰 흐름은 λ‹€μŒκ³Ό κ°™λ‹€.

  1. HTML νŒŒμ‹±μ„ 톡해 DOM 트리 생성, CSS 파일 λ‹€μš΄λ‘œλ“œ ν›„ μŠ€νƒ€μΌ μš”μ†Œ νŒŒμ‹±(CSSOM 생성)
  2. DOM νŠΈλ¦¬μ™€ CSSOM을 기반으둜 λ Œλ” 트리 ꡬ성
  3. λ Œλ” 트리 μš”μ†Œ(λ Œλ”λŸ¬)의 크기, 배치, μœ„μΉ˜ 계산(λ ˆμ΄μ•„μ›ƒ, λ¦¬ν”Œλ‘œμš°)
  4. 화면에 ν‘œμ‹œ(νŽ˜μΈνŒ…)

이 κ³Όμ •μ—μ„œ DOM 트리의 ꡬ좕, μŠ€νƒ€μΌ μš”μ†Œ νŒŒμ‹±, λ Œλ” 트리 ꡬ좕은 μ μ§„μ μœΌλ‘œ 이루어진닀.

λ Œλ”λ§ 엔진은 더 λ‚˜μ€ μ‚¬μš©μž κ²½ν—˜μ„ μœ„ν•΄ μ–΄λŠ ν•˜λ‚˜κ°€ μ™„λ£Œλ  λ•ŒκΉŒμ§€ 기닀리지 μ•Šκ³  κ°€λŠ₯ν•œ ν•œ 빨리 화면에 ν‘œμ‹œν•˜λ €κ³  ν•œλ‹€.

🧭 λ Œλ” νŠΈλ¦¬μ™€ DOM 트리

λ Œλ” νŠΈλ¦¬μ™€ DOM νŠΈλ¦¬λŠ” 1λŒ€1 λŒ€μ‘μΈ κ²ƒμ²˜λŸΌ λŠκ»΄μ§„λ‹€. ν•˜μ§€λ§Œ 싀상은 그렇지 μ•Šλ‹€.

DOM 트리 쀑 λΉ„μ‹œκ°μ  μš”μ†ŒλŠ” λ Œλ” νŠΈλ¦¬μ— λ°˜μ˜λ˜μ§€ μ•ŠλŠ”λ°, headνƒœκ·Έ, display none 속성이 적용된 μš”μ†Œ 등이 μžˆλ‹€.

μ΄λ•Œ display none인 속성에 transition을 μ μš©ν•  λ•Œ μ£Όμ˜ν•΄μ•Ό ν•˜λŠ”λ°, transition은 이전과 이후 μƒνƒœλ₯Ό λΉ„κ΅ν•˜λ©΄μ„œ μž‘λ™ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€.

display none인 μš”μ†ŒλŠ” λ Œλ”λ§ νŠΈλ¦¬μ— μ˜¬λΌμ˜€μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— 비ꡐ가 λΆˆκ°€λŠ₯ν•˜κ²Œ λœλ‹€.

🧭 슀크립트 파일

HTML 파일과 CSS 파일의 νŒŒμ‹±μ€ 각각 λ…λ¦½μ μœΌλ‘œ 이루어진닀고 ν–ˆλ‹€. ν•˜μ§€λ§Œ 슀크립트 νŒŒμΌμ€ 그렇지 μ•Šλ‹€.

μ΄μœ λŠ” 슀크립트 파일이 DOM μš”μ†Œλ₯Ό λ³€κ²½μ‹œν‚¬ 수 있기 λ•Œλ¬Έμ΄λ‹€. κ·Έλ ‡κΈ° λ•Œλ¬Έμ— 슀크립트 νŒŒμΌμ„ λ‹€μš΄λ‘œλ“œ, 해석, μ‹€ν–‰ν•˜λŠ” λ„μ€‘μ—λŠ” λ¬Έμ„œμ˜ νŒŒμ‹±μ΄ μ€‘λ‹¨λœλ‹€.

μ΅œκ·Όμ—λŠ” defer μ†μ„±μ΄λ‚˜ async 속성을 톡해 싀행을 μ§€μ—°μ‹œν‚€κ±°λ‚˜ λ³„λ„μ˜ λ§₯λ½μ—μ„œ 슀크립트λ₯Ό μ‹€ν–‰μ‹œν‚¬ 수 μžˆλ‹€.

슀크립트 파일이 μ‹€ν–‰λ˜λŠ” λ™μ•ˆ λ¬Έμ„œμ˜ νŒŒμ‹±μ΄ λ©ˆμΆ˜λ‹€κ³  ν–ˆλ‹€. 이 도쀑에 슀크립트 파일이 μŠ€νƒ€μΌμ‹œνŠΈ νŒŒμΌμ„ μš”μ²­ν•˜λ©΄ μ–΄λ–»κ²Œ 될까?

λ§Œμ•½ ν•΄λ‹Ή μŠ€νƒ€μΌμ‹œνŠΈ 파일이 νŒŒμ‹±λ˜κΈ° 이전이라면 슀크립트 νŒŒμΌμ€ μ˜ˆμƒμΉ˜ μ•Šμ€ κ²°κ³Όλ₯Ό λ‚΄κ²Œ λœλ‹€.

이λ₯Ό λ°©μ§€ν•˜κΈ° μœ„ν•΄ νŒŒμ΄μ–΄ν­μŠ€λŠ” λͺ¨λ“  μŠ€νƒ€μΌ 파일이 νŒŒμ‹±λ  λ•ŒκΉŒμ§€ 슀크립트의 싀행을 μ€‘λ‹¨ν•˜κ³ , 웹킷은 λ‘œλ“œλ˜μ§€ μ•Šμ€ μŠ€νƒ€μΌ νŒŒμΌμ— 영ν–₯을 받을 수 μžˆλŠ” νŠΉμ • 속성에 μ ‘κ·Όν•˜λŠ” 슀크립트일 κ²½μš°μ—λ§Œ 싀행을 μ€‘λ‹¨ν•œλ‹€.

🧭 μ΅œμ ν™”

예츑 νŒŒμ‹±

μ›Ήν‚·κ³Ό νŒŒμ΄μ–΄ν­μŠ€λŠ” 예츑 νŒŒμ‹±μ„ μ œκ³΅ν•œλ‹€. μŠ€ν¬λ¦½νŠΈκ°€ μ‹€ν–‰λ˜λŠ” 도쀑 λ‹€λ₯Έ μŠ€λ ˆλ“œμ—μ„œ ν•„μš”ν•œ λ„€νŠΈμ›Œν¬ μžμ›μ„ λ‹€μš΄λ‘œλ“œ ν•˜κ±°λ‚˜ λ¬Έμ„œμ˜ λ‚˜λ¨Έμ§€ 뢀뢄을 νŒŒμ‹±ν•œλ‹€.

μ΄λŸ¬ν•œ 병렬적인 μž‘μ—…μ„ 톡해 전체적인 속도λ₯Ό κ°œμ„ ν•  수 μžˆλ‹€. 예츑 νŒŒμ‹±μ€ μ™ΈλΆ€ 이미지, μ™ΈλΆ€ μŠ€νƒ€μΌ μ‹œνŠΈ, μ™ΈλΆ€ μŠ€ν¬λ¦½νŠΈλ§Œμ„ νŒŒμ‹±ν•œλ‹€.

이것은 DOM 트리λ₯Ό μˆ˜μ •ν•˜μ§€ μ•ŠλŠ”λ‹€.

더티 λΉ„νŠΈ μ‹œμŠ€ν…œ

μž‘μ€ λ³€κ²½ μ‚¬ν•­μœΌλ‘œ 인해 전체적인 λ Œλ”λ§ 과정일 λ‹€μ‹œ κ±°μΉœλ‹€λ©΄ 정말 λΉ„νš¨μœ¨μ μΌ 것이닀. κ·Έλ ‡κΈ° λ•Œλ¬Έμ— λΈŒλΌμš°μ €λŠ” 더티 λΉ„νŠΈ μ‹œμŠ€ν…œμ„ μ΄μš©ν•œλ‹€.

λ³€κ²½λ˜κ±°λ‚˜ μΆ”κ°€λ˜λŠ” 사항이 μžˆλŠ” λ Œλ”λŸ¬λŠ” μžμ‹ κ³Ό μžμ‹μ—κ²Œ 더티 λΉ„νŠΈκ°€ λ§ˆν‚Ήλœλ‹€.

그리고 λΈŒλΌμš°μ €λŠ” 이것을 μ΄μš©ν•΄ μ „μ—­μ μœΌλ‘œ μš”μ†Œλ₯Ό λ°°μΉ˜ν•˜κ±°λ‚˜, ν˜Ήμ€ 점증적으둜 μš”μ†Œλ₯Ό μž¬λ°°μΉ˜ν•œλ‹€.

μ „μ—­ 배치(λ ˆμ΄μ•„μ›ƒ)λŠ” κΈ€κΌ΄ λ³€κ²½μ΄λ‚˜, ν™”λ©΄ 크기 λ³€κ²½ 같은 상황이 λ°œμƒν•  λ•Œ 전체적인 λ ˆμ΄μ•„μ›ƒμ„ μž¬κ΅¬μ„±ν•˜λŠ” μž‘μ—…μ΄λ‹€.

이와 λ°˜λŒ€λ‘œ 점증 λ°°μΉ˜λŠ” 더티 λ Œλ”λŸ¬λ“€μ„ 큐에 λ„£κ±°λ‚˜, 타이머λ₯Ό μ„€μ •ν•˜μ—¬ 일뢀뢄을 λΉ„λ™κΈ°μ μœΌλ‘œ λ‹€μ‹œ λ°°μΉ˜ν•œλ‹€. batch execution으둜 μž‘μ—…μ˜ 덩어리λ₯Ό ν•œλ²ˆμ— μ²˜λ¦¬ν•œλ‹€.

μš”μ†Œλ₯Ό 화면에 좜λ ₯ν•˜λŠ” νŽ˜μΈνŒ… κ³Όμ • λ˜ν•œ 더티 λΉ„νŠΈλ₯Ό μ΄μš©ν•΄ 점증적 ν˜Ήμ€ μ „μ—­μ μœΌλ‘œ λ°œμƒν•œλ‹€.

μ°Έκ³ 

λ²ˆμ—­λ³ΈμΈ λΈŒλΌμš°μ €λŠ” μ–΄λ–»κ²Œ λ™μž‘ν•˜λŠ”κ°€?와 원문인 How Browsers Work: Behind the scenes of modern web browsersλ₯Ό μ°Έκ³ ν–ˆλ‹€.

μœ„μ— μž‘μ„±ν•œ λ‚΄μš© 외에도 μˆ˜λ§Žμ€ λ‚΄μš©λ“€μ΄ 더 μžˆμ§€λ§Œ, λ¬Έλ§₯ κ·œμΉ™κ°™μ€ λ‚΄μš©λ“€μ€ λ„ˆλ¬΄ 심화 λ‚΄μš©μ΄λΌκ³  생각해 μƒλž΅ν–ˆλ‹€. πŸ˜₯

profile
ν”„λ‘ νŠΈμ—”λ“œ 개발자둜 κ±Έμ–΄κ°€λŠ” μ€‘μž…λ‹ˆλ‹€.

0개의 λŒ“κΈ€