인터넷에서 웹 서버의 모든 정보를 통신하여 볼 수 있도록 하고, 문서 검색을 도와주는 응용 프로그램

브라우저를 켰을 때 바로 확인할 수 있는 주소표시줄, 뒤로 가기 버튼, 플러그인 버튼, 새로고침 버튼 등, 요청한 페이지를 보여주는 창 외에 사용자가 컨트롤할 수 있는 부분.
사용자가 주소창에 입력한 URI 값을 렌더링 엔진에게 전달해주는 역할을 한다. 또 새로고침, 뒤로 가기 버튼을 눌렀을 때 그 명령 또한 렌더링 엔진에게 전달.
자료를 저장하는 레이어다. 쿠키나 세션 등 모든 종류의 자원을 하드디스크에 저장한다.
HTML5 명세에는 브라우저가 지원하는 웹 데이터베이스가 정의.
사용자가 URI를 입력→ URI에 해당하는 데이터를 네트워크 레이어에 전달→ 응답으로 받은 리소스 또는 스토리지에 캐싱된 리소스를 가져와 인터프리터, UI 백엔드에 전달
또 HTML, CSS 코드를 파싱 해서 렌더 트리를 구성해 전달해 주는 등의 총체적인 역할
렌더링 엔진으로부터 HTTP 요청을 받아서, 서버에게 요청→ 응답 리소스를 받아 렌더링 엔진에게 돌려준다.
렌더링 엔진에서 생성된 렌더 트리를 브라우저에 그리는 역할을 한다.
`유저 인터페이스` 주소표시줄, 이전/다음/새로고침 버튼 등 웹페이지를 제외하고 사용자와 상호작용하는 곳
`렌더링 엔진` HTML과 CSS를 파싱하여 요청한 웹페이지를 표시하는 곳
`브라우저 엔진` 유저 인터페이스와 렌더링 엔진을 연결하는 곳
`네트워킹` 각종 네트워크 요청을 수행하는 곳
`UI 백엔드` 체크박스 등 기본적인 위젯을 그려주는 곳
`자료(데이터) 저장소` localStorage나 Cookie와 같이 보조 기억장치에 데이터를 저장하는 곳
`자바스크립트 해석기(인터프리터)` 자바스크립트 코드를 실행하는 곳 (크롬은 V8엔진을 사용한다)
브라우저는 크게 4단계를 거쳐 렌더링을 수행한다.
0. 접속
사용자 브라우저 접속
사용자가 > 브라우저 주소표시 줄에 url을 입력하면 > UI스레드는 입력된 내용이 검색어인지, url인지 확인하고 > 입력된 내용을 파싱하여 검색결과로 이동할지, 요청한 사이드로 이동할지 결정한다.
1. 요청 (Resource Downloading)
HTML, CSS, JavaScript와 같은 리소스를 서버에 요청 후 다운
사용자가 enter를 누르면 > (브라우저에서) UI 스레드가 네트워크 호출을 시작 > 네트워크 스레드는 서버로부터 웹사이트에 필요한 리소스를 요청 처리 > 응답 결과가 HTML 파일이면 > 응답결과를 렌더러 프로세스에 전달한다
2. 트리 구축
Document, CSS가 각 트리를 구축하고 이들을 결합한 렌더 트리 형성
2-1
브라우저의 렌더링 엔진은(렌더러 프로세스의 메인스레드) > 전달받은 HTML 문서를 파싱해 > DOM(Document Object Model)Tree 구축
(html문서에 있는 모든것들은 DOM을 구성하게 되고, DOM을 구성하는 각 노드는 서로 연관성을 가짐)
2-2
뒤이어 다운 받은 CSS파일과 함께 포함된 스타일 요소를 파싱해 > CSSOM Tree 구축
(CSSOM은 DOM이 어떻게 화면에 그려질지 알려주는 역할)
2-3
만든 DOM 트리와 CSSOM 트리를 결합하여 렌더트리 형성 > 렌더트리는 최종적으로 화면에 표시되는 모든 노드와 노드의 스타일 정보를 포함함
렌더트리는
- 렌더링 엔진이 만든다
- DOM트리의 최상단 document 객체부터 각 노드를 순회하면서 각각에 맞는 CSSOM을 찾아 규칙을 적용한다 > 그러면서 렌더와 관련된 요소들을 렌더트리에 포함시킨다
(렌더트리에 포함되지않는 것 : meta 태그, display:none)
3. Layout
페이지에 출력될 노드들의 크기와 위치, 레이어간의 순서 정보를 계산
브라우저의 자바스크립트 엔진에서 > JS는 > DOM API를 사용해 렌더 트리 변경, 리플로우 리페인트를 한다
(각 요소를 어디에 배치할 지 결정)
4. 페인팅
배치된 엘리먼트(노드)들에게 색을 입히고, 레이어 위치를 결정
[실제 그리기] 렌더트리를 기반으로 HTML요소의 레이아웃 계산, HTML 요소 페인팅을 한다.
(HTML 문서의 최상위 요소부터 실행)
Critical Rendering Path

사용자 동작에 의해 자바스트립트가 실행되어 css의 변경 또는 애니메이션 재생이 일어났을때 3가지의 경우로 동작과정이 일어난다.
(css별로 일어나는 동작과정은 모두 다르다 ! 이를 통해 성능 최적화를 시킬 수 있음)
요소의 크기나 위치가 바뀔때, 혹은 브라우저 창의 크기가 바뀌었을때 다시 발생한다.

주로 배경이 이미지나 텍스트,색상, 그림자 등 레이아웃의 수치변화를 시키지 않는 스타일의 변경만 일어났을때 발생한다

레이아웃과 페인트를 수행하지 않고 레이어의 합성만 발생하기 때문에 성능상 가장 큰 이점을 가짐

레이어 : 페인팅할 영역을 나누어 놓은 것
CSR(Client Side Rendering)
서버는 요청을 받으면 클라이언트에 HTML과 JS를 보내주고, 클라이언트는 그것을 받아 랜더링을 시작하는 방식
장점 : 빠른속도와 서버 부하 감소, 변경된 부분의 데이터만 가져옴
단점 : 모든 파일이 다운로드 되고 랜더링이 끝나기 전까지 사용자가 볼 수 있는 게 없다.
적합한 상황 :
SSR(Server Side Rendering)
서버에서 렌더링 준비를 끝마친 상태로 클라이언트에게 전달하는 방식
장점 : 초기 로딩 속도가 빠름
단점 : 요청시마다 새로고침 => 페이지 전체를 새로 변경하기 때문에 깜빡임생김, 바뀔 필요가 없는 부분도 요청
적합한 상황 :
웹브라우저 점유율이 가장 높다
빠르다
안정적이다
다양한 기능을 제공한다
사용자 친화적이다
애플이 만들어낸 브라우저
특징
보안
애플 최적화

Parsing
HTML 파일과 CSS 파일을 파싱해서 각각 Tree를 만든다.
Style
두 Tree를 결합하여 Rendering Tree를 만든다.
Layout
Rendering Tree에서 각 노드의 위치와 크기를 계산한다.
Paint
계산된 값을 이용해 각 노드를 화면상의 실제 픽셀로 변환하고, 레이어를 만든다.
Composite
레이어를 합성하여 실제 화면에 나타낸다.
웹 인터랙션 : 움직임이 있는 화면 및 액션. 즉, 웹상에서 움직임이 있거나 유저와 상호작용을 할 수 있는 화면 및 액션
브라우저 렌더링 테코톡
브라우저 렌더링 과정
브라우저 렌더링 방식
웹 브라우저의 종유와 특징
크롬 VS 사파리
블링크 vs 웹킷
display:none과 조건부렌더링
node