CS

브라우저의 작동 원리

땅지원 2021. 12. 27. 21:30

   

웹브라우저가 웹서버에 웹페이지 요청을 하면 웹서버는 웹페이지 응답을 한다.

즉, 서버가 브라우저에게 HTML문서를 전달하고 브라우저는 이를 읽고 해석한 후 Client에게 보여준다.

HTML 및 CSS를 해석하는 구체적인 내용들은 모두 W3C(World Side Web Consortium)에 의해 관리된다.

 

지난 몇년간 브라우저들은 각자 이러한 구체적 규정들의 일부만 충족하며 각 브라우저별 확장 기능을 개발해 왔다. 브라우저별 호환성 이슈가 발생할 수 밖에 없는 구조.

 

웹 브라우저의 구조와 렌더링 엔진

User Interface : 주소창, 뒤로/앞으로 버튼 등을 포함한 화면

Browser Engine : UI와 Rendering Engine 사이에서 중간 매체 역할을 수행

Rendering Engine : 웹서버로부터 응답 받은 내용을 UI 상에 나타냄

Networking : 웹 서버와 통신이 가능하게 함

Javascript Interpreter : 자바스크립트 코드를 파싱하고 실행

UI Backend : UI 구동이 가능하게 함

Data Persistence(Data Storage) : 쿠키와 같은 로컬 데이터를 저장

 

렌더링 엔진

- 사용자가 요청해서 웹서버가 응답한 HTML 문서를 HTML과 CSS로 파싱해서 화면을 구성

** 파싱 : 어떤 페이지(문서, HTML 등)에서 내가 원하는 데이터를 특정 패턴이나 순서로 추출해 가공하는 것

- 렌더링 엔진은 여러 개의 인스턴트를 한 번에 구동할 수 있다.

- IE(Internet Explorer) : Trident

  FireFox : Gecko

  Safari : Webkit

  chrome, opera : Webkit의 일종인 Blink

- Webkit은 오픈소스 렌더링 엔진으로 원래 리눅스 플랫폼에 사용되었다.

 

 

렌더링 엔진 동작 방식

렌더링 엔진은 웹서버로부터 전달받은 HTML 문서를 맨 처음 네트워크 레이어에서 불러온 후 아래와 같은 FLOW를 거친다.

1. HTML 파싱 후 DOM 트리 만들기

2. 렌더 트리(Render Tree) 만들기

3. 렌더 트리(Render Tree) 레이아웃 만들기

4. 렌더 트리 페인팅(Render Tree Painting)

 

HTML 파싱 후 DOM 트리 만들기

렌더링 엔진은 우선 네트워크 레이어를 통해 전달받은 HTML 문서를 파싱하여 각 요소들을 DOM Tree의

각 DOM 노드들로 전환한다. 

** DOM(Document Object Model) : 마크업 형태의 HTML 문서를 오브젝트 모델의 형태로 바꿔놓은 것

<html>
    <body>
        <p>Hello world</p>
        <div><img src="example.png"></div>
    </body>
</html>

HTML 코드를 DOM Tree로 전환

HTML, body 부모 태그 안에 단락을 나타내는 <p>, 한 요소를 나타내는 <div> 태그가 자식 태그로 존재

 

렌더 트리(Render Tree) 만들기

HTML 문서들을 파싱하여 DOM Tree를 구성한 후,

렌더링 엔진은 CSS/STYLE 데이터를 파싱하고 그 스타일 데이터들로 렌더 트리(Render Tree)를 만든다.

DOM Tree가 웹 상에 나타날 내용을 구성한다면 렌더 트리는 시각적 요소, 어떻게 나타날지 스타일 지정함

렌더 트리 각각의 정사각형에 해당하는 Renderer들은 DOM Tree 요소들에 적용되지만 1:1관계가 성립되는 것은 아니다. 또한 시각적이지 않은 DOM 요소들은 렌더 트리에 삽입될 수 없다(ex.<head>태그)

 

렌더 트리(Render Tree) 레이아웃 만들기

레이아웃을 만든다는 것은 각 노드들에게 스크린의 어느 공간에 위치해야 할지 각각의 값을 부여하는 것

 

 

렌더 트리 페인팅(Render Tree Painting)

렌더 트리가 만들어져 레이아웃이 구성되었다면, UI 백앤드가 동작하여 각 노드들을 정해진 스타일 및 위치값대로 화면에 배치한다.

 

더 나은 UX를 위해, 렌더링 엔진은 각 콘텐츠를 가능한한 빨리 스크린에 띄워야하기 때문에 모든 HTML 요소들을 렌더링 엔진으로 넣어서 한번에 출력하는 것이 아닌, 일부 콘턴츠는 먼저 트리 과정을 거쳐 스크린에 나타나고, 그 와중에 웹의 다른 요소들은 네트워크를 통해 렌더링 엔진으로 읽어들어 오는 순차적인 방식으로 입출력 진행

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

참고 : https://it-ist.tistory.com/110