웹 브라우저(web browser)는 기본적으로 웹 서버에서 받아온 정보를 화면에 출력한다. 서버에서 받아온 정보는 HTML 문서, 이미지, 비디오 등이 있다. 주요 웹 브라우저는 Chrome, Firefox, Internet Explorer, Safari 및 Opera가 있다. 웹 트래픽(Web Traffic, 웹 사이트에 방문한 사람들이 주고받은 데이터의 양으로 방문자 수와 방문 페이지 수에 따라 결정됨)의 95%를 차지한다.
웹 서버는 해당 정보를 HTTP(HyperText Transfer Protocol)를 따라 클라이언트 웹 브라우저에 전송하며, 웹 브라우저는 해당 결과를 표시한다.
브라우저의 기본 구조는 그림과 같이 7가지 구성요소로 이루어져 있다.
알잘딱깔센 JavaScript
알잘딱깔센 JavaScript
💡 모든 브라우저에는 고유한 렌더링 엔진이 있다. 렌더링 엔진은 브라우저 버전에 따라 다르다. 아래 목록은 일반적인 브라우저에서 사용되는 브라우저 엔진 목록이다.
- Google Chrome and Opera v.15+: Blink
- Internet Explorer: Trident
- Mozilla Firefox: Gecko
- Chrome for iOS and Safari: WebKit
브라우저 렌더링은 사용자가 주소창에 특정 URL을 입력하여 접속하거나 링크를 클릭했을 때, 특정 양식 값을 제출했을 때 등 사용자의 요청이 있을 때 발생한다. 물론 사용자가 URL을 입력할 때마다 항상 서버에서 동일한 데이터를 받아오진 않는다. 이 때 필요한 최적화는 하단에서 살펴보도록 하자. 이렇게 브라우저 요청에 따라 URL과 연결되어 있는 서버에서 네트워크를 통해 데이터를 전송받는다. 렌더링 엔진은 전송받은 HTML 문서를 해석하여 사용자가 볼 수 있도록 화면에 그려준다. 이러한 과정을 렌더링이라고 한다.
브라우저의 종류마다 렌더링 엔진의 세부 과정 등은 약간의 차이가 있지만 전체적 작동 방식은 유사하므로 브라우저 렌더링 과정이 기본적으로 어떻게 진행되는지 살펴보자.
알잘깔딱센 JavaScript
1. HTML 파싱 및 DOM 트리 구축
알잘딱깔센 JavaScript
먼저 HTML문서를 파싱하고 DOM 트리를 구축한다. HTML 파싱에는 토큰화 및 트리구조를 포함한다. HTML 파싱 단계에서 렌더링 엔진은 서버에서 전송받은 바이트를 문자로 변환하고 토큰을 식별한다. 토큰화에는 시작태그와 종료태그를 포함하고 있으며, 속성과 값 또한 포함한다. 토큰 식별 후 노드로 전환하고 각 태그간의 관계와 계층 구조를 반영하여 DOM 트리를 구축한다. 파싱 중에 이미지같은 비동기 리소스를 만나면 브라우저가 해당 리소스를 요청하고 파싱을 계속 진행한다. 이 때 렌더링 엔진은 멈추지 않는다.
<header>
<script src="script.js" async></script>
</header>