브라우저에 url을 입력했을 때 일어나는 일

목차

브라우저에 URL을 입력했을 때

크롬 브라우저에서 www.naver.com을 입력하면 어떠한 일이 벌어질까?
우리에게는 1초도 안되는 시간이지만 그 사이에 많은 일들이 일어난다.
먼저 https://whxogus215.tistory.com/126 에서 호스트 네임과 도메인 네임을 정리하였다.
따라서 우리는 naver.com이라는 도메인 네임으로 접속을 하며, 그 중 www라는 이름을 갖는 서버의 리소스를 요청하게 되는 것이다.

웹 서비스에서 서버에 리소스를 요청하는 HTTP 통신의 근간은 TCP/IP다. 따라서 사용자는 서버의 IP 주소를 알아야 한다. 사용자가 서버의 IP 주소를 알아내는 방법을 대략적으로 정리해보겠다.

1. 로컬 PC의 hosts 파일 검색

PC는 먼저 hosts라는 이름의 파일에서 브라우저에 입력한 도메인에 해당하는 IP 주소가 있는지 확인한다. 제일 먼저 조회하는 곳이기 때문에 만약 hosts 파일에 원하는 도메인이 있다면 바로 접속할 수 있을 것이다.

hosts 파일이란?

hosts 파일은 도메인 이름과 IP 주소가 매핑된 정보가 담겨있는 파일이다. 윈도우 기준으로 C:\Windows\System32\drivers\etc에서 hosts 파일을 찾을 수 있으며, 메모장으로 열어 내용을 확인해볼 수 있다. 보통 localhost의 IP 주소가 적혀있으며, 필자는 Docker Desktop을 설치하여 도커 내부 호스트 주소도 추가되어 있다. 이처럼 hosts라는 파일을 통해 가장 먼저 원하는 도메인의 IP 주소를 확인할 수 있다. 인터넷이 되지 않는 환경에서 스프링부트를 실행시키고 localhost:8080에 접속해보자. 접속이 될 것이다. 그 이유는 로컬의 hosts 파일에서 localhost라는 도메인의 IP 주소를 정의하고 있기 때문에 인터넷에 접속(이후 설명할 DNS 서버에 쿼리문을 보냄)하지 않고 연결할 수 있는 것이다.

디도스

hosts 파일은 외부에 의해 조작될 경우, 치명적인 보안 문제로 이어질 수 있다. DDOS 공격의 대표적인 사례가 바로 PC의 hosts 파일을 조작하여 특정 서버에 접속하지 못하거나 올바르지 못한 IP 주소로 접속하게끔 유도할 수 있기 때문이다.
https://www.turbovaccine.com/securitycenter/e_service/Content.asp?idx=32&page=1&prod=&q=0&q2=2

인터넷 뱅킹을 위해 의무적으로 설치한 대표적인 보안 프로그램인 AhnLab Safe Trransaction의 경우에도 위 사진과 같이 hosts 파일을 보호하는 기능을 지원하고 있다.

2. 로컬 DNS 캐시

hosts 파일에 원하는 도메인의 IP 주소가 없을 경우, 그 다음으로는 로컬 DNS 캐시를 조회한다.
윈도우 기준으로 ipconfig /displaydns를 입력하면 로컬 DNS 캐시의 내용을 확인할 수 있다.

또한, 이후에 DNS 응답을 받았을 경우, 로컬 DNS 캐시에 해당 정보가 업데이트 된다.
ping www.google.com으로 요청을 보낸 후, ipconfig /displaydns로 로컬 DNS 캐시를 조회하면 이전에 보냈던 www.google.com에 대한 IP 주소 정보가 있음을 확인할 수 있다.

3. DNS 서버 쿼리

1번과 2번에서는 모두 로컬에 있는 정보를 통해 IP 주소를 확인하였다. 1번 혹은 2번에서 IP 주소를 찾을 수 있다면 실제 인터넷에 접속하지 않고, 주소를 얻을 수 있기 때문에 요청하기까지 걸리는 속도가 매우 짧을 것이다. 3번에서는 실제 인터넷을 통해 지정된 DNS 서버에 IP 주소를 요청하게 된다.

로컬 DNS 서버

로컬 DNS 서버는 로컬 DNS 캐시와 다르다. 로컬 DNS 캐시는 로컬 PC에서 저장하는 정보이고, 로컬 DNS 서버는 인터넷 서비스를 제공하는 업체에서 운영하는 서버를 말한다. nslookup 명령어를 통해 확인할 수 있으며, 대표적으로 dns.google8.8.8.8로 되어있다.

참고로 로컬 DNS 서버는 리졸버(Resolver)라고도 부른다. 이후에 나올 그림에서 로컬 DNS 서버의 명칭이 리졸버라고 표기되어 있으니 참고하면 좋을 것 같다.

상위 DNS 서버에 질의


refs) https://aws.amazon.com/ko/route53/what-is-dns/

사용자의 DNS 요청은 제일 먼저 DNS 리졸버(로컬 DNS 서버)가 받는다. DNS 리졸버는 사용자의 DNS 요청 결과를 캐시해두기 때문에 이전에 요청했던 DNS 정보가 있다면 DNS 리졸버 선에서 요청이 처리될 것이다.

도메인 쿼리 요청은 위에서 밑으로 내려가게 된다. 즉, 큰 범위에서 좁은 범위로 점점 IP 주소의 탐색 범위가 좁아진다. 위 그림에서 알 수 있듯이, DNS 리졸버는 최상위 루트 네임서버에 DNS 요청을 전달한다. 이 때, 최상위 루트 네임서버는 .com, .kr 과 같은 url에서 맨 오른쪽에 위치한 최상위 계층의 도메인 네임서버를 관리한다. 위의 경우, .com으로 끝나는 url에 대한 DNS 요청이므로 루트 네임서버는 .com을 관리하는 네임서버의 주소를 반환한다.

이후, DNS 리졸버는 .com 네임서버에게 example이라는 이름을 갖는 IP 주소를 아는지 물어볼 것이며, .com 네임서버는 example 도메인을 관리하는 네임서버의 IP 주소를 반환할 것이다. 그리고 example.com을 관리하는 네임서버에게 example.comwww라는 호스트 이름을 갖는 서버의 IP 주소를 요청하게 되고, 최종적으로 www.example.com의 IP 주소를 사용자는 얻게 된다. 이렇게 얻게된 IP 주소는 DNS 리졸버(로컬 DNS 서버) 그리고 로컬 DNS 캐시에 저장되어 이후 재사용될 것이다.

여기서 눈여겨봐야할 점은 DNS 서버 요청/응답에서는 우리가 입력한 url의 IP 주소를 얻은 것이다. 따라서 우리의 최종 목표인 www.example.com의 리소스를 얻기 위해서는 DNS 서버로부터 얻은 IP 주소로 다시 요청을 보내야 한다. (TCP/IP 연결 후, HTTP Request를 보내게 될 것)

이렇게 응답받은 리소스(HTML, CSS, 이미지, JS)는 로컬 캐시(브라우저 캐시)에 저장되며, 리소스가 변경되지 않은 경로로 다시 요청을 할 경우, 로컬 캐시에 저장된 리소스를 반환하게 된다. 그러면 이 때는 DNS 쿼리도 보내지 않으며, HTTP 요청도 보내지 않고 오로지 로컬에 저장된 정보만을 활용해서 리소스를 얻을 수 있다.
(실제로 필자가 오픈한 웹 서비스의 경우에도 배포 간격이 짧지 않기에 한 번 접속을 한 이후로 재접속할 경우 매우 빠르게 화면이 렌더링된다)

참고 자료

  1. 면접 전에 알고 가면 좋을 것들

'CS > 네트워크' 카테고리의 다른 글

네트워크 핵심 이론 : L2  (2) 2024.12.20
웹 서비스 구조 확장  (0) 2024.08.22
웹 서비스 구조  (0) 2024.08.17
TCP/IP  (0) 2022.05.18
네트워크(Network)란  (0) 2022.05.01