더듬이의 헬로월드

Hello, World!

컴퓨터 공학 기초 지식/웹

웹 브라우저의 동작 원리 및 브라우저의 렌더링 과정

더듬이 2024. 11. 29. 13:27
728x90

Made by GPT.....

레퍼런스

https://www.youtube.com/watch?v=FQHNg9gCWpg

https://youtu.be/z1Jj7Xg-TkU?si=ayDJy4iWGqkKnPrP


1. URL 입력

사용자가 브라우저의 주소창에 www.naver.com과 같은 URL을 입력하면, 브라우저는 이를 기반으로 서버와 통신하기 위해 준비를 시작합니다.


2. DNS 요청 및 IP 주소 확인

  1. 브라우저는 DNS 서버에 해당 도메인 이름(www.naver.com)에 대한 IP 주소를 요청합니다.
  2. DNS 서버는 요청에 응답하여 IP 주소(예: 223.130.195.200)를 반환합니다.

3. TCP 연결 (3-Way Handshake)

브라우저는 서버와 데이터 전송을 위해 안정적인 연결을 설정합니다.
TCP 3-Way Handshake는 다음 단계

SYN (Synchronization)

  • 클라이언트(브라우저)가 서버에 연결을 요청합니다.
  • 클라이언트는 시퀀스 번호를 생성하고 이를 포함한 SYN 패킷을 서버로 보냅니다.
    • 시퀀스 번호는 데이터를 주고받을 때 패킷의 순서를 추적하기 위한 고유 번호입니다.
예: 클라이언트가 랜덤한 시퀀스 번호 1000을 생성합니다.
SYN-ACK (Synchronization + Acknowledgment)

  • 서버가 클라이언트의 요청을 수락하고 응답합니다.
  • 서버는 클라이언트의 시퀀스 번호+1을 확인 응답 번호로 보냅니다.
    • (1000 + 1 = 1001, 이 숫자는 클라이언트의 요청을 제대로 받았다는 것을 의미)
동시에 서버 자신만의 랜덤한 시퀀스 번호(예: 2000)를 생성하여 클라이언트에게 보냅니다.
ACK (Acknowledgment)

  • 클라이언트가 서버의 응답을 확인하고 다시 응답을 보냅니다.
  • 클라이언트는 서버의 시퀀스 번호+1을 ACK 번호로 설정하여 서버에게 전송합니다.
    • (2000 + 1 = 2001)
  • 이로써 양쪽 모두 연결이 성공적으로 설정

 

4. HTTP 요청 및 응답

브라우저는 서버에 필요한 데이터를 요청하는 HTTP Request를 보냅니다.
서버는 HTML, CSS, JavaScript, 이미지 등 필요한 리소스를 포함한 HTTP Response를 반환합니다.

이 과정에서 데이터는 8비트 형태의 바이트 스트림으로 전달됩니다.
브라우저는 이 바이트 스트림을 문자로 변환한 뒤, 이를 가지고 있는 토큰과 비교하여 HTML 코드인지 확인합니다.토큰은 브라우저가 이해할 수 있도록 미리 정의된 구문 분석 단위입니다.
브라우저는 HTML, CSS, JavaScript 등의 언어에서 사용하는 키워드, 태그, 속성 등을 토큰으로 저장하고 있으며, 이를 통해 받은 데이터를 해석하고 렌더링 과정을 시작합니다.
예를 들어, <html>, <body>, <div>와 같은 태그, 속성, 그리고 JavaScript의 키워드인 function, var 등은 모두 토큰으로 간주됩니다.

  1. 브라우저가 HTTP Request를 서버로 전송합니다.
  2. 서버는 HTTP Response로 리소스를 반환합니다.
  3. 받은 데이터는 8비트 바이트 스트림으로 전달됩니다.
  4. 브라우저는 바이트 스트림을 문자로 변환합니다.
  5. 변환된 문자를 토큰과 비교하여 HTML, CSS, JavaScript 등의 코드로 해석합니다.
  6. 해석된 코드로 DOM(Document Object Model)을 구성하고, 최종적으로 화면에 렌더링합니다.

5. 데이터 처리 및 화면 출력

서버에서 데이터를 받은 브라우저는 화면에 웹 페이지를 출력하기 위해 여러 단계를 거칩니다. 이 과정은 크게 ConstructionOperation으로 나뉩니다.


6. Construction 단계

6.1 HTML 파싱 및 DOM 트리 생성

  • HTML 파일을 읽고, 이를 기반으로 DOM(Document Object Model) 트리를 생성합니다.
  • DOM 트리는 HTML 문서의 계층 구조를 나타냅니다.

6.2 CSS 파싱 및 CSSOM 트리 생성

  • HTML 파싱 도중 CSS를 만나면, CSS를 파싱하여 CSSOM(CSS Object Model) 트리를 생성합니다.
  • CSSOM 트리는 스타일 정보를 포함하며, DOM 생성을 일시 중지합니다

6.3 JavaScript 처리

  • HTML 파싱 도중 <script> 태그를 만나면 브라우저는 JavaScript 엔진에게 제어를 넘깁니다.
  • JavaScript 엔진은 코드를 분석하여 AST(Abstract Syntax Tree)를 생성하고, DOM이나 CSSOM을 수정할 수 있습니다.
  • JavaScript 실행 후 HTML 파싱이 재개됩니다.

6.4 Render 트리 생성

  • 브라우저는 DOM 트리CSSOM 트리를 결합하여 Render 트리를 생성합니다.
  • Render 트리는 화면에 표시할 요소와 스타일을 포함합니다.

7. Operation 단계

7.1 Layout / Reflow (배치)

  • Render 트리의 각 노드를 화면의 적절한 위치에 배치합니다.
  • 화면 공간을 계산하고 요소를 배치하는 작업이 진행됩니다.

7.2 Paint / RePaint(그리기)

  • UI 백엔드가 Render 트리를 기반으로 텍스트, 이미지, 배경 등을 실제 화면에 그립니다.

7.3 Composition (합성)

  • 요소를 여러 레이어로 나누어 구성하고, 이를 적절한 순서로 합성하여 화면에 표시합니다.
  • Z-index 값 등을 활용해 레이어의 순서를 결정합니다

8. 브라우저의 점진적 렌더링

브라우저는 데이터를 모두 다운로드한 뒤 화면에 출력하지 않습니다.
서버에서 일부 데이터를 받을 때마다 바로 화면에 표시하여 사용자에게 더 빠른 경험을 제공합니다.
이로 인해 웹 페이지는 한 번에 로딩되지 않고, 점진적으로 화면에 출력됩니다.


렌더링 엔진과 JavaScript 엔진

렌더링 엔진 (Rendering Engine)

  • 역할: HTML, CSS, JavaScript 등을 파싱하고, 사용자가 볼 수 있는 화면으로 변환.
  • 주요 렌더링 엔진:
    • 크롬: Blink
    • 사파리: WebKit
    • 파이어폭스: Gecko

JavaScript 엔진

  • 역할: JavaScript 코드를 실행하고, DOM 및 CSSOM을 조작하여 동적이고 인터랙티브한 웹 페이지를 구현.
  • 주요 JavaScript 엔진:
    • 크롬: V8
    • 사파리: JavaScriptCore
    • 파이어폭스: SpiderMonkey
728x90