google.com을 검색했을 때 일어나는 과정

2023. 02. 27

google.com을 주소창에 입력 후 엔터를 쳤을 때 일어나는 과정

  1. 브라우저에서 주소창에 “google.com”을 입력하고 엔터 키를 누르면, 브라우저는 해당 URL에 대한 HTTP 요청을 생성합니다.
  2. 브라우저는 URL에서 “google.com”이라는 호스트 이름을 추출합니다.
  3. 브라우저는 DNS(Domain Name System) 서버에 “google.com” 호스트 이름에 대한 IP 주소를 요청합니다. DNS 서버는 이 요청에 대해 “google.com” 도메인 이름에 대한 IP 주소를 포함하는 DNS 레코드를 반환합니다.
  4. 브라우저는 IP 주소를 사용하여 HTTP 요청을 해당 서버에 보냅니다. 이 요청은 TCP/IP 프로토콜을 사용하여 전송됩니다.
  5. 서버는 요청을 받고, 요청에 대한 응답으로 HTML, CSS, JavaScript 및 기타 웹 페이지 자산을 포함하는 HTTP 응답을 생성합니다.
  6. 서버가 생성한 HTTP 응답은 TCP/IP 프로토콜을 사용하여 브라우저로 전송됩니다.
  7. 브라우저는 HTTP 응답을 받고, 이를 해석하여 웹 페이지를 렌더링합니다. 이 과정에는 HTML 문서 파싱, CSS 스타일 적용, JavaScript 코드 실행, 이미지 및 기타 자산 로딩 등이 포함됩니다.
  8. 웹 페이지가 렌더링되면, 브라우저는 사용자에게 페이지를 표시합니다.

이러한 과정을 통해 사용자는 “google.com”에 대한 HTTP 요청을 보내고, 서버로부터 받은 응답을 해석하여 브라우저에 페이지를 표시할 수 있습니다.

1. 브라우저가 URL을 해석하고 HTTP 메서드를 생성하는 과정

사용자가 브라우저 주소창에 입력한 URL을 해석하여 HTTP 요청 메시지를 생성합니다. 이때, URL은 다음과 같은 구성 요소를 가지고 있습니다.

  • 프로토콜: HTTP, HTTPS 등과 같은 프로토콜을 나타냅니다.
  • 호스트명: 요청을 보낼 서버의 호스트명을 나타냅니다. 예를 들어, google.com이나 www.naver.com과 같은 도메인 이름이 호스트명이 될 수 있습니다.
  • 포트 번호: HTTP 요청을 보낼 때 사용할 포트 번호를 나타냅니다. 보통 HTTP 요청은 80번 포트를 사용하고, HTTPS 요청은 443번 포트를 사용합니다.
  • 경로: 요청할 리소스의 경로를 나타냅니다. 예를 들어, /search?q=python과 같이 요청할 쿼리 문자열이 포함된 경로가 될 수 있습니다.
  • 쿼리 문자열: 요청할 리소스에 대한 추가적인 정보를 나타냅니다. 쿼리 문자열은 ”?”로 시작하며, ”&“로 구분된 이름-값 쌍으로 이루어집니다. 예를 들어, ?q=python&lang=en과 같이 쿼리 문자열이 포함된 URL이 될 수 있습니다.

브라우저는 URL에서 이러한 구성 요소를 해석하여 HTTP 요청 메시지를 생성합니다. 이 요청 메시지는 HTTP 메서드(GET, POST, PUT, DELETE 등)와 요청 URI(/)를 포함하고 있으며, 이를 웹 서버에 전송하여 해당 리소스에 대한 요청을 수행합니다.

HTTP 요청에는 여러 가지 정보들이 포함됩니다. 먼저, HTTP 요청은 HTTP 메서드 중 하나인 GET 메서드를 사용합니다. 이는 서버로부터 데이터를 받아오는 요청을 의미합니다.

또한, HTTP 요청에는 다양한 헤더(header) 정보가 포함됩니다. 예를 들어, User-Agent 헤더는 브라우저 정보를 서버에 전달하여 서버에서는 해당 브라우저에 최적화된 콘텐츠를 제공할 수 있습니다. Accept-Language 헤더는 사용자가 선호하는 언어를 전달하여 서버에서는 해당 언어로 콘텐츠를 제공할 수 있습니다.

마지막으로, HTTP 요청에는 쿼리 문자열(query string)이 포함될 수 있습니다. 쿼리 문자열은 URL 끝에 ”?”와 함께 키-값 쌍으로 구성되어 있으며, 서버에서 해당 값을 사용하여 동적으로 콘텐츠를 생성할 수 있습니다. 예를 들어, “google.com/search?q=hello” 요청에서 “q=hello” 부분은 쿼리 문자열입니다. 이는 구글 검색 페이지에서 “hello”를 검색하도록 서버에 요청하는 것입니다.

이렇게 생성된 HTTP 요청은 브라우저에서 TCP/IP 프로토콜을 사용하여 인터넷을 통해 해당 서버로 전송됩니다.

2. 브라우저가 생성한 HTTP 요청 메시지를 웹 서버에 전송되는 과정

  1. DNS 조회: 브라우저는 요청 URL의 호스트명을 DNS(Domain Name System) 서버에 전송하여 IP 주소를 얻습니다. 이때, 브라우저는 로컬 캐시 또는 네트워크에 있는 DNS 캐시 서버를 먼저 확인하고, 없으면 DNS 계층 구조를 따라 요청 호스트명의 IP 주소를 찾습니다.
  2. TCP 연결 설정: 브라우저는 웹 서버와 TCP 연결을 설정합니다. 이때, 브라우저는 웹 서버의 IP 주소와 포트 번호를 사용하여 TCP/IP 패킷을 생성합니다.
  3. HTTP 요청 전송: 브라우저는 HTTP 요청 메시지를 생성하여 TCP/IP 패킷에 담습니다. HTTP 요청 메시지에는 요청 라인, 헤더, 본문 등의 요소가 포함됩니다. 요청 라인은 HTTP 메서드(GET, POST, PUT, DELETE 등)와 요청 URI(/)를 포함합니다. 헤더는 클라이언트가 서버에게 전달하는 추가 정보를 나타내며, 예를 들어 Accept-Language, User-Agent, Cookie 등의 정보를 담을 수 있습니다. 본문은 POST나 PUT과 같은 메서드에서 서버로 보내는 데이터를 담을 수 있습니다.
  4. HTTP 응답 수신: 웹 서버는 TCP/IP 패킷을 수신하면 HTTP 요청 메시지를 해석하여 해당 요청에 대한 적절한 응답을 생성합니다. 응답 메시지에는 HTTP 상태 코드, 헤더, 본문 등의 요소가 포함됩니다. HTTP 상태 코드는 클라이언트에게 전송된 요청에 대한 처리 결과를 나타내며, 예를 들어 200 OK, 404 Not Found, 500 Internal Server Error 등의 상태 코드가 있습니다. 헤더는 서버가 클라이언트에게 전달하는 추가 정보를 나타내며, 예를 들어 Content-Type, Cache-Control, Set-Cookie 등의 정보를 담을 수 있습니다. 본문은 서버에서 클라이언트로 전송되는 데이터를 담을 수 있습니다. 예를 들어, HTML 파일, 이미지 파일, JSON 데이터 등이 본문으로 전송될 수 있습니다.
  5. TCP 연결 종료: 브라우저는 HTTP 응답 메시지를 수신하고 처리를 마치면 TCP 연결을 종료합니다. 이때, 브라우저는 서버와의 연결을 유지할 수도 있습니다. 이를 HTTP Keep-Alive라고 합니다.
  6. 컨텐츠 렌더: 브라우저는 HTTP 응답 메시지를 받아와서 컨텐츠를 렌더링합니다. 이때, 브라우저는 HTML 문서, CSS 스타일시트, JavaScript 파일 등의 리소스를 다운로드하고 렌더링합니다. 이 과정에서 DOM(Document Object Model) 트리와 CSSOM(CSS Object Model) 트리가 생성되고, 이 둘을 결합하여 렌더트리(Render Tree)가 생성됩니다. 렌더트리는 실제 화면에 출력될 요소를 나타내며, 이를 기반으로 브라우저는 렌더링 엔진을 사용하여 화면에 출력합니다.
  7. 추가 리소스 다운로드: 브라우저는 HTML 문서를 렌더링하는 과정에서 이미지, 비디오, 폰트 등의 리소스를 다운로드합니다. 이때, 브라우저는 요청한 리소스의 크기, 요청 수, 우선순위 등을 고려하여 다운로드합니다.
  8. 리소스 캐싱: 브라우저는 이미 다운로드한 리소스를 캐싱하여, 다음에 같은 리소스를 요청할 때는 서버에 요청하지 않고 로컬 캐시에서 바로 사용할 수 있습니다. 이를 통해 웹 페이지의 로딩 속도를 개선할 수 있습니다.
  9. 사용자 인터랙션 처리: 브라우저는 사용자의 인터랙션(마우스 클릭, 키보드 입력 등)을 처리하고, 이에 따라 페이지를 다시 렌더링합니다. 이때, 브라우저는 자바스크립트와 DOM 이벤트 모델을 사용하여 사용자 인터랙션을 처리합니다.
  10. 웹 페이지의 종료: 브라우저는 사용자가 웹 페이지를 닫거나 다른 페이지로 이동할 때, 현재 페이지를 종료하고 연결을 끊습니다. 이때, 브라우저는 HTTP Keep-Alive 연결이 설정되어 있으면 연결을 유지할 수 있습니다.

3. 브라우저가 DNS에 호스트명에 대한 IP 주소를 요청하는 과정

  1. 브라우저는 URL을 해석하여 호스트명(google.com)을 추출합니다.
  2. 브라우저는 로컬 캐시(cache)를 검색하여 호스트명에 대한 IP 주소를 가지고 있는지 확인합니다. 만약 로컬 캐시에 존재하지 않으면 DNS 조회를 수행합니다.

브라우저 로컬 캐시는 브라우저에서 관리되는 캐시 저장소(cache storage)에 존재합니다. 이 캐시 저장소는 브라우저 메모리나 하드 디스크에 저장됩니다. 브라우저는 이 캐시를 사용하여 이전에 방문한 웹사이트의 데이터를 저장하고, 동일한 웹사이트에 대한 요청이 발생할 때 해당 데이터를 재사용함으로써 웹 페이지 로딩 시간을 단축시킬 수 있습니다. 브라우저 캐시는 여러 종류가 있습니다. 예를 들어, HTTP 캐시는 이전에 다운로드한 리소스들을 저장하고, DNS 캐시는 이전에 요청한 호스트명에 대한 IP 주소를 저장합니다. 브라우저는 일반적으로 캐시 저장소의 크기나 보관 기간 등을 설정할 수 있으며, 사용자는 브라우저 설정을 통해 캐시를 비우거나, 지정된 기간 이전의 데이터를 삭제할 수도 있습니다.

  1. 브라우저는 로컬 네트워크의 DNS 캐시를 검색합니다. 이 캐시는 이전에 DNS 조회를 통해 얻은 IP 주소를 일시적으로 저장하는 공간입니다. 만약 DNS 캐시에 호스트명에 대한 IP 주소가 존재하면, 브라우저는 해당 IP 주소를 사용하여 요청을 보냅니다.
  2. 로컬 네트워크의 DNS 캐시에 IP 주소가 없거나, 로컬 캐시에 존재하지 않는 경우, 운영체제의 hosts 파일에서 검색을 합니다.
  3. 운영체제의 hosts 파일에도 없는 것이 확인이 되면, DNS 캐시 테이블에서 해당 도메인 네임에 대응 하는 IP 주소를 검색합니다.
  4. 운영체제 내의 DNS 캐시테이블에서도 존재하지 않는다면, 로컬 DNS 서버에 새로운 DNS 조회 요청을 보냅니다.
  5. 브라우저는 로컬 네트워크에 있는 기본 DNS 서버의 IP 주소를 알고 있습니다. 이 IP 주소는 일반적으로 인터넷 서비스 제공자(ISP)에서 제공하는 DNS 서버입니다.
  6. 브라우저는 DNS 서버에 호스트명(google.com)에 대한 DNS 조회 요청을 보냅니다.
  7. DNS 서버는 요청을 받으면, 자신의 캐시에서 호스트명에 대한 IP 주소를 찾아보고, 캐시에 존재하면 응답합니다.
  8. DNS 서버에 캐시에도 없으면, DNS 서버는 다른 DNS 서버에 요청을 전달합니다. 이 과정을 반복하여, 호스트명에 대한 IP 주소를 찾을 때까지 요청을 전달합니다.
  9. 최종적으로 DNS 서버는 호스트명(google.com)에 대한 IP 주소를 브라우저에게 응답합니다.
  10. 브라우저는 응답받은 IP 주소를 사용하여 HTTP 요청 메시지를 생성하고, 해당 IP 주소로 HTTP 요청을 보냅니다.

© 2024 Doe의 devlog, Built with Vapor blog Theme Gatsby