ABOUT ME

Today
Yesterday
Total
  • 브라우저 동작 원리
    위코드x원티드 2021. 8. 14. 15:13

    브라우저의 주요 기능

    사용자가 입력한 URL 에 따라 Web Server 에 리소스를 요청(Request) 하고, 받아온 응답(Response) 을 브라우저 윈도우에 보여주는 것이다

     

    - 리소스는 HTML 문서, PDF, image 외 여러 타입이 될 수 있다. 리소스의 위치는 사용자가 URI 로 특정할 수 있다

    *URI (Uniform Resource Identifier) 는 하나의 리소스를 가리키는 문자열. URL 은 하위 개념으로, 웹상에서의 위치로 리소스를 식별함

    - 브라우저가 HTML 파일을 해석하고 보여주는 방법은 HTML, CSS 명세에 특정돼 있다. 이 명세는 W3C, Web 표준화 기구에 의해 정해진다

     

    브라우저의 구조

    크게 7가지 요소로 구성된다. 받아온 리소스를 해석해 화면에 보여지는 데 중요한 역할을 하는 것은 "렌더링 엔진"이다

     

    - UI: 주소창, 뒤로가기/앞으로가기 버튼, 북마크 메뉴 등등. 요청한 페이지를 보여주는 윈도우를 제외한 브라우저에서 보여지는 모든 부분들 (서로 다른 여러 브라우저의 UI 는 비슷하다)

    - 브라우저 엔진: UI 와 렌더링 엔진 사이에서 동작을 제어함

    - 렌더링 엔진: 요청한 콘텐츠를 보여줌. 예) 요청 콘텐츠가 HTML 이면, 렌더링 엔진이 HTML, CSS 를 파싱하고, 파싱한 콘텐츠를 화면에 보여줌

    - 네트워킹: HTTP 요청같은 네트워크 요청에 사용됨. 플랫폼 독립적인 인터페이스

    - UI 백엔드: 콤보박스, 윈도우 같이 기본 위젯을 그리는 데 사용됨. 플랫폼에 명시되지 않는 일반적인 인터페이스

    - JS 해석기: JS 코드를 파싱하고 실행하는 데 사용됨

    - 자료 저장소: 지속성이 있는 계층으로, 브라우저가 데이터를 로컬에 저장할 때 사용한다(예시: 쿠키). 브라우저는 또한 localStorage, IndexedDB 같은 자료 저장 매커니즘을 지원한다

     

    브라우저의 주요 구성요소 from https://d2.naver.com/helloworld/59361

    렌더링 엔진

    렌더링 엔진은 요청한 콘텐츠를 브라우저 화면에 보여준다

     

    - 기본적으로 HTML, XML 문서와 이미지를 보여줄 수 있다. 플러그인이나 확장 프로그램을 이용하면 다른 타입도 보여줄 수 있다(PDF 등등). 그러나 여기서는 CSS 로 꾸며진 HTML 과 이미지를 보여주는 주요 기능에 초점을 맞추겠다

    - 브라우저는 서로 다른 렌더링 엔진을 사용한다. IE 는 Trident, FireFox 는 Gecko, Safari 는 Webkit 엔진을 사용한다

     

    렌더링 엔진은 요청한 document 의 콘텐츠를 네트워크 계층에서 가져오면서 시작된다. 기본 플로우는 아래와 같다

    1. HTML 을 파싱해 DOM tree 구성 > 2. Render tree 구성 > 3. Render tree 배치 > 4. Render tree 그리기

     

    ( HTML, CSS 파일은 렌더링 엔진의 HTML 파서와 CSS 파서에 의해 파싱되어 DOM tree, CSSOM tree 로 변환되고, Render tree 로 결합된다. 이렇게 생성된 Render tree 를 기반으로 브라우저는 웹 페이지를 표시한다 )

     

    1. 렌더링 엔진은 HTML Document 를 파싱해 요소를 "Content tree" 라는 트리의 DOM nodes 로 바꾼다

    2. 엔진은 또한 스타일에 관련된 데이터도 파싱한다. 스타일링 정보와 HTML 표시 규칙은 또다른 트리인 "Render tree" 를 생성한다

    - Render tree 는 색, 차원과 같은 비주얼 적인 속성들을 포함하는 사각형을 포함한다. 이 사각형들은 화면에 순서대로 표시된다

    3. Render tree 가 구성되고 나면, "배치" 프로세스로 넘어간다. 이것은 각각의 노드가 화면의 어디에 정확히 나타나야 하는지를 표시하는 것이다

    4. 그 다음은 그리기 단계- Render tree 가 그려지고 레이아웃이 구성되었다면, UI 백엔드가 동작해 각 노드들을 정해진 스타일 및 위치값대로 화면에 표시한다

     

    이것은 점진적인 과정이다. 렌더링 엔진은 콘텐츠를 화면에 가능한 빨리 그리려고 시도한다. 렌더 트리를 구성하고 배치하기 전에 HTML 이 모두 파싱되기를 기다리지 않는다. 콘텐츠 일부가 파싱되고 보여지며, 나머지 콘텐츠를 네트워크로 부터 전달받는 프로세스도 동시에 진행된다

     

    브라우저마다 렌더링 엔진이 동작하는 세부내용은 다를 수 있지만, 전체적인 플로우는 동일하다

     

    웹킷 동작과정 from https://d2.naver.com/helloworld/59361
    게코 렌더링 엔진 동작 과정 from https://d2.naver.com/helloworld/59361

    - Render tree 와 DOM tree 는 1:1 로 매칭되지는 않는다

     

    참고

     

    '위코드x원티드' 카테고리의 다른 글

    React Router  (0) 2021.09.06
    쉅정리 실행 컨텍스트, Closure, Hoisting, Scope, this  (0) 2021.08.18
    Event Loop  (0) 2021.08.14
    수업 정리  (0) 2021.08.08
    Infinite Scroll 구현  (0) 2021.07.28

    댓글