우리가 늘 사용하는 브라우저란 무엇이며, 화면의 렌더링 흐름에 대해 알아보도록 하자. 아마 개발자로서 대부분 UI를 그리는 것까지는 생각을 할 것이지만, 프론트에서 그린 UI를 브라우저가 어떤식으로 받아와서 생성하고 보여주는지 모르는 분들도 많을 것이다. 기본부터 짚고 넘어가보도록 하자.
브라우저는 웹 페이지를 탐색하고 표시하는 소프트웨어이다. 사용자가 인터넷에 접속하여 검색하고, 콘텐츠를 보게 하는 등의 일을 도와주는 도구라고 볼 수 있다.
대표적인 브라우저로는 사파리, 구글 크롬, 파이어폭스, 엣지 등이 있다. 이런 브라우저는 HTML, CSS, JavaScript 같은 웹 기술을 해석해서 사용자에게 시각적으로 보여주는 역할을 하고 있다.
앞서 말했듯이, 우리가 주소창에 https://example.com을 치면, 그 주소에 있는 HTML, CSS, JS 파일들을 서버에서 받아와서 눈에 보이는 웹페이지로 만들어주는 역할을 한다.
'선택한 자원을 서버에게 요청하고 전송받은 자원을 브라우저 화면에 표시한다.'
고 하는데 쉽게 설명하자면 사용자가 주소창에 url을 입력하여 접속하는 순간 브라우저는 해당 url에서 보여줄 정보를 가지고 있는 서버에 요청하고, 서버가 보내준 정보(자원)을 받아 화면에 뿌려주는 것으로 이해할 수 있다.

| 구성요소 | 설명 |
|---|---|
| 사용자 인터페이스 (UI) | 주소창, 북마크, 뒤로가기 버튼 등 사용자와 상호작용하는 부분 |
| 브라우저 엔진 | 사용자 인터페이스와 렌더링 엔진 사이를 연결하는 조정자 역할 |
| 자료 저장소 | 쿠키, 로컬스토리지, 세션스토리지, 캐시 등 클라이언트 측 데이터 저장 |
| 렌더링 엔진 | HTML, CSS를 파싱해서 화면에 페이지를 그리는 역할 담당 |
| 네트워크(통신) | 서버와 통신 담당 (HTTP 요청/응답 처리) |
| JS 엔진(JS 해석기) | JS파서, 컴파일러, 실행 엔진 등으로 구성되며 JS 코드를 실행 (예: V8, SpiderMonkey 등) |
브라우저의 렌더링 과정은 정확하게 말하자면 위 구조 중에서도 렌더링 엔진의 동작 과정이다.
브라우저가 웹 페이지를 화면에 표시하는 과정의 전체 흐름을 렌더링 파이프라인이라고 한다. 간단하게 아래와 같다. (참고로 DOM은 Document Object Model, CSSOM은 CSS Object Model 이다.)
- HTML 수신 및 파싱 → DOM Tree 생성
- CSS 수신 및 파싱 → CSSOM Tree 생성
- DOM + CSSOM → Render Tree 생성
- Render Tree 기반으로 Layout 계산
- Layout 정보로 Painting 수행
- 화면에 최종 출력 (Composite 단계)
위 내용을 조금 더 자세히 풀어보면 아래와 같다.
❓ 렌더링 과정 이후 JS 실행
<script>태그를 발견하면 HTML 파싱을 멈추고 해당 스크립트를 JS엔진에 넘겨 실행하도록 한다. 그래서 DOM 조작할 때는 JS엔진과 렌더링 엔진과 긴밀히 연동되어 동작한다.<script>가 있으면 실행한다.❓ 렌더링 순서 주의
document.getElementById()가 DOM이 다 만들어지기 전에 실행되면 에러가 발생한다.</body> 태그 바로 위)에 넣거나, DOMContentLoaded나 window.onload 이벤트로 실행시킨다.DOMContentLoaded)하거나, DOM tree 렌더링 + 외부 리소스(이미지 등)까지 로드했을 때 자바스크립트를 실행(window.onload)할 수 있다. 일반적으로는 DOMContentLoaded가 더 빠르게 발생해서 선호되는 편이다.