DNS 동작 원리: 인터넷의 전화번호부 이해하기
DNS 동작 원리: 인터넷의 전화번호부 이해하기
웹 브라우저에 www.google.com을 입력하면 어떤 일이 벌어질까요? 사람은 도메인 이름을 사용하지만, 컴퓨터는 142.250.196.110 같은 IP 주소로 통신합니다. 이 둘을 연결해 주는 시스템이 바로 DNS(Domain Name System) 입니다. DNS는 인터넷의 전화번호부라 불리며, 하루에 수조 건의 쿼리를 처리하는 인터넷 인프라의 핵심입니다.
이 글에서는 DNS의 계층 구조, 쿼리 방식, 캐싱, 보안 프로토콜까지 체계적으로 살펴봅니다.
DNS 계층 구조
DNS는 트리(tree) 형태의 분산 계층 구조로 설계되어 있습니다. 단일 서버에 모든 레코드를 보관하는 것이 아니라, 역할에 따라 여러 단계로 분리되어 있습니다.
1. 루트 네임서버 (Root Name Server)
DNS 계층의 최상위에 위치합니다. 전 세계에 13개의 루트 서버 클러스터(A~M)가 있으며, Anycast를 통해 수백 개의 물리 서버로 분산 운영됩니다. 루트 서버는 직접 도메인 정보를 제공하지 않고, 적절한 TLD 서버의 위치를 안내합니다.
. (root)
├── com.
├── kr.
├── org.
├── net.
└── ...
2. TLD 네임서버 (Top-Level Domain)
루트 바로 아래 단계입니다. .com, .net 같은 일반 최상위 도메인(gTLD)과 .kr, .jp 같은 국가코드 최상위 도메인(ccTLD)으로 나뉩니다.
- gTLD:
.com,.org,.net,.info,.xyz등 - ccTLD:
.kr(한국),.jp(일본),.uk(영국) 등 - New gTLD:
.app,.dev,.blog등 2012년 이후 추가된 도메인
TLD 서버는 해당 도메인의 권한 네임서버(Authoritative NS) 주소를 알려줍니다.
3. 권한 네임서버 (Authoritative Name Server)
실제 DNS 레코드를 보유한 서버입니다. 도메인 관리자가 설정한 A, AAAA, MX, CNAME, TXT 등의 레코드를 저장하고 응답합니다. 예를 들어 utilo.kr의 권한 네임서버는 이 도메인에 대한 모든 DNS 레코드를 관리합니다.
| 레코드 타입 | 용도 | 예시 |
|---|---|---|
| A | IPv4 주소 매핑 | 93.184.216.34 |
| AAAA | IPv6 주소 매핑 | 2606:2800:220:1:: |
| MX | 메일 서버 지정 | mail.example.com |
| CNAME | 별칭(Alias) | www → example.com |
| TXT | 텍스트 정보 (SPF, DKIM 등) | v=spf1 include:... |
| NS | 네임서버 지정 | ns1.example.com |
재귀 쿼리 vs 반복 쿼리
DNS 쿼리에는 두 가지 방식이 있습니다.
재귀 쿼리 (Recursive Query)
클라이언트가 재귀 리졸버(Recursive Resolver) 에 질의하면, 리졸버가 최종 답을 찾을 때까지 다른 서버들을 순차적으로 조회합니다. 일반적으로 ISP나 공용 DNS 서비스(Google, Cloudflare)가 재귀 리졸버 역할을 합니다.
전체 조회 흐름:
- 사용자가
www.example.com입력 - OS의 스텁 리졸버가 재귀 리졸버에 쿼리 전송
- 재귀 리졸버 → 루트 서버 질의 →
.comTLD 서버 주소 획득 - 재귀 리졸버 → TLD 서버 질의 →
example.com권한 NS 주소 획득 - 재귀 리졸버 → 권한 NS 질의 → 최종 IP 주소 획득
- 재귀 리졸버가 사용자에게 결과 반환
반복 쿼리 (Iterative Query)
재귀 리졸버가 각 단계의 서버에 보내는 쿼리 방식입니다. 서버는 자신이 알고 있는 최선의 정보(referral)를 반환하고, 리졸버가 다음 서버에 다시 질의합니다. 루트, TLD, 권한 서버 간의 통신이 이 방식으로 이루어집니다.
DNS 캐시와 전파
TTL과 캐시
모든 DNS 레코드에는 TTL(Time To Live) 값이 설정되어 있습니다. 이는 해당 레코드를 캐시에 보관할 수 있는 시간(초)을 의미합니다.
example.com. 3600 IN A 93.184.216.34
↑ TTL = 3600초 (1시간)
캐시는 여러 단계에서 동작합니다:
- 브라우저 캐시: 가장 먼저 확인하는 로컬 캐시
- OS 캐시: 운영체제 수준의 DNS 캐시 (
/etc/hosts포함) - 리졸버 캐시: ISP 또는 공용 DNS의 캐시
- CDN/프록시 캐시: Cloudflare 등 중간 계층의 캐시
DNS 전파 (Propagation)
DNS 레코드를 변경하면 전 세계 캐시에 반영되기까지 시간이 걸립니다. 이를 DNS 전파라고 합니다. TTL이 86400(24시간)이었던 레코드를 변경하면, 최대 24시간까지 이전 값이 유지될 수 있습니다.
전파 시간을 줄이는 팁:
- 변경 전에 TTL을 300~600초로 낮추기
- 변경 후 충분한 시간이 지난 뒤 TTL을 원래대로 복원
- DNS 조회 도구를 활용해 전파 상태를 확인
주요 공용 DNS 서비스
직접 DNS 서버를 운영하지 않는다면, 공용 DNS 서비스를 사용할 수 있습니다. 각각 속도, 개인정보 보호, 필터링 기능이 다릅니다.
| 서비스 | Primary | Secondary | 특징 |
|---|---|---|---|
| Google Public DNS | 8.8.8.8 | 8.8.4.4 | 빠른 속도, 글로벌 Anycast |
| Cloudflare | 1.1.1.1 | 1.0.0.1 | 개인정보 중시, 가장 빠른 응답 |
| Quad9 | 9.9.9.9 | 149.112.112.112 | 악성 도메인 자동 차단 |
| OpenDNS | 208.67.222.222 | 208.67.220.220 | 콘텐츠 필터링, 가족 보호 |
국내 사용자의 경우 KT(168.126.63.1), SKT(210.220.163.82) 등 ISP DNS도 사용할 수 있지만, 속도와 프라이버시 측면에서 Cloudflare나 Google DNS를 권장합니다.
DNS over HTTPS (DoH) / DNS over TLS (DoT)
전통적인 DNS 쿼리는 UDP 53번 포트를 사용하며 평문으로 전송됩니다. 이는 네트워크상의 누구나 사용자가 어떤 사이트를 방문하는지 엿볼 수 있다는 뜻입니다.
DNS over HTTPS (DoH)
HTTPS 프로토콜(443 포트)을 통해 DNS 쿼리를 암호화합니다. 일반 웹 트래픽과 구분이 어려워 검열 우회에도 유용합니다.
https://cloudflare-dns.com/dns-query?name=example.com&type=A
- 지원: Chrome, Firefox, Edge, Safari 등 주요 브라우저
- 장점: HTTPS 인프라 활용, 방화벽 우회 용이
- 단점: 약간의 지연 증가, 중앙 집중화 우려
DNS over TLS (DoT)
TLS 암호화를 사용하며, 전용 포트(853)를 사용합니다.
- 장점: DNS 트래픽임을 명확히 식별 가능, 네트워크 관리에 유리
- 단점: 853 포트가 차단될 수 있음
두 프로토콜 모두 개인정보를 보호하고 중간자 공격을 방지하는 데 효과적입니다. 최신 운영체제와 브라우저는 대부분 DoH를 기본 지원하므로, 설정을 확인해 활성화하는 것을 권장합니다.
DNSSEC 기초
DNSSEC(DNS Security Extensions) 은 DNS 응답의 무결성과 출처를 검증하는 보안 확장입니다. DNS 자체가 암호화되지 않는 문제와 별개로, 응답이 변조되지 않았음을 보장합니다.
동작 방식
- 도메인 소유자가 DNS 레코드에 디지털 서명(RRSIG) 을 추가
- 리졸버가 서명을 검증하여 응답이 진본인지 확인
- 신뢰 사슬(Chain of Trust)이 루트 서버까지 이어짐
주요 레코드 타입
- RRSIG: 각 레코드 세트의 디지털 서명
- DNSKEY: 서명 검증에 사용하는 공개 키
- DS: 상위 도메인에 등록하는 위임 서명(Delegation Signer)
- NSEC/NSEC3: 존재하지 않는 도메인에 대한 인증된 부정 응답
DNSSEC은 DNS 캐시 포이즈닝(Cache Poisoning) 같은 공격을 방지하는 데 필수적이지만, 아직 모든 도메인이 적용하고 있지는 않습니다. .kr 도메인은 KISA를 통해 DNSSEC을 지원합니다.
DNS 문제 해결
DNS 관련 문제가 발생했을 때 유용한 진단 명령어들입니다:
# 기본 DNS 조회
nslookup example.com
# 상세 DNS 조회 (추천)
dig example.com A +short
# 특정 DNS 서버로 조회
dig @8.8.8.8 example.com
# DNS 추적 (전체 경로 확인)
dig +trace example.com
# 역방향 DNS 조회
dig -x 8.8.8.8
# Windows에서 DNS 캐시 초기화
ipconfig /flushdns
# macOS에서 DNS 캐시 초기화
sudo dscacheutil -flushcache
더 간편하게 확인하고 싶다면, ip.utilo.kr의 DNS 조회 도구를 사용해 보세요. 브라우저에서 바로 다양한 DNS 레코드를 조회할 수 있습니다.
마무리
DNS는 인터넷이 작동하는 데 있어 가장 기본적이면서도 중요한 시스템입니다. 계층적 분산 구조 덕분에 수십억 개의 도메인을 효율적으로 관리하고 있으며, DoH/DoT, DNSSEC 같은 보안 기술이 지속적으로 발전하고 있습니다.
DNS에 대해 더 깊이 알고 싶다면, DNS 조회 방법 가이드도 함께 읽어보시기 바랍니다. 직접 도메인의 DNS 레코드를 확인하고 싶다면, 아래 도구를 활용해 보세요.