웹 브라우저는 여러 단계의 과정을 거쳐 Google의 홈페이지를 표시한다

1. 사용자 입력
- 사용자가 브라우저의 주소창에 URL을 입력한다.
2. URL 해석
- 브라우저는 입력된 URL을 해석하여 프로토콜(HTTP), 도메인 이름(google.com), 경로(/ 등)를 분리한다
ex. https://www.google.com/search?q=frontend
3. 로컬 캐시 확인
- 브라우저는 로컬 캐시를 확인하여 이전에 방문한 웹 페이지의 IP 주소가 저장되어 있는지 확인한다
캐시가 있다면 해당 IP 주소를 사용하여 다음 단계로 진행한다
4. DNS 조회
- 로컬 캐시에 해당 웹 페이지의 IP 주소가 저장되어 있지 않다면 브라우저는 DNS(Domain Name System) 서버에 도메인 이름(google.com)의 IP 주소를 요청한다
- DNS 서버는 도메인 이름에 해당하는 IP 주소를 찾아 브라우저에 반환한다
도메인 이름 외 다른 부분(프로토콜, 경로 등)은 필요하지 않다
5. TCP 연결 설정
- TCP란? 데이터 전송을 안정적이고 신뢰성 있게 보장하는 전송 계층 통신 프로토콜이다
네트워크에서 데이터를 전송할 때, 데이터를 세그먼트이라는 작은 조각들로 쪼개 전송한다 - 브라우저는 받은 IP 주소를 사용하여 웹 서버(해당 IP 주소가 가리키는 곳)와 TCP(Transmission Control Protocol) 연결을 설정한다
- TCP 핸드셰이크 과정이 이루어져 연결이 설정된다
- 핸드셰이크란? 클라이언트와 서버 간에 연결을 설정하는 과정
- SYN (Synchronize) 패킷 전송: 클라이언트가 서버에 연결을 요청하며 "SYN" 패킷을 보낸다
- SYN-ACK (Synchronize-Acknowledge) 패킷 응답: 서버가 요청을 수락하며 "SYN-ACK" 패킷을 클라이언트에게 보낸다
- ACK (Acknowledge) 패킷 전송: 클라이언트가 서버의 응답을 확인하며 "ACK" 패킷을 보낸다
- 패킷이란? 네트워크 계층에서 사용하는 데이터 전송 단위. IP 헤더 + TCP 세그먼트 형식이다
6. HTTP 요청 생성
- HTTP란? 웹 브라우저와 웹 서버 간에 데이터를 주고받는 규칙
- 브라우저는 웹 서버에 보낼 HTTP 요청 메시지를 생성한다. 이 메시지에는 요청 메소드(GET), 요청 URL(/), 그리고 필요한 헤더가 포함된다
비유를 하자면
- TCP: 도로 (데이터가 이동하는 기본 통신 경로)
- HTTP: 고속도로 (웹 데이터를 주고받는 더 빠른 통신 경로)
- 세그먼트: 데이터를 담고 있는 차량 (데이터를 나누어 실어나르는 단위)
- 패킷: 차량에 탑승한 사람 (목적지를 포함해 차량이 이동할 도로의 정보를 알고 있다)
- 핸드셰이크: 톨게이트에서의 검문 (데이터 전송 준비 확인 절차)
7. TCP를 통해 HTTP 요청 전송
- 생성된 HTTP 요청 메시지는 TCP 연결을 통해 웹 서버로 전송된다
- HTTP 요청 메시지는 TCP를 통해 세그먼트로 나누어 전송된다
8. 웹 서버에서 HTTP 요청 수신
- 웹 서버는 TCP 세그먼트를 수신하고 이를 조합하여 전체 HTTP 요청 메시지를 복원한다
- 웹 서버는 요청된 URL에 따라 적절한 웹 페이지 데이터 (리소스)를 찾는다
9. 웹 서버가 HTTP 응답 생성
- 웹 서버는 요청에 대한 응답을 생성한다
- 이 응답에는 상태 코드(예: 200 OK), 응답 헤더, 요청한 웹 페이지의 데이터(HTML, CSS, JavaScript 등)가 포함된다
10. TCP를 통해 HTTP 응답 전송
- 생성한 HTTP 응답 메시지는 TCP 세그먼트로 나누어 브라우저에 전송된다
11. 브라우저에서 HTTP 응답 수신
- 브라우저는 TCP 세그먼트를 수신하고 이를 조합하여 전체 HTTP 응답 메시지를 복원한다
12. 웹 페이지 렌더링
- 브라우저는 수신한 HTML, CSS, JavaScript 데이터를 파싱하여 렌더 트리를 생성하고, 레이아웃을 결정하며, 최종적으로 페인팅하여 화면에 웹 페이지를 표시한다
13. 사용자 출력
- 모든 과정이 완료되면 사용자는 브라우저를 통해 구글 웹 페이지를 볼 수 있다
'Study' 카테고리의 다른 글
| CSS에서 margin과 padding의 차이 (0) | 2024.10.08 |
|---|---|
| HTTP, REST, REST API에 대해 (0) | 2024.10.07 |
| HTTP란? (0) | 2024.10.06 |
| 리플로우(Reflow)와 리페인트(Repaint)가 실행되는 시점 (0) | 2024.08.30 |
| 브라우저의 렌더링 원리 (0) | 2024.08.30 |