1. 유저가 사용자 인터페이스에 google.com 이라는 URL을 입력한다.
- 모든 웹사이트 URL은 특정한 IP 주소와 연결되어있다.
- IP 주소는 DNS에 저장되어 있다.
- DNS의 주된 목적은 인간 친화적인 탐색을 위한 것이다.
2. 브라우저는 입력된 google.com에 해당하는 IP를 찾기위해 DNS 기록에 대한 캐시를 검사한다.
- 캐시는 네트워크 트래픽을 규제하고데이터 전송 시간을 향상시키기 위해 필수적이다.
- 순서:
- 먼저 브라우저 캐시를 검사한다. - 브라우저는 유저가 방문했던 DNS 기록을 일정시간동안 유지한다.
- OS 캐시를 검사한다. 브라우저 캐시에 찾고있는 IP가 없으면, 브라우저는 OS에 system call을 날려서 기록을 검사한다. (OS 또한 DNS 기록에 대한 캐시를 유지한다.)
- 라우터 캐시를 검사한다. 유저의 컴퓨터 안에 캐시가 없다면, 브라우저는 라우터와 통신해서 DNS 기록에 대한 캐시를 가져온다.
- ISP의 캐시를 검사한다. ISP 또한 고유의 DNS 서버를 운영한다.
3. (캐시에 없으면,) ISP의 DNS 서버는 IP 주소를 찾기 위해 DNS 쿼리를 시작한다.
- 해당하는 IP 주소를 찾기 위해 인터넷 상의 다수의 다른 DNS 서버들을 검색한다.
- 이 방식은 해당하는 IP 주소를 찾을 때까지, 또는 찾을 수 없다는 에러 응답을 받을 때까지 recursive search로 이루어진다.
- 다른 DNS서버는 name servers라고 불린다. 왜냐하면 도메인 이름의 형식에 따라 검색을 하기 때문이다.
- (. -> .com -> google.com 순서로 이루어진다.)
- (이 요청은 데이터 패킷을 이용해서 보내진다. 이 패킷은 다수의 네트워킹 장비를 통한다. 네트워킹 장비는 올바른 DNS 서버로 가기위한 가장 빠른 길을 찾기 위해 라우팅 테이블을 이용한다.)
4. 브라우저는 정보전송을 위해 서버와의 TCP 연결을 시작한다.
- 이 연결은 TCP/IP three-way handshake 방식으로 이루어진다.
- 클라이언트는 서버에게 새로운 연결을 위해 열려있는지 확인하는 SYN(Synchronize) 패킷을 보낸다.
- 서버가 열려있는 포트가 있고 새로운 연결을 시작할 수 있으면 SYN/ACK 패킷을 사용해 ACK(Acknowledgement) 를 응답한다. (SYN 에 ACK 를 더한것)
- 클라이언트는 SYN/ACK 패킷을 받고 다시 ACK 패킷을 보내 연결을 완성한다.
5. 브라우저는 웹서버에 HTTP 요청을 보낸다.
- Accept, User-Agent, Accept-Encoding, Connection, 등의 요청을 함께 보낸다.
6. 서버는 요청을 대응한다.
- 서버는 Request handler 에게 요청을 전달한다. (Request handler는 Node, Ruby, Spring, PHP 같은 도구)
- request handler는 헤더와 쿠키 가 담긴 요청을 확인하고 필요시 서버상 정보를 업데이트한다.
- 그리고 JSON 과 같은 특정 포맷으로 응답을 조립한다.
7. 서버는 HTTP 응답을 보낸다.
- Status Coontent-Encoding, Cache-Control, cookies 등의 정보와 함께 응답한다.
- HTTP와 HTTPS 사이의 주된 차이점은 보안에 있다.
- HTTPS는 TLS(Transfer Layer Security) 또는 SSL(Secure Sockets Layer)을 사용하여 HTTP 요청과 응답을 암호화한다.
- TLS는 public key, private key를 사용하고, public 키는 클라이언트 기기에 서버의 SSL 인증서를 사용해 공유된다.
- 클라이언트가 서버와의 연결할 때, 두 기기는 두 개의 키를 사용해 새로운 키(session keys)를 만들어내고, 이 이상의 통신은 암호화 되어 이루어진다.
8. 브라우저는 응답을 받고 HTML, CSS, JS 를 파싱한다.
- 렌더러 프로세스가 웹 콘텐츠를 처리한다.
- 먼저 HTML을 먼저 다운받고, HTML 파일을 위에서 아래로 읽어가면서 CSS, JS 및 외부 리소스를 다운로드 받는다.
- JS 파일을 다운로드 할 때는 HTML 렌더링을 멈춘다.
9. DOM, CSSOM 변환
- HTML --> DOM (Document Object Model)
- 파싱하는 작업은 HTML 표준에 따라 정의된다
- CSS --> CSSOM (CSS Object Model)
10. 렌더 트리 구축
- DOM, CSSOM 을 결합하여 화면에 실제로 그려낼 내용을 작성한다. 즉, 어떤 엘리먼트에 어떤 스타일을 적용할 것인지 정해진다.
11. 렌더 트리 배치 (Layout, 또는 Reflow)
- 각 요소의 크리와 위치를 계산한다.
- 레이아웃 트리 생성 (DOM 트리 구조와 유사할 수있지만 페이지에 표시되는 내용과 관련된 정보만 포함)
- display: none 은 레이아웃 트리 일부가 아님 / visibility: hidden 은 레이아웃 트리 포함됨
12. 렌더 트리 그리기 (Paint, 또는 Repaint)
- 요소를 실제로 픽셀로 변환하여 그린다. (Paint, Rasterize)
- 레이아웃 트리를 탐색하여 페인트 레코드를 만든다.
- 픽셀로 그려진 여러 레이어를 합성한다. (Composition)
References
Inside look at modern web browser (part 3) - https://developer.chrome.com/blog/inside-browser-part3
W3C, 2024, Navigation Timing Level 2
https://www.w3.org/TR/navigation-timing-2/#processing-model
What happens when you type a URL in the browser and press enter?
Why is HTTP not secure? | HTTP vs. HTTPS - https://www.cloudflare.com/learning/ssl/why-is-http-not-secure/
'웹 개발' 카테고리의 다른 글
로컬 스토리지 (Local Storage) | Web Storage API (0) | 2024.07.06 |
---|---|
캐싱 전략 - Cache-Control (0) | 2024.05.29 |
Design System - 개발자, 디자이너, 기획자의 입장에서 (0) | 2024.05.26 |
SPA vs MPA (1) | 2024.05.20 |
4년차 프론트엔드 개발자가 운영하는 블로그 (0) | 2024.04.30 |