
웹 페이지는 문서다.
웹 페이지는 HTML로 제작되어 있어 사람이 바로 읽을 수 없다.
따라서 웹 페이지 리더기 역할을 하는 웹 브라우저가 필요하다.
웹 브라우저는 웹 페이지를 읽는다.
웹 브라우저는 웹 페이지를 읽고 표시한다.
'읽고 표시한다'는 것은 Rendering을 의미한다.
웹 페이지를 렌더링하기 위해서 웹 브라우저는 몇 가지 단계를 거친다.
웹 서버는 웹 페이지를 제공한다.
Rendering 이란 웹 브라우저가 웹 페이지의 구성요소 HTML, CSS, JavaScrip 를
해석 및 실행하여사용자가 볼 수 있는 시각적인 웹 페이지(결과 페이지)로 변환하는 과정을 의미한다.
웹 브라우저는 HTML을 파싱하여 DOM를 생성한다.
데이터를 해석하고 분석하여 적절한 형식 또는 구조로 변환하는 작업
데이터를 규칙에 따라 분석하고, 그 구조나 의미를 추출해 구조화된 데이터로 변환하는 역할
Array, List .. ), 트리 구조데이터 처리 과정에서 일어나는 변환 작업을 지칭하는 범용적 용어
DOM(Documnet Object Model)은 HTML 문서의 구조화된 표현으로,
문서의 요소들을 객체로 취급하여 JavaScript를 통해 이 요소들을 조작할 수 있게 해주는 인터페이스를 제공한다.
(DOM API)
DOM은 트리 형태로 구성되어 있다.
각 요소는 node로 표현된다.
HTML 문서 최상위요소 <html>이 루트노드가 된다.
DOM은 동적 조작이 가능하다.
DOM은 객체 모델이다.
웹 페이지의 각 요소(<div>, <p> 등)는 객체로 표현되고, 각 객체는 속성과 메서드를 가진다.
JavaScript를 사용해 속성과 메서드에 접근하여 페이지를 제어할 수 있다.
웹 브라우저는 HTML 파일에 포함된 CSS파일 또는 <style> 태그 내의 스타일 규칙을 파싱하여 CSSOM을 생성한다.
CSSOM 은 HTML이 대상인 DOM과 유사하게 CSS가 대상인 DOM이라고 생각할 수 있다.
CSSOM 은 웹 브라우저가 CSS 스타일 시트를 처리하고 관리하기 위한 객체 모델이며
CSS 스타일 시트와 포함된 스타일 규칙을 JavaScript에서 조작할 수 있도록 구조화된 데이터 모델을 제공한다.
CSSOM은 스타일 시트, 스타일 규칙, 스타일 선언을 객체 형태로 제공한다.
CSSOM은 동적 조작이 가능하다.
Render Tree 는 DOM과 CSSOM 가 결합되어 생성된다.
화면에 표시될 스타일이 적용된 최종 요소의 트리 구조를 나타낸다.
DOM의 Root에서 시작해 node 각각을 읽으며 표시한다.
표시된 DOM의 각 노드에 대해 일치하는 CSSOM 규칙을 찾아 적용한다.
화면에 표시될 모든 노드의 컨텐츠 및 스타일 정보를 포함하는 구조로 이루어진 Render Tree가 구축된다.
visibility : hidden
요소가 화면에 보이지 않지만, 요소의 공간을 차지하도록 유지
✅ Render Tree에 포함된다.
display : none
요소가 화면에 보이지 않고, 요소가 차지하던 공간도 제거
✅ Render Tree에서 제거된다.
Render Tree를 기반으로 각 요소의 위치, 크기를 계산하여 화면에 어떻게 배치될지 결정하는 단계이다.
최종적으로 웹 페이지의 시각적 구조를 형성한다.
Render Tree는 요소의 크기, 위치 등의 정보를 담고 있지만
텍스트로 구성된 객체에 불과하다.
따라서 Rendering Engine이 Render Tree의 Root부터 각 요소의 정보들을 계산하고
요소가 화면에서 어디에, 어떤 크기로, 어떻게 배치되어야 하는지 결정한다.
Paint는 Layout에서 결정된 요소의 크기와 위치를 기반으로 실제 화면에 요소를 그리는 단계로,
시각적 표현을 생성하고 최종적으로 화면에 표시될 페이지를 형성한다.
이 외에 Layer Compositing 과정이 있을 수 있다.
JavaScript는 DOM과 CSSOM을 조작한다.
브라우저는 JavaScript를 실행해 동적으로 컨텐츠와 스타일을 변경하며,
JavaScript를 통해 인터랙션 이벤트를 적용한다.
CRP(Critical Rendering Path) 란
브라우저가 웹 페이지를 화면에 표시하는데 필요한 단계 중 가장 중요한 단계를 의미한다.
이 과정에서 HTML, CSS, JavaScript등 다양한 리소스를 처리해 최종적으로 화면에 웹 페이지를 렌더링한다.
라고 GPT가 말해주긴 했는데 CRP는 간단히 얘기하자면 앞서 살펴본 렌더링 과정이다.
그러나 CRP에는 렌더링 과정에 대한 최적화와 성능 개선 개념을 추가해 확장해야 한다.
이 외에도 Rendering과 관련해 담아낼 내용이 많은데, 한 포스트에 다 쓰자니 벅차다..
쒸익쑤ㅣ익..

🪄 다음 포스트에서 CRP 최적화에 대한 포스팅을 하며
Rendering 과정에 대해 좀 더 깊이 다뤄보자 (미루는게 최고 짜릿해)
nitropack.io
blog.logrocket
YoutubeCritical Rendering Path Visually
MDN_CRP
Velog@soorokim