인터넷이나 컴퓨터 네트워크의 작동 원리에 관심이 있다면 도메인 네임 시스템(DNS, Domain Name System)이라는 용어를 한 번쯤 들어보셨을 겁니다. DNS는 우리가 매일 사용하는 인터넷의 핵심 인프라 중 하나로, 사람이 읽기 쉬운 도메인 이름을 컴퓨터가 이해하는 IP 주소로 변환해 주는 역할을 합니다.
호스트명만으로는 우리가 통신하려는 특정 머신이나 하드웨어가 세상 어디에 위치해 있는지 알 수 없습니다. 그래서 모든 통신은 결국 IP 주소를 통해 이루어집니다. DNS 서버는 바로 이 호스트명을, 여러분의 서비스가 실행 중인 머신의 IP 주소에 연결(mapping)해 주는 장치입니다.
이 글에서는 DNS 쿼리의 종류, DNS 서버의 종류, 그리고 DNS 레코드의 유형까지 차근차근 자세히 살펴보겠습니다.
DNS 리졸버(Resolver): 조회의 출발점
DNS 리졸버는 인터넷 서비스 제공업체(ISP)가 사용하는 컴퓨터로, 사용자가 요청한 호스트명을 자체 데이터베이스에서 조회한 뒤 해당 IP 주소로 사용자를 안내합니다. DNS 확인(resolution) 과정에서 핵심적인 역할을 담당합니다.
리졸버는 데이터를 캐싱하기도 합니다. 예를 들어 어떤 웹사이트 example.com이 현재 IP 주소 35.195.226.230의 서버에서 호스팅되고 있다면, 전 세계 DNS 리졸버들의 캐시에는 다음과 같은 정보가 저장됩니다.
example.com → 35.195.226.230
그런데 만약 나중에 이 웹사이트를 다른 대륙의 서버, 예컨대 IP가 35.192.247.235인 곳으로 옮기고 싶다면 어떻게 될까요? DNS 전파(propagation)가 완료되기 전까지는 전 세계 리졸버들의 캐시에 아직 예전 IP 주소가 남아 있어, 일정 시간 동안 일반적인 경로로는 사이트에 접속하지 못할 수 있습니다.
리졸버 캐시에 레코드가 머무는 시간을 TTL(Time To Live, 생존 시간)이라고 부릅니다. 이 값은 도메인을 구매한 등록기관(registrar)의 관리 콘솔에서 설정할 수 있습니다.
DNS 서버의 종류
1. 루트(Root) DNS 서버
루트 DNS 서버는 모든 TLD(최상위 도메인) 서버의 주소를 보유하고 있습니다. 호스트명으로 IP 주소를 찾아가는 여정에서 요청이 가장 먼저 만나는 지점이 바로 여기입니다.
2016년 기준으로 전 세계에는 13개의 루트 도메인 네임 서버(A~M)가 존재합니다. 다만 이것이 전 세계의 요청을 단 13대의 물리적 머신이 감당한다는 의미는 아닙니다. 실제로는 각 루트 서버 뒤에 수많은 서버가 분산 배치되어 트래픽을 처리하고 있습니다.
루트 DNS 서버들은 서로 다른 기관들이 나누어 운영하고 있습니다.
2. TLD(Top-Level Domain) 도메인 서버
TLD 서버는 최상위 도메인(.com, .org, .kr 등)을 기준으로 분류된 서버입니다. 반복(iterative) 쿼리가 루트 DNS 서버를 지난 뒤 도달하는 다음 단계로, 해당 TLD에 속한 호스트명의 레코드 정보를 보관합니다.
예를 들어 medium.com의 IP 주소를 요청하면 ".com" TLD를 담당하는 서버가 조회됩니다. TLD 서버는 해당 도메인의 권한 있는(Authoritative) DNS 서버 주소를 리졸버에게 돌려줍니다.
그렇다면 TLD 네임 서버는 어떻게 권한 있는 네임 서버의 주소를 알까요? 답은 의외로 간단합니다. GoDaddy나 Namecheap 같은 등록기관에서 도메인을 구매하면, 등록기관이 해당 도메인 정보를 TLD 네임 서버에 함께 전달하기 때문입니다. 덕분에 TLD 서버는 권한 있는 네임 서버에 접근할 수 있습니다.
요즘은 일부 등록기관이 서드파티 권한 있는 네임 서버를 사용할 수 있도록 지원하기도 하며, 등록기관 콘솔에서 직접 설정할 수 있습니다.
3. 권한 있는(Authoritative) DNS 서버
권한 있는 DNS 서버는 리졸버가 마지막에 반복적으로 조회하는 서버로, A, NS, CNAME, TXT 등 실제 DNS 레코드를 저장하고 있습니다.
따라서 요청한 호스트명에 대한 IP 주소가 존재하면 이를 반환합니다. 만약 권한 있는 DNS 서버에서조차 레코드를 찾지 못하면, 특정 오류 메시지와 함께 에러를 반환하고 네임 서버 간의 IP 주소 탐색 과정은 종료됩니다.
DNS 쿼리의 세 가지 유형
DNS 쿼리는 크게 세 가지로 나뉩니다.
- 재귀 쿼리(Recursive Query): 사용자가 리졸버에게 보내는 쿼리로, 모든 DNS 조회 과정에서 가장 처음 발생하는 요청입니다. 리졸버는 ISP일 수도 있고 네트워크 관리자일 수도 있지만, 대부분의 경우 ISP가 담당합니다.
- 비재귀 쿼리(Non-recursive Query): 리졸버가 이미 답을 알고 있어 다른 네임 서버에 추가 질의 없이 즉시 응답하는 경우입니다. 로컬 DNS 서버의 캐시에 IP 주소가 저장되어 있거나, 레코드를 확실히 보유한 권한 있는 네임 서버에 직접 질의하기 때문에 재귀 쿼리를 피할 수 있습니다.
- 반복 쿼리(Iterative Query): 리졸버가 캐시된 결과가 없어 스스로 답을 반환할 수 없을 때 발생합니다. 이때 리졸버는 루트 DNS 서버에 요청을 보내고, 루트 서버는 해당 TLD 도메인 서버의 위치를 알려줍니다.
예를 들어 medium.com의 IP 주소를 얻으려 한다면, 루트 도메인 서버는 ".com" TLD 서버의 주소를 가지고 있으며 이를 리졸버에게 반환합니다. 리졸버는 다시 TLD 서버에 IP 주소를 요청하고, TLD 서버는 medium.com의 IP를 직접 모르더라도 해당 도메인의 권한 있는 DNS 서버 주소는 알고 있으므로 이를 알려줍니다.
DNS 조회 과정, 단계별로 이해하기
이론은 여기까지 하고, 실제 DNS 확인 과정을 단계별로 정리해 보겠습니다.
- 사용자가 IP 주소가 필요한 호스트명을 리졸버에게 요청합니다. 이것이 재귀 쿼리입니다.
- 리졸버는 자신의 캐시에 해당 정보가 있는지 먼저 확인합니다.
- 캐시에 있다면 즉시 사용자에게 결과를 반환합니다.
- 캐시에 없다면, 전 세계에 분산된 루트 DNS 서버들에 반복 쿼리를 보냅니다. 2016년 기준 루트 DNS 서버는 A부터 M까지 13개가 있습니다. 루트 서버는 요청된 도메인의 TLD를 확인합니다. 예를 들어 호스트명이
medium.com이라면 TLD는 ".com"이며, 루트 서버는 ".com" 도메인 서버의 정보를 리졸버에게 돌려줍니다. 참고로 리졸버는 모든 루트 네임 서버의 주소를 미리 알고 있어야 하며, 그렇지 않으면 애초에 DNS 조회 자체가 실패할 수 있습니다. - 리졸버는 다시 TLD 도메인 서버에 반복 쿼리를 보내 도메인의 IP 주소를 요청하고, TLD 서버는 해당 도메인의 권한 있는 서버 주소를 반환합니다.
- 마지막으로 권한 있는 DNS 서버는 호스트명과 IP 주소가 매핑된 실제 레코드를 보관하고 있으므로, IP 주소를 리졸버에게 반환하고 리졸버는 이를 다시 사용자에게 전달합니다.
- 권한 있는 네임 서버에서도 일치하는 레코드를 찾지 못하면 "
DNS_PROBE_FINISHED_NXDOMAIN" 오류가 발생하며, 이는 요청된 호스트명에 대한 레코드가 존재하지 않는다는 의미입니다. - 요청이 거쳐간 모든 네임 서버에서 결과가 캐싱되므로, 다른 사용자가 같은 도메인을 요청하면 이미 DNS 캐시에 레코드가 존재하여 더 빠르게 응답할 수 있습니다.
결국 DNS 조회에는 최대 4번의 쿼리가 필요하지만, 실제 소요 시간은 불과 몇 밀리초에 불과합니다.
DNS 전파(DNS Propagation)란?
예를 들어 여러분의 웹사이트가 DigitalOcean 같은 호스팅 업체의 IP가 "x"인 서버에서 운영 중이고, 이를 IP가 "y"인 다른 서버로 이전하고 싶다고 가정해 봅시다. 트래픽이 새 IP 주소로 향하도록 하려면 권한 있는 레코드에서 IP 주소를 변경해야 합니다.
등록기관이나 네임 서버 콘솔에서 레코드를 수정하더라도, 전 세계 모든 리졸버의 캐시에 반영되기까지는 시간이 걸립니다. DNS 전파에는 통상 24~72시간이 소요될 수 있지만, 대부분의 ISP가 TTL을 낮게 유지하기 때문에 실제로는 그보다 훨씬 빨리 완료되는 경우가 많습니다.
마치며
지금까지 DNS 리졸버의 역할, 루트·TLD·권한 있는 DNS 서버의 계층 구조, 재귀·반복 쿼리의 차이, 그리고 TTL과 DNS 전파의 개념까지 살펴보았습니다. DNS는 눈에 잘 보이지 않지만 인터넷이 원활하게 작동하게 만드는 숨은 영웅입니다. 이 글이 DNS의 작동 원리를 이해하는 데 도움이 되었기를 바랍니다.