브라우저에 URL을 입력하면 발생하는 일

우리는 평소에 웹 브라우저에 URL을 입력하여 접속하는데, 이때 무슨 일이 벌어지는지 나는 정확히 알고 있을지 궁금하여 이 포스트를 통해 확인하고자 한다. 내가 알고있는 과정을 간단히 말해보면 주소창에 www.naver.com를 친다면 해당 도메인의 정확한 IP주소를 알아야 접근할 수 있기 때문에 해당 도메인에 대한 IP 주소를 DNS 서버에 요청할 것이다. 그래서 해당 IP를 알게되면 해당 IP의 경로에서 index.html 파일을 가져와서 보여준다. 이러한 과정이었는데, 이 부분에 대해 찾아보면서 더 디테일한 부분이 있다는 것을 알게 되었다.

1. 웹 브라우저(크롬, 웨일, 엣지 등)의 주소창에 www.naver.com을 입력하고 엔터를 친다.

2. 브라우저는 DNS 레코드의 캐시에 www.naver.com 도메인에 대한 IP 주소가 있는지 체크한다.

DNS(Domain Name Server)는 www.naver.com와 같은 도메인 형태에 대해 IP 주소를 저장하고 있는 데이터베이스와도 같은 것이다. 만약 DNS가 없다면 우리는 모든 사이트를 접근 할 때, IP 주소를 통해 직접 접근해야 하는데 모든 사이트의 IP를 기억하고 있는 것은 어렵기 때문에 매우 번거로울 것이다. 그렇기 때문에 사용자 편의성을 위해 도메인을 제공하는 것이다. 그림1 실제로 위와 같이 nslookup 명령어를 통해 IP 주소 확인이 가능하다.

여기서 도메인 레코드를 찾기 위해서 네 가지의 캐시를 확인한다.

  • 먼저, 브라우저 캐시를 확인한다. 브라우저에서는 최근 접속한 웹페이지들의 DNS 레코드를 저장하고 있기 때문에 가장 먼저 브라우저 캐시를 확인한다.
  • 브라우저 캐시를 확인한 후에는 OS 캐시를 확인한다. OS도 DNS 레코드를 유지하기 때문이다.
  • OS 캐시에서도 찾을 수 없을 경우, 라우터 캐시를 확인 한다. OS에서 확인이 안될 경우 브라우저는 라우터와 통신하여 DNS정보를 확인한다.
  • 모든 캐시에서 해당 도메인 레코드를 찾을 수 없는 경우에는 ISP로 요청하여 해당 도메인의 IP 주소를 확인한다.

3. 요청된 URL이 캐시에 없을 경우, ISP의 DNS에서 IP 주소를 찾기위한 쿼리를 날린다.

4. 브라우저가 올바른 IP 주소를 받으면, TCP 연결을 시작한다.

여기서 네트워크 시간에 배웠던 TCP 통신의 3-way handshake가 발생한다. SYN과 ACK 메시지를 교환하면서 연결을 확인하고 설정한다.

5. 브라우저는 웹서버에 HTTP 요청을 보낸다.

TCP 연결이 완료되면 해당 서버에 웹페이지를 요청하는 GET 요청을 보낸다. (경우에 따라 POST 요청을 보낼 수도 있다.) 이 요청에는 user-agent 헤더, accept 헤더 등의 헤더 정보들도 포함된다.

6. 서버가 요청을 처리하고 응답을 다시 보낸다.

웹서버에서는 브라우저의 요청을 받아서 요청의 내용과 헤더 정보, 쿠키를 읽어서 요청을 확인하고, 그 후에 응답을 다시 보낸다.

7. 서버가 HTTP 응답을 보낸다.

서버의 응답에는 Status Code(상태코드), Content-Encoding, Cache-Control 등을 포함하여 응답을 보낸다. 상태 코드의 경우 아래와 같은 뜻을 내포하고 있다.

  • 1xx는 정보메시지를 나타낸다.
  • 2xx는 성공의 의미를 나타낸다.
  • 3xx는 클라이언트를 다른 URL로 리다이렉션한다.
  • 4xx는 클라이언트의 오류를 나타낸다.
  • 5xx는 서버의 오류를 나타낸다.

8. 브라우저가 응답으로 온 HTML 콘텐츠를 보여준다.

HTML 스켈레톤을 먼저 렌더링하고, 그런 다음 태그들을 확인하면서 필요한 이미지와 JS 파일들을 서버에 GET 메서드로 요청하여 응답 받는다. 여기서 받아지는 정적 파일들은 브라우저에 의해 캐시되어 매번 방문할 때 마다 받아오지 않아도 된다.

이것이 우리가 웹브라우저 주소창에 URL을 입력했을 때 일어나는 일들이다. 더 디테일하게 들어갈 수도 있지만, 이정도 알고있으면 어느정돈는 알고 있다고 할 수 있다.


참고 글

  1. 웹 브라우저에 URL을 입력하면 어떤 일이 일어날까?
  2. What happens when you type a URL in the browser and press enter?

Written by@[Ykss]
고이게 두지 않고 흘려보내는 개발자가 되자.

GitHubInstagramLinkedIn