브라우저의 동작원리를 이해하고,이에 기반한 웹의 렌더링 방법에 대해 학습한다.
브라우저에서 웹 페이지를 열게 되면 Window라는 전체적인 오브젝트가 존재한다.
그리고 페이지가 표기되는 부분이 Document 오브젝트이다.
그리고 사용자 눈에는 안보이지만 Window에 관련된, 다시 말해 브라우저 자체에 관련된 정보들이 담겨있는 Navigator 오브젝트가 존재한다.
Window라는 전체적인 오브젝트가 있고 그 Window안에는 DOM들이 들어있고 이것을 이용해서 새로운 요소를 추가, 빼거나 움직이는게 가능하게 된다.
또한 BOM이라는 건, Browser Object Model의 약자로 브라우저에 관련된 Navigator나 Location이나 Fetch나 Storage같은 위에서 살펴 본 Web APIs에 관련된 오브젝트들이 들어있다.
그래서 우리가 자바스크립트로 브라우저 위에서 동작하는 걸 만들 때는 DOM에 관련된 API도 사용해도 되고, BOM에 관련된 API도 쓸 수 있는 것이다.
DOM은 Document Object Model의 약자로, HTML이나 XML 문서를 프로그래밍 언어에서 사용할 수 있도록 트리 구조로 구성해놓은 것이다.
다시 쉽게 풀어서 설명하자면
<html>
이라는 태그를 만나면 <html>
이라는 태그를 토큰화시키고, Hello World
라는 문자열을 만나면 Hello World
라는 문자열을 토큰화시킨다.
- Element Node: 태그에 해당하는 노드 (예:
<div>
,<a>
,<p>
등)- Text Node: 텍스트 내용에 해당하는 노드 (예: "Hello, World!")
- Document Node: 전체 문서를 대표하는 노드
브라우저에서 DOM을 만들게 되면, 우리가 정의한 CSS와 병합해 CSSOM이라는 트리를 만들게 된다.
HTML 요청 : 먼저 브라우저가 서버에게 HTML 파일을 요청하게 된다.(HTTP requests / response)
HTML 읽기 및 DOM 생성 : 브라우저는 받아온 HTML 파일을 위에서부터 한 줄씩 읽으면서 DOM(Document Object Model) 트리를 구성한다.
CSSOM 생성 : 별도로 링크된 CSS 파일을 요청하거나 내장된 스타일을 읽어서 CSSOM(CSS Object Model) 트리를 구성한다.
Layout(Reflow) : Render Tree를 기반으로 각 노드의 위치와 크기를 계산한다.
Painting : 화면에 실제 요소들을 그린다. 여기서는 텍스트의 색상, 배경 이미지, 그림자 등의 시각적 스타일이 적용된다.
Composite : 여러 레이어를 합쳐서 최종적으로 화면에 표시될 이미지를 생성합니다.
Layout : 이렇게 Rendering tree를 만든 후 각각의 요소들이 어떤 위치에 얼마나 크게 표기될 건지 계산한다.
Painting : 계산 후 그림을 그린다.
질문 : 브라우저 렌더링 과정에 대해 설명하세요.
대답 : 브라우저는 크게 4단계를 거쳐 랜더링을 수행합니다.