🌐 브라우저는 어떻게 작동할까?
📖 정의
웹 브라우저는 HTML, CSS, JavaScript 파일을 해석하여 사용자에게 시각적인 웹페이지를 보여주는 소프트웨어입니다. 브라우저는 서버에서 받은 코드를 파싱(parsing)하고, DOM 트리를 생성하며, 스타일을 계산하고, 레이아웃을 구성한 후 화면에 그리 는(rendering) 복잡한 과정을 거칩니다.
🎯 비유로 이해하기
레스토랑 주방
브라우저를 레스토랑 주방에 비유하면:
주문서 (HTML) → 요리사가 읽음
├─ "스테이크"
├─ "샐러드"
└─ "와인"
레시피 (CSS) → 요리 스타일 결정
├─ 스테이크: 미디엄, 소금, 후추
├─ 샐러드: 발사믹 드레싱
└─ 와인: 레드, 차갑게
특별 지시 (JavaScript) → 동적 변경
├─ "손님이 익힘 정도를 바꾸면"
├─ "알레르기 재료 제거"
└─ "추가 주문 가능"
완성된 요리 (Render) → 손님에게 서빙
⚙️ 작동 원리
1. 브라우저의 주요 구성 요소
브라우저
├─ UI (사용자 인터페이스)
│ └─ 주소창, 북마크, 뒤로/앞으로 버튼
│
├─ 브라우저 엔진
│ └─ UI와 렌더링 엔진 사이 동작 제어
│
├─ 렌더링 엔진
│ ├─ Blink (Chrome, Edge)
│ ├─ WebKit (Safari)
│ └─ Gecko (Firefox)
│
├─ JavaScript 엔진
│ ├─ V8 (Chrome, Node.js)
│ ├─ SpiderMonkey (Firefox)
│ └─ JavaScriptCore (Safari)
│
├─ 네트워킹
│ └─ HTTP 요청/응답 처리
│
├─ UI 백엔드
│ └─ OS의 UI 메서드 호출
│
└─ 데이터 저장소
└─ 쿠키, 로컬스토리지, IndexedDB
2. 렌더링 과정 (Critical Rendering Path)
1. HTML 파싱 → DOM 트리 생성
<html>
<body>
<h1>Title</h1>
</body>
</html>
→ DOM Tree:
html
└─ body
└─ h1 ("Title")
2. CSS 파싱 → CSSOM 트리 생성
h1 { color: blue; font-size: 24px; }
→ CSSOM Tree:
h1
├─ color: blue
└─ font-size: 24px
3. JavaScript 실행
- DOM 조작
- 이벤트 처리
- 비동기 작업
4. 렌더 트리 생성 (DOM + CSSOM)
- 화면에 보이는 요소만 포함
- display: none은 제외
5. 레이아웃 (Reflow)
- 각 요소의 정확한 위치와 크기 계산
6. 페인트 (Paint)
- 픽셀을 화면에 그림
7. 합성 (Composite)
- 여러 레이어를 합쳐 최종 화면 생성
💡 실제 예시
HTML 파싱 과정
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="style.css"> <!-- 1. CSS 다운로드 시작 -->
<script src="script.js"></script> <!-- 2. JS 다운로드 및 실행 (차단!) -->
</head>
<body>
<h1>Hello World</h1> <!-- 3. DOM 생성 -->
<script>
// 4. 인라인 스크립트 실행 (차단!)
console.log('Loaded');
</script>
</body>
</html>
<!-- 문제: JavaScript가 HTML 파싱을 차단함 -->
<!-- ✅ 해결: 비동기 로딩 -->
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="style.css">
<!-- defer: HTML 파싱 완료 후 실행 -->
<script defer src="script.js"></script>
<!-- async: 다운로드 완료 즉시 실행 -->
<script async src="analytics.js"></script>
</head>
<body>
<h1>Hello World</h1>
</body>
</html>