지식

[지식] 브라우저 동작 원리

로돌씨 2024. 3. 19. 19:48

Browser 특징

  • 브라우저의 주요 기능은 사용자가 참조하고 싶은 웹페이지를 서버에 요청,  서버의 응답을 받아 브라우저에 표시하는것
  • ex) 크롬 , 사파리 , 파이어폭스 , 인터넷 익스플로러 등
  • URI(Uniform Resource Identifier) 를 통해 서버에 응답 요청

웹 브라우저와 웹 서버

  • url을 주소창에 치고나면 페이지가 이동하고 웹브라우저가 이동한 웹서버에 웹페이지 요청을 하면 웹페이지가 응답을 함
  • 서버가 브라우저에게 전달한 응답인 HTML문서를 브라우저는 읽어들이고 해석한 후 사용자(Client) 에게 보여주고 HTML 및 CSS를 해석하는 구체적인 내용들은 모두 W3C, World Side Web Consortium 에 의해 관리되고 유지됨

1.  보이지 않는 곳의 통신을 이해할 수 있다.
1-1 URL과 URI의 차이를 이해할 수 있음
1-2 IP 주소와 PORT에 대해 이해할 수 있음
1-3 DNS와 IP 주소의 관계를 설명할 수 있음
1-4 크롬 브라우저의 에러 메시지를 통해 문제를 파악할 수 있음

 

2.보이는 곳의 통신을 이해할 수 있다.

2-1 AJAX의 개념을 이해할 수 있음

2-2 SSR과 CSR의 차이를 이해할 수 있음

2-3 CORS의 개념을 이해할 수 있음

 

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

  • 유저 인터페이스(UI): 주소창, 뒤로 앞으로 버튼 등
  • 브라우저 엔진: UI와 렌더링 엔진 사이에서 중간매체 역할 수행
  • 렌더링 엔진: 웹서버로부터 응답 받은 내용을 UI상에 나타내줌
  • UI 백엔드 : 웹서버와 통신이 가능하게하는 네트워크 ,UI 구동이 가능하게 해줌
  • 자바스크립트 인터프리터:자바스크립트 코드를 파싱 후 실행
  • 데이터 스토리지: 쿠키와같은 로컬데이터를 저장

렌더링엔진:

  • 사용자가 요청해서 웹서버가 응답한 HTML 문서를 HTML과 CSS로 파싱해서 화면을 구성시킴
  • 여러개의 인스턴트 한번에 구동 가능 ex) IE -> Trident / FireFox -> Gecko / Safari -> Webkit

렌더링 엔진 작동방식

 

렌더링 엔진은 웹서버로부터 전달받은 HTML 문서를 맨 처음 네트워크 레이어에서 불러옵니다. 

기본적으로 아래와 같은 기본적인 Flow 를 거칩니다.

HTML 파싱 후 DOM 트리 만들기  >  랜더 트리(Render Tree) 만들기  >  렌더 트리(Render Tree) 레이아웃 만들기  >  렌더 트리 페인팅 (Renter Tree Painting)

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

<html>
 <body>
 	<p>돔 트리</p>
 </body>
</html>
  • 렌더링 엔진은 우선 네트워크 레이어를 통해 전달받은 HTML 문서 (Source code)를 파싱하여 각 요소들을 DOM Tree 의 각 DOM 노드들로 전환함. 
  • DOM은 Document Object Model의 준말로 마크업 형태의 HTML 문서를 오브젝트 모델의 형태로 바꾸어 놓은것임

 

2.렌더트리 만들기

  • HTML 문서들을 파싱하여 DOM Tree를 구성한 후, 렌더링 엔진은 CSS/Style 데이터를 파싱하고 그 스타일 데이터들로 렌더 트리(Render Tree)를 만듭니다.
  • DOM 트리(DOM Tree)가 웹 상에 나타날 내용(Contents)를 구성한다면 렌더 트리(Render Tree)는 시각적 요소, 어떻게 나타날지 그 스타일을 지정하는데 렌더 트리는 색상, 차원 등 시각적 지침들을 담은 정사각형들로 구성되고 그 정사각형들은 스크린에 맞는 순서대로 정렬하게 됩니다.
  • 렌더 트리(Render Tree) 각각의 정사각형에 해당하는 렌더러 들은 DOM 트리 요소들에 적용되지만 1:1 관계가 성립되는 것은 아닙니다. 
  • 즉 시각적이지 않은 DOM 요소들은 렌더 트리(Render Tree)에 삽입될 수 없습니다. 예를 들어 <head> 태그 안의 요소들은 화면에 나타나는 값들을 포함하지 않습니다.
  • 따라서 어떤 Renderer 적용될 없으며, 어떤 렌더러들은 DOM 노드에 적용될 있으나 트리의 같은 위계에 속할 필요는 없습니다.

 

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

  • 레이아웃을 만든다는 것은 각 노드들에게 스크린의 어느 공간에 위치해야 할지 각각의 값(Positionm, Size)을 부여하는 것을 의미합니다.

 

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

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

 

정리😀

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

 

 

1. 브라우저가 HTML을 받아서 어휘와 구문을 분석해 파싱 트리를 만들고

 

2. 이 파싱 트리를 기반으로 DOM요소와 노드속성을 가지는 DOM 트리를 생성하고 CSS도 마찬가지로 반복하여 CSSOM을 생성합니다

 

3. 이 DOM트리가 만들어지는 동안 브라우저는 DOM트리를 기반으로 렌더트리를 생성하고

 

4. 아직 위치와 크기가 정해지지않은  렌더트리를  노드의 화면에 그리면 화면에 콘텐츠가 표현됩니다