우리는 평소에 웹 브라우저에 URL을 입력하여 접속하는데, 이때 무슨 일이 벌어지는지 나는 정확히 알고 있을지 궁금하여 이 포스트를 통해 확인하고자 한다. 내가 알고있는 과정을 간단히 말해보면 주소창에 www.naver.com를 친다면 해당 도메인의 정확한 IP주소를 알아야 접근할 수 있기 때문에 해당 도메인에 대한 IP 주소를 DNS 서버에 요청할 것이다. 그래서 해당 IP를 알게되면 해당 IP의 경로에서 index.html 파일을 가져와서 보여준다. 이러한 과정이었는데, 이 부분에 대해 찾아보면서 더 디테일한 부분이 있다는 것을 알게 되었다.
DNS(Domain Name Server)는 www.naver.com와 같은 도메인 형태에 대해 IP 주소를 저장하고 있는 데이터베이스와도 같은 것이다. 만약 DNS가 없다면 우리는 모든 사이트를 접근 할 때, IP 주소를 통해 직접 접근해야 하는데 모든 사이트의 IP를 기억하고 있는 것은 어렵기 때문에 매우 번거로울 것이다. 그렇기 때문에 사용자 편의성을 위해 도메인을 제공하는 것이다.
실제로 위와 같이 nslookup
명령어를 통해 IP 주소 확인이 가능하다.
여기서 도메인 레코드를 찾기 위해서 네 가지의 캐시를 확인한다.
여기서 네트워크 시간에 배웠던 TCP 통신의 3-way handshake가 발생한다. SYN과 ACK 메시지를 교환하면서 연결을 확인하고 설정한다.
TCP 연결이 완료되면 해당 서버에 웹페이지를 요청하는 GET 요청을 보낸다. (경우에 따라 POST 요청을 보낼 수도 있다.) 이 요청에는 user-agent 헤더, accept 헤더 등의 헤더 정보들도 포함된다.
웹서버에서는 브라우저의 요청을 받아서 요청의 내용과 헤더 정보, 쿠키를 읽어서 요청을 확인하고, 그 후에 응답을 다시 보낸다.
서버의 응답에는 Status Code(상태코드), Content-Encoding, Cache-Control 등을 포함하여 응답을 보낸다. 상태 코드의 경우 아래와 같은 뜻을 내포하고 있다.
HTML 스켈레톤을 먼저 렌더링하고, 그런 다음 태그들을 확인하면서 필요한 이미지와 JS 파일들을 서버에 GET 메서드로 요청하여 응답 받는다. 여기서 받아지는 정적 파일들은 브라우저에 의해 캐시되어 매번 방문할 때 마다 받아오지 않아도 된다.
이것이 우리가 웹브라우저 주소창에 URL을 입력했을 때 일어나는 일들이다. 더 디테일하게 들어갈 수도 있지만, 이정도 알고있으면 어느정돈는 알고 있다고 할 수 있다.
참고 글