네트워크 관점
브라우저에서 주소창에 URL을 넣고 엔터를 치면 네트워크 관점에서 다음과 같은 일이 벌어진다.
-
www.google.com 를 치고 엔터
-
DNS 서버에서 위 도메인 네임에 대응하는 IP주소를 찾는다.
- 루트 서버부터 재귀질의를 통해 IP주소를 찾는다.
- 실제 통신은 특정 기기와 하기 때문에 해당 기기의 물리주소인 MAC 주소를 ARP를 통해 가져와 통신하게 된다.
-
우선 찾은 IP주소로 TCP Connection을 맺는다.
- TCP는 3-way handshake를 통해 Connection이 완료됬다는 것을 확인한다. (3가지 방법을 통해 악수함(연결))
자세한 내용: ‣
-
TCP Connection이 완료 되면 GET 요청을 통해 해당 주소의 resource(HTML, CSS, Javascript)를 요청한다.
-
서버는 그 응답으로 resource(HTML, CSS, Javascript)를 보낸다.
렌더링 관점
위 과정을 통해 받은 resource를 가지고 렌더링을 진행한다.
- HTML 파일은 HTML 파서를 통해 파싱하고, CSS파일은 CSS 파서를 통해 파싱한다.
- 파싱하는 과정에서 script나 이미지 파일을 만나면 서버에 추가적인 resource를 요청한다.
- HTML 파싱을 통해 생서된 DOM Tree와 CSS 파싱을 통해 생성된 스타일 시트를 attatchment를 하여 render tree를 만든다.
- render tree는 dom 트리와 1:1로 매핑되지 않는다(head태그 같은 경우 표시되지 않음)
- 이 과정에서 렌더 객체의 스타일을 적용한다.(크기, 색상)
- 이렇게 생성된 렌더 객체는 위치가 없기에 위치를 계산하여 배치한다. (reflow)
- 위에서 아래 왼쪽에서 오른쪽 흐름대로 상위 객체부터 배치된다.
- 배치 후 배경색, 테두리와 같은 그리기를 실행한다(repaint)
Reflow, Repaint