기술면접을 준비하다보면 수도 없이 만나게 되는 질문이 있다.
"www.naver.com 을 입력하면 무슨 일이 발생하나요?"
구글에 검색하면 많은 내용이 있지만, 아무리 외우려 해도 잘 외워지지 않았다.
그러다보니 내가 이해하기 쉽게 정리해보려 한다!
참고로 이 글에선 렌더링 과정에 대한 내용은 다루지 않는다.
진짜 순수한 네트워크 관점으로 정리 할 예정이다.
(만약 이 글을 읽는 순간이 면접 직전이라면, 마지막 대답만이라도 읽고 들어가자!)
DNS 서버에 대해서 알아보자.
주소창에 www.naver.com 을 입력했을 때 어떤 일이 일어나는지 알기 위해선, DNS 서버에 대해서 알아야 한다.
DNS 서버는 Domain Name Server 의 줄임말이다.
주소창에 www.naver.com 을 치고 엔터를 누르면 네이버 웹 서버까지 TCP/IP 연결을 해야 한다.
그러려면 당연히! IP 주소를 알아야 한다.
그런데 우린 IP 주소를 모른다.
(실제로 IP 주소로 접속이 되지도 않는다.)
그래서 이 IP 주소를 누가 알고 있느냐?
이 IP 주소를 알고 있는 데이터베이스가 있다.
예를 들어 우리가 친구한테 전화할 때 진짜 전화번호는 잘 누르지 않는다.
연락처에 있는 이름을 누르면 바로 전화가 간다.
이걸 그대로 네트워크 개념으로 바꿔보면,
친구 이름이 도메인 네임이 되고, 전화번호부가 IP 주소를 알고 있는 데이터베이스가 된다.
이렇게 이름으로 IPv4 주소를 알려주는 데이터베이스가 DNS(Domain Name Service) 이다!
(요즘 세상은 모든 것이 웹 기반으로 동작한다. 그러니까 이 DNS는 매우 매우 매우 중요하다! 얘가 잘못되면 인터넷 전체가 잘못될 수 있다.)
그래서 DNS 서버가 무엇을 하냐 ?
도메인 네임을 주면서
"이거 IP 주소 뭐야 ?"
라고 물어보면
"어 그거 IP 주소는 ~~~ 야"
라고, 말해주는 역할을 한다.
그런데 이 데이터베이스(DNS) 는 분산 구조형으로 되어있다.
(대부분의 경우 트리구조이다.)
이걸 이해하려면 도메인 네임의 구조에 대해 이해할 필요가 있다.
도메인 네임에 대해 알아보자.
www.naver.com 이란 도메인 네임이 있다.
여기서 www 는 naver 에 속해있다.
www.naver 는 com 에 속해있다.
유럽의 집 주소를 보면 지번이 먼저 오고, 더 큰 개념이 뒤에 온다.
인터넷 주소도 이와 똑같다!
그래서 www 는 무엇일까?
이건 Host Name 이다.
즉, www.naver.com 은 naver.com 도메인에 속한 이름이 www 인 호스트를 의미한다.
그래서 우린 이 주소를 통째로 URL 주소라고 부른다.
하지만 주로 우린 이 URL 주소를 통째로 DNS 서버에 물어보고, DNS 서버는 그 주소에 해당하는 IPv4 주소를 알려준다.
그래서 DNS 가 왜 분산구조형인지 알아보자.
여기서 https://www.naver.com 이라 검색하면 어떤 일이 발생하는가?
일단은 사용 중인 컴퓨터의 IP 설정을 따른다.
이 설정엔 DNS 서버 주소가 포함되어 있다.
OS가 이 DNS 서버 주소에 질문한다.
"야 나 네이버에 접속하려는데, www.naver.com 주소 좀 알려줘"
그럼 DNS 서버에서 응답을 준다.
"어 주소 ~~~ 야!"
이렇게 받은 주소를 통해 네이버에 접속한다.(주로 HTTPS)
(물론 실제 네이버에 접속할 땐 로드밸런싱 등 여러 복잡한 과정을 거치지만 여기선 간단하게 이해하면 된다.)
이렇게 통신이 되면, 우리가 보는 네이버 화면이 뜨는 것이다.
(참고로 DNS 서버 주소는 주로 ISP 에서 정해준 주소를 사용한다.
만약 DNS 서버 응답 속도가 느려지면, 인터넷 전체가 느려지는 일이 발생한다.
사용자 입장에선 네이버가 느린 것처럼 보이게 된다.)
DNS Cache
이렇게 DNS에게 한 번이라도 질의를 하면, www.naver.com 의 IP 주소가 3.3.3.3 이라고 가정했을 때, 이 IP 주소를 PC가 메모리에다 저장을 한다.
이렇게 PC 마다 DNS 요청 정보(도메인 네임 - IP 주소)를 저장하는 것을 DNS Cache 라고 한다.
여기서 DNS 서버에 응답을 한 뒤 받은 IP 는 항상 유효기간을 함께 준다.
즉, PC의 DNS Cache 는 DNS 서버가 준 유효기간만큼 DNS 정보를 저장하고, 유효기간이 지나면 만료시킨다.
이제부터 클라이언트가 특정 도메인 네임에 대한 IP 주소를 질의하면, DNS Cache를 먼저 살펴보게 된다.
그 후 DNS Cache에 없다면, DNS 서버에 질의를 하게 된다.
hosts 파일
PC에는 hosts 파일이 존재한다.
이 hosts 파일은 IP 주소와 URL을 적어놓은 파일이다. 만약 여기 URL과 이에 해당하는 IP 주소가 있다면 PC 는 DNS 서버에 물어보지 않고, hosts 파일에 있는 정보를 활용한다.
만약 그 누구도 www.naver.com 에 질의한 적 없다면 어떤 일이 발생할까?
그럴 일은 없겠지만, 특정 ISP 사용자 중 단 한명도 www.naver.com 의 주소를 물어본 적이 없다고 가정해보자.
물론 ISP 의 DNS 서버 설정에 따라 다르겠지만 보편적인 방법으로 이해해보자.
1. 유저가 DNS 서버에 주소를 요청한다.
2. DNS 서버의 캐시 확인
그림을 보면 DNS 서버에 Cache라고 적혀있다.
ISP의 DNS 서버도 캐싱을 하는가?
한다.
ISP의 DNS 서버(이하 Cache DNS)는 먼저 자신의 캐시에 www.naver.com 에 대한 IP 정보가 있는지 확인한다.
만약 캐시에 정보가 없다면, 계층적으로 DNS 질의 과정을 시작한다.
그래서 얘는 어떻게 캐시를 하냐면..
3. 계층적 질의 과정
지구상의 DNS 서버는 계층적인 구조를 갖고 있는데, 그 정점에 RootDNS 가 있다. (약 13대가 존재하다.)
- Root DNS 질의
- Cache DNS 서버가 www.naver.com 에 해당하는 IP 주소를 가지고 있지 않다면, Root DNS에 요청을 한다.
"RootDNS 야 , 누가 www.naver.com 주소를 물어봤는데, com 에 해당하는 DNS 좀 알려줘" 라고 요청하면,
Root DNS는 com 도메인을 관리하는 TLD(Top Level Domain) DNS 서버 주소 목록을 알려준다.
- Cache DNS 서버가 www.naver.com 에 해당하는 IP 주소를 가지고 있지 않다면, Root DNS에 요청을 한다.
- TLD DNS 질의
- Cache DNS는 com TLD DNS 서버 중 하나에 다시 질의한다.
"Naver에 해당하는 주소를 알려줘!" 라고 요청하면,
com TLD DNS 서버는 naver.com 도메인을 관리하는 네임서버의 정보를 반환한다.
- Cache DNS는 com TLD DNS 서버 중 하나에 다시 질의한다.
- Authroitative DNS 질의
- Cache DNS 는 naver.com 의 네임서버에 www.naver.com의 IP 주소를 요청한다.
그럼 네임서버는 해당하는 IP 주소를 Cache DNS에 돌려준다. - Authoritative DNS란 특정 도메인(예를 들어 naver.com) 에 대한 공식적인 DNS 정보를 직접 가지고 있으며, 해당 도메인에 대한 질의에 대해 최종으로 응답을 제공하는 네임서버이다.
- Cache DNS 는 naver.com 의 네임서버에 www.naver.com의 IP 주소를 요청한다.
4. 캐싱 및 응답
Cache DNS는 이렇게 얻은 IP 주소 정보를 함께 받은 만료기간과 함께 캐시에 저장한다.
그래서 면접에서 어떻게 대답하면 될까?
그래서 면접관이 "www.naver.com"에 접속하면 어떤 일이 발생하는지 설명해주세요! 라고 물어본다면 다음과 같이 답해보자.
"먼저, PC는 운영체제의 hosts 파일에 url 주소와 이에 해당하는 ip 주소가 매핑되어 있는지 확인합니다. 있다면 해당 정보를 사용하고, 없다면 로컬 DNS 캐시를 확인합니다. OS의 DNS 캐시(로컬 DNS 캐시)에 www.naver.com 의 IP 주소가 저장되어 있는지 확인하는 작업입니다.
로컬 DNS 캐시에 정보가 없다면, PC는 네트워크 설정에 있는 ISP DNS 서버 주소에 www.naver.com 의 IP 주소 정보를 질의합니다.
ISP DNS 서버가 www.naver.com에 해당하는 IP 주소를 가지고 있다면, 이 주소를 요청 클라이언트에게 반환하고, 없다면 계층적 질의 작업을 통해 www.naver.com 의 IP 주소를 알아온 뒤, 요청한 클라이언트에게 알려줍니다.
계층 질의 과정은 다음 순서로 발생합니다.
먼저 Root DNS에 com 도메인을 관리하는 TLD DNS 정보를 요청합니다.
그 후 com TLD DNS 서버 중 하나에 naver.com 의 네임 서버를 요청합니다.
이렇게 받은 naver.com 네임서버에 www.naver.com 의 IP 주소를 요청합니다.
이 과정을 거쳐 받은 ip 주소를 만료기간과 함께 ISP DNS 서버에 저장하고, PC에 주소를 전달합니다.
이 후, PC는 해당 IP 주소를 활용해 www.naver.com 웹 서버와 TCP 연결을 맺고, 이후 https 프로토콜로 통신을 합니다."
핵심만 외워보자
PC는 ip 주소를 획득할 때,
hosts 파일 -> 로컬 DNS 캐시 -> DNS 서버 순으로 확인한다!!
참고자료
https://learn.microsoft.com/en-us/windows-server/networking/dns/dns-architecture