DNS(Domain Name System)은 IP주소(192.168.1.0) <-> DNS주소(www.example.com)을 의미합니다.
DNS는 Domain Name System의 약자로, 컴퓨터, 서비스 또는 인터넷 또는 사설 네트워크에 연결된 모든 리소스에 대한 분산 네이밍 시스템입니다. 어렵게 느낄 수 있는데 쉽게 말하자면, 현대의 컴퓨터는 대부분 네트워크에 연결되어 있을 것입니다. 수많은 컴퓨터, 서버가 네트워크연결되어 있는데 각 이름들은 일련의 숫자들로 구성되어 있습니다. 그래서 인간이 일련의 숫자들을 기억하기 어려워 DNS를 통해서 인간이 쉽게 기억할 수 있는 이름을 설정하는 것입니다.
우리는 쉽게 터미널이나 CMD에서 DNS 통해 IP주소를 확인할 수 있습니다.

DNS는 계층적이고 분산된 데이터베이스 시스템으로 작동하며, 트리구조로 구성되어 있습니다.
DNS레코드에 정보를 저장함으로써 작동합니다. 이러한 레코드는 A레코드(도메인 이름을 IPv4주소로 매핑), AAAA레코드(도메인 이름을 IPv6주소로 매핑), MX레코드(도메인에 대한 이메일 수신을 담당하는 메일 서버를 지정) 등이 있습니다.
대부분의 개인, 기업이 인터넷에 접근할때 사용하는 일반적인 서비스입니다. 대중적으로 Google Public DNS, OpenDNS, CloudflareDNS 등이 있습니다. 이러한 서비스는 빠르고 안정적이며 사용자의 개인정보 보호에 중점을 둡니다.
기업이나 조직은 자체 DNS서버를 운용하여 내부 네트워크의 도메인 이름을 관리하고 인터넷에 액세스를 할 때 DNS쿼리를 처리합니다. 자체 DNS 서버를 운영하는 것은 네트워크의 관리와 보안을 향상하는데 도움이 도비니다.
ISP나 기업 네트워크 내에서 캐싱 DNS서버가 사용됩니다. 이 서버는 이전에 수행된 DNS 쿼리 결과를 캐시하여 동일한 도메인 이름에 대한 쿼리의 응답 시간을 줄입니다. 이로써 네트워크의 트래픽을 줄이고 사용자 경험을 향상시킵니다.
인터넷의 루트 DNS서버 및 최상위 도메인(TLD)서버는 전세계의 DNS계층 구조의 최상위에 위치하여, 도메인 이름을 검색하는 과정에서 초기 단계에서 필요한 정보를 제공합니다.
특정 도메인의 권한이 있는 DNS서버로, 해당 도메인에 대한 DNS 레코드를 관리하고 해당 도메인의 쿼리에 대한 응답을 제공합니다.

로컬 DNS 서버 또는 기지국 DNS 서버는 일반적으로 특정 네트워크(예: 가정, 사무실, 학교 등) 내에서 사용되는 DNS 서버를 가리킵니다. 이러한 서버는 해당 네트워크에 연결된 장치들(IOT기기)에서 자동적으로 도메인 이름을 IP주소로 해석하고, 그 반대로 IP주소를 도메인 이름으로 변환할 수 있도록 합니다.
루트 네임서버는 전 세계의 DNS 계층 구조에서 가장 상위에 위치하는 DNS 서버입니다.
이러한 서버는 DNS 계층의 최상위에 있으며, 모든 DNS 쿼리의 시작점으로 작동합니다. 루트 네임서버는 최상위 도메인(Top-Level Domain, TLD) 서버의 IP 주소를 반환하여 DNS 쿼리를 계속 진행하도록 합니다.
TLD (Top-Level Domain, 최상위 도메인) DNS 서버는 특정 최상위 도메인(TLD)에 대한 DNS 쿼리를 처리하는 서버입니다. 예를 들어, .com, .net, .org와 같은 최상위 도메인에 해당하는 DNS 서버를 TLD DNS 서버라고 합니다.
Authoritative DNS 서버 주소를 저장해두고 안내하는 역할을 한다. (밑에서 배움)
실제 개인 도메인과 IP 주소의 관계가 기록/저장/변경되는 서버. 그래서 권한의 의미인 Authoritative가 붙는다. 일반적으로 도메인/호스팅 업체의 ‘네임서버’를 말하지만, 개인이나 회사 DNS 서버 구축을 한 경우에도 여기에 해당하게 된다.

위와 같이 root에서 Top Level Domain, Second Level Domain, Third Level/sub Domain 순서로 내려온다.
우리가 사용하는 URL의 구조는 DNS루트에서 sub까지 내려온다.

위의 그림과 같이 URL주소는 Root Domain 부터 하위 계층의 Domain까지 알기 때문에 Root domain DNS Server의 IP주소 그 하위 계층의 domain IP 주소를 알고 있다.
DNS는 도메인 이름을 해당 도메인의 IP 주소로 매핑
1.호스트(사용자의 컴퓨터)가 도메인 이름을 IP 주소로 변환하기 위해 DNS에 쿼리를 보냅니다.
2.루트 DNS 서버는 도메인 이름의 최상위 수준 도메인(TLD, Top-Level Domain) 서버(com, net, org 등)의 IP 주소를 반환합니다.
3.TLD 서버는 다음으로 질의된 도메인을 관리하는 도메인의 네임서버를 알려줍니다.
4.도메인의 네임서버는 도메인의 서브도메인을 관리하는 서브도메인 네임서버의 IP 주소를 반환합니다.
5.호스트는 서브도메인 네임서버에 다시 쿼리를 보내 해당 도메인의 IP 주소를 요청합니다.
6.서브도메인 네임서버는 해당 도메인의 IP 주소를 반환합니다.
7.호스트는 마지막으로 도메인의 IP 주소를 받아서 원하는 서비스나 웹사이트에 연결합니다.
즉 DNS 문자열 구조에서 뒤에서부터 해당 계층의 DNS server을 콜백해 해당 ip 주소를 찾습니다.
DNS 캐시는 DNS 서버가 이전에 처리한 DNS 조회 결과 를 저장하는 임시 저장소입니다. DNS 캐시를 사용함으로써 반복적인 도메인 조회를 피하고 네트워크 성능을 향상시킬 수 있습니다.
조회 결과 저장: DNS 서버가 도메인 조회를 처리할 때, 해당 도메인에 대한 IP 주소를 캐시에 저장합니다. 이후 동일한 도메인에 대한 조회가 있을 때, DNS 서버는 캐시에 저장된 IP 주소를 사용하여 즉시 응답합니다.
유효 기간: DNS 캐시에 저장된 조회 결과에는 유효 기간이 있습니다. 이 유효 기간 동안은 도메인 조회에 대한 캐시가 유지되며, 만료되면 재조회를 수행합니다.
조회 성능 향상: DNS 캐시를 사용하면 동일한 도메인에 대한 반복적인 조회를 피하고 네트워크 대역폭을 절약할 수 있습니다. 또한 도메인 조회의 응답 시간을 줄여서 사용자 경험을 향상시킵니다.
네트워크 부하 감소: DNS 캐시를 사용하면 DNS 서버에 대한 부하를 줄일 수 있습니다. 캐시된 결과를 사용하여 네트워크 트래픽을 줄이고 DNS 서버의 응답 시간을 단축시킵니다.
DNS 캐시는 일반적으로 DNS 서버에서 관리되며, DNS 서버 소프트웨어에 따라 캐시 크기 및 동작 방식을 조정할 수 있습니다. 이를 통해 네트워크 성능을 최적화하고 사용자에게 빠른 도메인 조회 경험을 제공할 수 있습니다.