1. 브라우저에 www.google.com 입력
2. 캐시 체크
- 먼저 브라우저 캐시가 있는데 기존에 google.com을 방문했다면, 방문한 기록이 남아 있어서 빠르게 접근할 수 있습니다.
- google.com에 방문한 적이 없다면, OS캐시를 찾아보게 됩니다. 말 그래도 운영체제 안에 있는 캐시로 systemcall을 통해 그 내용에 접근할 수 있습니다.
- 세번째는 라우터 캐시를 확인합니다. 라우터는 집에서 사용하는 공유기를 생각하면 됩니다. 거기서도 DNS내용을 저장합니다.
- 마지막으로 한국에서 인터넷을 제공하는 ISP(Internet Service Provider) 캐시입니다.
3. 요청한 URL이 캐시에 없으면 DNS로 IP주소 획득
ISP 캐시에서까지 그 IP주소를 찾을 수 없었다면, 이제 ISP의 DNS Server에다가 DNS 쿼리를 보내야 합니다. 즉, “구글이라는 주소 IP주소를 알면 나한테 좀 가르쳐줘”라며 여기저기 물어보는 겁니다.
이를 Recursive search라고 합니다. 이러한 일은 ISP의 DNS recursor가 담당하며, 다른 DNS에다가 물어보는 일을 합니다. recursor라는 이름이 붙게 된 이유도, IP주소를 찾을 때 까지 요청을 보내는 반복적인 특성 때문입니다.루트 네임서버에서 3차 네임 서버까지 리다이렉트하면서 일치하는 도메인 주소를 찾고, 해당 IP주소를 DNS recursor로 반환하면, recursor는 이를 브라우저로 다시 보냅니다.
DNS recursor는 루트 네임 서버에 연결합니다. 루트 네임서버에서 3차 네임 서버까지 리다이렉트하면서 일치하는 도메인 주소를 찾고, 해당 IP주소를 DNS recursor로 반환하면, recursor는 이를 브라우저로 다시 보냅니다.
4. 일치하면 IP 주소를 찾으면, 브라우저는 TCP/IP 프로토콜을 사용해 서버에 연결
이제 우리는 IP주소를 알아냈습니다. TCP/IP를 사용해 서버에 연결을 하려고 아래의 형식으로 신호를 보냅니다. TCP부분은 데이터를 잃지 않고 잘 보내는 방법을 담당하고, IP부분은 주소에 맞게 잘 보내는 쪽을 담당합니다.
이제 TCP를 연결해야 하는데, 그 방법을 3way handshaking이라고 합니다. 말그대로 여러번 악수를 하며, 클라이언트와 서버가 안전하게 잘 알아듣고 연결을 해주는 방법입니다.
처음에는 클라이언트가 SYN 신호를 보내며, 포트 좀 열어달라고 물어보면, 서버가 SYN과 ACK를 보내고, 클라이언트가 내가 보낸 정보가 맞는지 확인 후, 서버에게 잘 받았다고 다시 ACK를 보냅니다. 이렇게 되면 서로 안전하게 정보를 교환할 수 있는 길이 연결이 됩니다.
5. TCP 연결에 성공하면, 브라우저가 웹 서버에 HTTP 요청
클라이언트의 브라우저는 GET 요청을 통해 서버에게 웹페이지를 요구합니다.
brower identification(User-Agent 헤더), 받아들일 요청의 종류(Accept 헤더), 추가적인 요청을 위해 TCP Connection 유지를 요청하는 Connection 헤더, 브라우저에서 얻은 쿠키 정보 등 다양한 정보를 요청하게 됩니다.
6. 웹 서버는 요청을 처리한 결과를 HTTP 응답으로 브라우저에 전송
브라우저로부터 요청을 받은 서버는 Request Handler한테 요청을 전달해서 요청을 읽고 응답을 생성하게 됩니다. 이 Request Handler는 요청과 요청의 헤더, 쿠키를 읽어서 요청이 무엇인지 파악하고 필요하다면 서버에 정보를 업데이트 합니다. 그 다음에 응답을 특정한 포맷(JSON, XML 등)으로 작성 후 브라우저에게 전달합니다.
7. 브라우저는 클라이언트에게 HTML을 렌더링한 형태를 화면
브라우저는 서버로부터 받은 정상적인 응답을 받았다면 (2XX Response) 클라이언트에게 그토록 원했던 www.google.com의 모습을 보여주게 됩니다.
참고 자료
- https://devjin-blog.com/what-happen-browser-search/
- https://github.com/kimdozzi/backend-interview-question?tab=readme-ov-file
- https://code-designer.tistory.com/132
- https://oizys.tistory.com/59