coredot.today
DNS 완전 정복: 주소창에 URL을 치면 실제로 무슨 일이 벌어지는가
블로그로 돌아가기
DNS네트워크인터넷클라우드보안DNSSECRoute 53

DNS 완전 정복: 주소창에 URL을 치면 실제로 무슨 일이 벌어지는가

142.250.196.110을 외우는 대신 google.com을 치면 되는 이유. 1983년 HOSTS.TXT 파일 하나로 시작된 DNS가 어떻게 인터넷의 전화번호부가 되었는지, 그 계층 구조와 질의 과정, 보안 위협과 대응, 클라우드 시대의 DNS 활용법까지 완전 정복한다.

코어닷투데이2026-04-0185

들어가며: IP 주소를 외워야 한다면

지금 바로 브라우저 주소창에 142.250.196.110을 입력해 보자. Google 검색 페이지가 뜬다. 223.130.200.104를 입력하면? 네이버가 나온다.

이것이 인터넷의 진짜 주소다. 우리가 매일 쓰는 google.com, naver.com은 사실 인간을 위한 별명(alias)에 불과하다. 컴퓨터와 컴퓨터가 통신할 때는 오직 숫자로 된 IP 주소만 이해한다.

상상해 보자. 자주 가는 웹사이트 10개의 IP 주소를 전부 외워야 한다면?

매일 외워야 할 IP 주소 목록
142.250.196.110 → Google
223.130.200.104 → Naver
31.13.70.36 → Facebook
151.101.1.140 → Reddit
104.244.42.193 → X (Twitter)
185.199.108.153 → GitHub
52.78.231.108 → 배달의민족
13.225.103.59 → Netflix
... 그리고 수천 개 더

불가능하다. 전화번호부 없이 전화번호를 외우던 시대를 떠올려 보라. 엄마 번호, 친구 번호 몇 개는 외울 수 있어도, 피자집 번호까지 외울 수는 없다.

DNS(Domain Name System)는 인터넷의 전화번호부다. "이 이름의 IP 주소가 뭐야?"라는 질문에 답하는 시스템. 우리가 google.com을 입력하면 DNS가 142.250.196.110으로 번역해 주는 것이다.

도메인 이름을 숫자로 변환하는 마법의 전화번호부

3,500억+ 일일 DNS 질의 수 전 세계 하루 기준 (2025)
< 50ms 평균 DNS 응답 시간 대부분의 질의가 캐시에서 처리
3.5억+ 등록된 도메인 수 2025년 기준 전 세계

이 글에서는 DNS의 탄생 배경, 계층 구조, 질의 과정, 레코드 타입, 보안 위협, 실전 도구, 그리고 클라우드 시대의 DNS 활용법까지 하나도 빠짐없이 다룬다. 주소창에 URL을 칠 때마다 보이지 않는 곳에서 벌어지는 일을 이해하고 나면, 네트워킹에 대한 시야가 완전히 달라질 것이다.


1. DNS의 역사: HOSTS.TXT에서 분산 시스템으로

인터넷 이전: 파일 하나로 충분했던 시대

1970년대, 인터넷의 전신인 ARPANET에 연결된 컴퓨터는 수십 대에 불과했다. 이 시절에는 이름과 IP 주소를 매핑하는 방법이 단순했다. HOSTS.TXT라는 텍스트 파일 하나에 모든 호스트 정보를 적어 두고, SRI-NIC(Stanford Research Institute의 Network Information Center)에서 관리했다.

HOSTS.TXT (1970년대 버전)
HOST : 10.0.0.1 : MIT-AI : PDP-10 : MIT ::
HOST : 10.0.0.2 : SRI-NIC : PDP-11 : SRI ::
HOST : 10.1.0.1 : UCLA-CCN : SIGMA7 : UCLA ::
HOST : 10.2.0.1 : UTAH : PDP-10 : UTAH ::
... (수십 줄이면 충분)

네트워크에 새 컴퓨터가 추가되면? SRI-NIC에 전화해서 "우리 컴퓨터 추가해 주세요"라고 요청하면 됐다. 그러면 SRI-NIC가 HOSTS.TXT를 업데이트하고, 각 기관에서 FTP로 최신 파일을 다운로드했다.

한계의 도래: 수백 대가 되자 무너졌다

1980년대에 접어들면서 ARPANET에 연결된 호스트가 수백 대로 늘어났다. HOSTS.TXT 시스템의 문제가 드러나기 시작했다.

!
중앙 집중의 한계
SRI-NIC 한 곳에서 모든 호스트 정보를 관리 — 병목 현상과 단일 장애점(SPOF). 파일 크기가 계속 커져 FTP 전송에 시간 소요. 이름 충돌 관리 불가능.
Paul Mockapetris의 제안
1983년 USC의 Paul Mockapetris가 RFC 882/883을 발표. 중앙 집중 대신 분산 데이터베이스로 이름을 관리하자는 제안. 이것이 DNS의 탄생이다.
DNS의 탄생 (1983)
RFC 882/883 → 이후 RFC 1034/1035로 개정. 계층적 네임스페이스, 분산 데이터베이스, 캐싱을 핵심으로 하는 DNS가 인터넷의 표준이 되었다.

DNS의 설계 철학

Paul Mockapetris가 설계한 DNS는 세 가지 핵심 원칙을 가지고 있다.

  1. 계층적 네임스페이스: www.example.com처럼 점(.)으로 구분된 트리 구조. 각 레벨을 독립적으로 관리 가능
  2. 분산 데이터베이스: 하나의 서버가 모든 정보를 가지지 않음. 각 도메인의 관리 권한을 위임(delegation)
  3. 캐싱: 한 번 조회한 결과를 일정 시간 저장하여 중복 질의를 줄임

이 세 가지 원칙 덕분에 DNS는 40년이 지난 지금도 3.5억 개의 도메인을 안정적으로 서비스하고 있다. 인터넷에서 가장 오래되고, 가장 안정적인 분산 시스템 중 하나다.

💡
Fun Fact: Paul Mockapetris는 DNS를 설계한 공로로 2012년 Internet Hall of Fame에 헌액되었다. 그는 DNS가 "이메일보다 더 중요한 인터넷 인프라"라고 말한 바 있다. 우리가 인터넷에서 하는 모든 것의 첫 번째 단계가 DNS 질의이기 때문이다.

2. DNS 계층 구조: 루트에서 시작하는 나무

DNS를 114 전화번호 안내 서비스에 비유한 일러스트 — 교환원이 도메인 이름을 IP 주소로 찾아주는 모습

DNS는 거꾸로 뒤집은 나무(inverted tree) 구조다. 꼭대기에 루트(Root)가 있고, 아래로 내려가면서 가지가 나뉜다. 이 구조를 이해하면 DNS의 모든 것이 명확해진다.

DNS 계층 구조를 나무집 마을로 표현한 일러스트

전체 구조 한눈에 보기

DNS 계층 구조
. (Root) 전 세계 13개 루트 서버 클러스터
.com
.kr
.io
.org
.net
google.com
naver.com
core.today
www.google.com
mail.google.com
blog.core.today

1층: 루트 서버 (Root Servers)

DNS 트리의 꼭대기. 전 세계 13개 루트 서버 클러스터가 존재한다. A부터 M까지 알파벳으로 이름이 붙어 있다.

"13개면 너무 적은 거 아닌가?"라고 생각할 수 있다. 하지만 "13개"는 논리적 서버 수다. 실제로는 Anycast 기술을 사용하여 전 세계 수백 개 지점에 분산 배치되어 있다. 예를 들어, F-Root(ISC 운영)는 전 세계 300개 이상의 노드에서 운영된다.

루트 서버운영 기관Anycast 노드 수
A-RootVerisign다수
B-RootUSC-ISI소수
F-RootISC (Internet Systems Consortium)300+
J-RootVerisign다수
K-RootRIPE NCC90+
L-RootICANN200+
M-RootWIDE Project (일본)10+

루트 서버가 하는 일은 단 하나다: "이 TLD를 담당하는 서버는 누구인가?"에 대답하는 것. google.com을 질의하면 루트 서버는 .com을 담당하는 TLD 서버의 주소를 알려준다.

2층: TLD 서버 (Top-Level Domain)

TLD는 도메인 이름의 마지막 부분이다. 크게 세 종류로 나뉜다.

TLD의 종류
gTLD (일반) .com .net .org .io .app .dev
ccTLD (국가) .kr .jp .uk .de .cn .us
인프라 TLD .arpa (역방향 DNS 전용)
  • gTLD(Generic TLD): .com, .net, .org 등 일반적인 TLD. Verisign이 .com.net을 관리한다. 2012년부터 ICANN이 새로운 gTLD를 대량 허용하면서 .app, .dev, .io 등이 등장했다.
  • ccTLD(Country Code TLD): .kr(한국), .jp(일본), .uk(영국) 등 국가 코드 TLD. 한국의 .kr은 한국인터넷진흥원(KISA)이 관리한다.
  • 인프라 TLD: .arpa는 역방향 DNS(IP → 도메인) 조회에 사용되는 특수 TLD.
💡
.io의 미래: 개발자들이 사랑하는 `.io`는 사실 영국령 인도양 지역(British Indian Ocean Territory)의 ccTLD다. 2024년 영국이 차고스 제도의 주권을 모리셔스에 반환하기로 합의하면서, `.io` TLD의 미래에 대한 논란이 뜨거워졌다. IANA 규칙상 국가가 소멸하면 해당 ccTLD도 폐지될 수 있기 때문이다. 다만 실제 폐지까지는 수년이 걸릴 것으로 보인다.

3층: 권한 있는 네임서버 (Authoritative Nameserver)

실제 도메인의 DNS 레코드를 보관하고 있는 서버. google.com의 경우 Google이 직접 운영하는 네임서버(ns1.google.com 등)가 권한 있는 네임서버다.

도메인을 등록하면, 그 도메인의 네임서버를 지정해야 한다. 보통 도메인 등록 대행사(가비아, AWS Route 53 등)가 네임서버를 제공한다. 이 네임서버가 "이 도메인의 IP 주소는 뭐야?"라는 질문에 최종적으로 대답하는 주체다.


3. DNS 질의 과정: 한 번의 URL 입력, 네 번의 질문

브라우저 주소창에 www.example.com을 입력하고 Enter를 누르면, 화면에 웹페이지가 나타나기까지 뒤에서 무슨 일이 벌어지는가? DNS 질의 과정을 한 단계씩 따라가 보자.

DNS 질의가 여러 서버를 거치는 보물찾기 모험 지도

전체 흐름

사용자가 www.example.com 입력
브라우저 DNS 캐시 확인 → 없음
OS DNS 캐시 확인 → 없음
DNS 리졸버(ISP 또는 8.8.8.8)에 질의
리졸버 → 루트 서버: ".com 담당 서버가 누구?"
리졸버 → TLD 서버: "example.com 담당 서버가 누구?"
리졸버 → 권한 있는 네임서버: "www.example.com의 IP가 뭐야?"
IP 주소 반환 → 브라우저가 해당 IP로 HTTP 요청

단계별 상세 설명

Step 1: 로컬 캐시 확인

브라우저는 먼저 자체 DNS 캐시를 확인한다. Chrome의 경우 chrome://net-internals/#dns에서 캐시된 DNS 레코드를 볼 수 있다. 캐시에 없으면 OS의 DNS 캐시를 확인한다.

Step 2: DNS 리졸버에게 질의

로컬 캐시에도 없으면, 컴퓨터에 설정된 DNS 리졸버(Recursive Resolver)에게 질의한다. 보통 ISP(인터넷 서비스 제공자)가 자동으로 리졸버를 제공하지만, 직접 설정할 수도 있다.

DNS 리졸버IP 주소특징
Google Public DNS8.8.8.8 / 8.8.4.4가장 널리 사용. 빠르고 안정적
Cloudflare DNS1.1.1.1 / 1.0.0.1개인정보 중심. 가장 빠른 응답 속도
KT DNS168.126.63.1한국 ISP 기본 설정. 국내 도메인에 최적화
SK DNS210.220.163.82한국 ISP 기본 설정
Quad99.9.9.9보안 중심. 악성 도메인 자동 차단

Step 3: 재귀 질의 (Recursive Query)

리졸버가 답을 모르면, 계층 구조를 따라 위에서부터 아래로 질의를 시작한다.

1 루트 서버에 질의: "www.example.com의 IP를 알려줘" → 루트 서버: "나는 모르지만, .com을 관리하는 TLD 서버는 이거야" (referral)
2 TLD 서버에 질의: "www.example.com의 IP를 알려줘" → .com TLD 서버: "나도 모르지만, example.com의 네임서버는 이거야" (referral)
3 권한 있는 네임서버에 질의: "www.example.com의 IP를 알려줘" → 네임서버: "93.184.216.34야!" (authoritative answer)
4 결과 반환: 리졸버가 IP 주소를 캐시에 저장하고, 클라이언트(브라우저)에게 전달. 브라우저가 해당 IP로 HTTP 연결 시작.

재귀 질의 vs 반복 질의

DNS 질의에는 두 가지 방식이 있다.

재귀 질의 vs 반복 질의
재귀 질의 (Recursive)
클라이언트 → 리졸버 "최종 답을 줘!" (모든 추적은 리졸버가 대행)
vs
반복 질의 (Iterative)
리졸버 → 각 서버 "아는 만큼만 알려줘" (리졸버가 단계별로 직접 추적)
  • 재귀 질의: 클라이언트가 리졸버에게 "최종 답을 달라"고 요청. 리졸버가 모든 추적을 대신 해 줌. 우리 컴퓨터 → 리졸버 사이에서 사용.
  • 반복 질의: 리졸버가 각 DNS 서버에게 "아는 만큼만 알려달라"고 요청. 서버는 referral(다음에 물어볼 서버 정보)을 줌. 리졸버 → 루트/TLD/권한 있는 서버 사이에서 사용.

실제로는 이 두 방식이 조합되어 사용된다. 클라이언트는 리졸버에게 재귀 질의를 하고, 리졸버는 다른 서버들에게 반복 질의를 한다.


4. DNS 레코드 타입: A부터 SOA까지

DNS 서버에 저장되는 정보를 레코드(Record)라고 한다. 도메인 하나에 여러 종류의 레코드가 존재할 수 있다. 각 레코드 타입은 서로 다른 역할을 한다.

DNS 레코드 타입을 서로 다른 모양의 우편물에 비유한 그림

주요 레코드 타입 비교

레코드 타입용도예시 값
A도메인 → IPv4 주소example.com → 93.184.216.34
AAAA도메인 → IPv6 주소example.com → 2606:2800:220:1:248:1893:25c8:1946
CNAME도메인 → 다른 도메인 (별칭)www.example.com → example.com
MX메일 서버 지정example.com → mail.example.com (우선순위 10)
TXT텍스트 정보 (SPF, DKIM 등)"v=spf1 include:_spf.google.com ~all"
NS네임서버 지정example.com → ns1.example.com
SOA도메인 권한 정보 (시리얼, 갱신 주기 등)ns1.example.com admin.example.com 2026040101 ...

레코드 타입 상세 해설

A 레코드 (Address Record)

가장 기본적인 레코드. 도메인 이름을 IPv4 주소로 매핑한다. 하나의 도메인에 여러 A 레코드를 지정하면 라운드 로빈 방식으로 트래픽이 분산된다.

dig google.com A 결과
google.com. 300 IN A 142.250.196.110
google.com. 300 IN A 142.250.196.113
google.com. 300 IN A 142.250.196.100

Google은 여러 A 레코드를 가지고 있다. 요청할 때마다 다른 IP가 반환될 수 있으며, 이를 통해 트래픽을 분산한다.

AAAA 레코드 (Quad-A Record)

A 레코드의 IPv6 버전. IPv4 주소가 32비트인 반면, IPv6 주소는 128비트로 거의 무한한 주소 공간을 제공한다. "AAAA"라는 이름은 IPv6 주소가 IPv4의 4배 길이이기 때문에 A를 4개 쓴 것이다.

CNAME 레코드 (Canonical Name)

하나의 도메인을 다른 도메인의 별칭(alias)으로 설정한다. www.example.comexample.com으로 가리키게 하면, www 서브도메인이 메인 도메인과 같은 IP를 자동으로 따라간다.

💡
CNAME의 제약: CNAME은 루트 도메인(apex, 예: example.com)에는 사용할 수 없다. RFC 1034에 따라 CNAME이 있는 노드에는 다른 레코드 타입이 공존할 수 없기 때문이다. 루트 도메인에서 CNAME과 비슷한 기능을 원하면 AWS Route 53의 ALIAS 레코드나 Cloudflare의 CNAME Flattening을 사용한다.

MX 레코드 (Mail Exchange)

이메일을 받을 메일 서버를 지정한다. 우선순위(priority) 값이 있어, 숫자가 낮을수록 우선적으로 사용된다. 우선순위가 높은 서버에 장애가 생기면 다음 서버로 자동 전환된다.

dig google.com MX 결과
google.com. 600 IN MX 10 smtp.google.com.
google.com. 600 IN MX 20 smtp2.google.com.
google.com. 600 IN MX 30 smtp3.google.com.
google.com. 600 IN MX 40 smtp4.google.com.

TXT 레코드 (Text Record)

임의의 텍스트 데이터를 저장한다. 원래는 범용이었지만, 현재는 주로 이메일 인증에 활용된다.

  • SPF (Sender Policy Framework): 어떤 서버가 이 도메인의 이메일을 보낼 수 있는지 선언
  • DKIM (DomainKeys Identified Mail): 이메일에 디지털 서명을 추가하여 위변조 방지
  • DMARC: SPF와 DKIM을 조합한 이메일 인증 정책
  • 도메인 소유권 인증: Google Search Console, Let's Encrypt 등에서 도메인 소유자임을 인증할 때 TXT 레코드 사용

NS 레코드 (Name Server)

해당 도메인의 DNS 질의를 처리할 네임서버를 지정한다. 도메인을 등록하면 반드시 NS 레코드를 설정해야 한다.

SOA 레코드 (Start of Authority)

도메인의 권한 정보를 담고 있다. 시리얼 번호, 갱신 주기, 재시도 주기, 만료 시간 등 DNS 관리에 필요한 메타데이터가 들어 있다.


5. TTL과 캐싱: DNS가 빠른 진짜 이유

DNS 캐시를 모니터에 붙인 포스트잇에 비유한 일러스트 — 유효한 메모는 선명하고, 만료된 TTL은 흐릿하게 벗겨지는 모습

매번 루트 서버 → TLD → 권한 있는 서버를 거쳐야 한다면 DNS 질의에 수백 ms가 걸릴 것이다. 하지만 실제로는 대부분의 DNS 질의가 수 ms 안에 끝난다. 비밀은 캐싱이다.

TTL (Time To Live)

모든 DNS 레코드에는 TTL 값이 붙어 있다. "이 정보를 캐시에 얼마나 오래 보관해도 되는가"를 초(second) 단위로 지정한다.

TTL 값 비교 (단위: 초)
CloudFlare 기본값
300
일반적인 A 레코드
3,600
안정적인 서비스
28,800
.com TLD NS 레코드
48,000
루트 서버 NS 레코드
86,400
  • TTL이 짧으면: DNS 변경 사항이 빨리 전파되지만, DNS 서버 부하가 증가한다
  • TTL이 길면: 캐시 효율이 높아지지만, DNS 변경 사항 전파가 느려진다

캐싱 계층

DNS 질의 결과는 여러 계층에서 캐싱된다. 위에서부터 순서대로 확인하며, 캐시에 있으면 더 아래로 내려가지 않는다.

1 브라우저 DNS 캐시: Chrome, Firefox 등 브라우저가 자체적으로 DNS 결과를 캐시. 수 초~수 분간 유지. Chrome: chrome://net-internals/#dns에서 확인 가능.
2 OS DNS 캐시: 운영체제 레벨 캐시. macOS는 dscacheutil -flushcache, Windows는 ipconfig /flushdns로 초기화. /etc/hosts 파일도 여기서 참조.
3 리졸버(ISP/Public DNS) 캐시: 가장 큰 캐시 계층. ISP나 Google/Cloudflare의 DNS 리졸버가 수많은 사용자의 질의 결과를 공유 캐싱. 대부분의 질의가 여기서 해결된다.
4 권한 있는 네임서버: 캐시가 아닌 원본 데이터. 모든 캐시에서 미스가 나면 여기까지 도달. 전체 DNS 질의의 극히 일부만 이 단계에 도달한다.

실전 TTL 전략

상황권장 TTL이유
안정적인 프로덕션 서비스3600 (1시간)캐시 효율과 변경 용이성의 균형
마이그레이션/변경 예정300 (5분)변경 전 TTL을 미리 낮춰 빠른 전파 준비
페일오버 대비60 (1분)장애 시 빠르게 다른 서버로 전환
CDN 서비스 (CloudFront 등)60~300CDN이 자체 라우팅하므로 짧은 TTL 권장
거의 변경 안 하는 레코드 (NS 등)86400 (24시간)안정성 극대화, 서버 부하 최소화
💡
마이그레이션 필수 패턴: 서버 IP를 변경하기 전에 반드시 TTL을 낮춰야 한다. 예를 들어, TTL이 86400(24시간)인 상태에서 IP를 변경하면 최악의 경우 24시간 동안 구 IP로 트래픽이 갈 수 있다. 변경 48시간 전에 TTL을 300(5분)으로 줄이고, 변경 후 안정되면 다시 올리는 것이 정석이다.

6. DNS 보안: 전화번호부가 조작된다면

DNS 스푸핑 공격을 가짜 도로 표지판으로 비유한 일러스트 — 악당이 진짜 표지판을 바꿔치기하고 DNSSEC 방패가 지키는 모습

DNS는 1983년에 설계되었다. 당시에는 보안이 주요 고려사항이 아니었다. DNS 질의와 응답은 기본적으로 평문(plaintext) UDP로 전송된다. 이것이 다양한 보안 위협의 원인이 된다.

DNS 쿼리를 해커로부터 지키는 방패 수호자

DNS 스푸핑 (DNS Spoofing / Cache Poisoning)

공격자가 DNS 리졸버의 캐시에 가짜 IP 주소를 주입하는 공격. 사용자가 bank.com을 방문하려 하면 공격자의 피싱 사이트로 연결된다.

사용자: "bank.com의 IP가 뭐야?"
리졸버가 권한 있는 서버에 질의
공격자가 가짜 응답을 먼저 보냄: "bank.com = 6.6.6.6 (공격자 서버)"
리졸버가 가짜 IP를 캐시에 저장
이후 모든 사용자가 피싱 사이트로 연결 (TTL 동안 지속)

2008년, 보안 연구자 Dan Kaminsky가 DNS 캐시 포이즈닝의 치명적인 취약점을 발견했다. 이 발견은 인터넷 역사상 가장 큰 보안 사건 중 하나로, DNS 보안 개선의 계기가 되었다.

DNSSEC (DNS Security Extensions)

DNSSEC은 DNS 응답에 디지털 서명을 추가하여 응답의 진위를 검증하는 프로토콜이다. 1997년에 처음 제안되었고(RFC 2065), 2005년에 현재 표준(RFC 4033-4035)이 확립되었다.

서명 권한 있는 서버: 자신의 DNS 레코드에 비밀키로 디지털 서명을 추가. RRSIG(Resource Record Signature) 레코드로 배포.
체인 신뢰 체인(Chain of Trust): 루트 → TLD → 도메인 순으로 상위가 하위의 공개키를 보증. DS(Delegation Signer) 레코드로 연결.
검증 리졸버: 응답을 받으면 공개키로 서명을 검증. 서명이 유효하지 않으면 응답을 거부. 위조된 DNS 응답 차단.

DNSSEC의 한계: 응답의 무결성(integrity)은 보장하지만, 기밀성(confidentiality)은 보장하지 않는다. DNS 질의 내용 자체는 여전히 평문으로 전송된다. 즉, 누군가 도청하면 "이 사용자가 어떤 사이트를 방문하는가"를 알 수 있다.

DNS over HTTPS (DoH)와 DNS over TLS (DoT)

DNSSEC이 응답의 무결성을 보장한다면, DoH와 DoT은 기밀성을 보장한다.

방식포트암호화특징
일반 DNSUDP 53없음 (평문)전통적 방식. 도청, 조작 가능
DoT (DNS over TLS)TCP 853TLS 암호화전용 포트 사용. 차단 감지 쉬움
DoH (DNS over HTTPS)TCP 443HTTPS 암호화일반 HTTPS 트래픽과 구별 불가. 차단 어려움

DoH는 DNS 질의를 일반 HTTPS 트래픽에 섞어 보내므로, ISP나 네트워크 관리자가 DNS 질의를 감시하거나 차단하기 어렵다. Chrome, Firefox, Safari 등 주요 브라우저가 DoH를 기본 지원하며, Cloudflare(1.1.1.1)와 Google(8.8.8.8)이 DoH 서비스를 제공한다.

💡
논란: DoH에 대해서는 찬반이 있다. 개인정보 보호 관점에서는 긍정적이지만, 기업 보안팀이나 부모 제어(parental control) 관점에서는 DNS 기반 필터링이 무력화되는 문제가 있다. 2019년 영국 ISP들은 DoH를 기본 활성화한 Mozilla를 "인터넷 악당(Internet Villain)"으로 지목하기도 했다.

7. DNS 도구: 터미널에서 직접 확인하기

DNS를 이해하는 가장 좋은 방법은 직접 질의해 보는 것이다. 터미널에서 사용할 수 있는 핵심 도구 세 가지를 소개한다.

nslookup

가장 기본적인 DNS 조회 도구. Windows, macOS, Linux 모두에서 사용 가능하다.

nslookup 기본 사용법
$ nslookup google.com
Server: 168.126.63.1 ← 사용 중인 DNS 리졸버
Address: 168.126.63.1#53

Non-authoritative answer: ← 캐시된 결과 (권한 있는 서버에서 직접 온 게 아님)
Name: google.com
Address: 142.250.196.110

특정 레코드 타입을 조회하려면:

nslookup 레코드 타입별 조회
$ nslookup -type=MX google.com ← 메일 서버 조회
$ nslookup -type=TXT google.com ← TXT 레코드 조회
$ nslookup -type=NS google.com ← 네임서버 조회
$ nslookup google.com 8.8.8.8 ← 특정 DNS 서버로 질의

dig (Domain Information Groper)

DNS 전문가들이 가장 많이 쓰는 도구. 상세한 정보를 제공하며, 스크립팅에도 유용하다. macOS와 Linux에 기본 설치되어 있다.

dig 기본 사용법
$ dig google.com

;; QUESTION SECTION:
;google.com. IN A

;; ANSWER SECTION:
google.com. 300 IN A 142.250.196.110

;; Query time: 12 msec ← 질의 소요 시간
;; SERVER: 168.126.63.1#53 ← 사용된 DNS 서버
;; MSG SIZE rcvd: 55

dig의 진정한 파워는 +trace 옵션에 있다. DNS 질의 과정을 루트부터 단계별로 추적할 수 있다.

dig +trace: DNS 질의 추적
$ dig +trace www.example.com

;; Received 239 bytes from 168.126.63.1 in 5 ms ← 리졸버에서 루트 서버 목록 수신

. 518400 IN NS a.root-servers.net.
. 518400 IN NS b.root-servers.net.
...

com. 172800 IN NS a.gtld-servers.net. ← 루트가 .com TLD 서버를 알려줌

example.com. 172800 IN NS a.iana-servers.net. ← TLD가 권한 있는 서버를 알려줌

www.example.com. 86400 IN A 93.184.216.34 ← 최종 응답!

host

가장 간결한 DNS 조회 도구. 빠른 확인에 적합하다.

host 명령어
$ host google.com
google.com has address 142.250.196.110
google.com has IPv6 address 2404:6800:4004:81f::200e
google.com mail is handled by 10 smtp.google.com.

$ host -t NS google.com ← 네임서버만 조회
google.com name server ns1.google.com.
google.com name server ns2.google.com.
google.com name server ns3.google.com.
google.com name server ns4.google.com.

언제 어떤 도구를 쓸 것인가

상황추천 도구이유
빠르게 IP 확인host한 줄로 결과 출력. 스크립트에서 파싱 쉬움
Windows에서 DNS 조회nslookupWindows 기본 내장. 별도 설치 불필요
상세한 DNS 디버깅digTTL, 응답 시간, 섹션별 상세 정보 제공
DNS 질의 경로 추적dig +trace루트부터 최종 서버까지 단계별 추적 가능
DNSSEC 검증dig +dnssecRRSIG 레코드와 서명 검증 상태 확인

8. 실제 사건으로 보는 DNS의 중요성

DNS가 얼마나 중요한 인프라인지는 장애가 발생했을 때 적나라하게 드러난다.

Dyn DDoS 공격 (2016년 10월 21일)

인터넷 역사상 가장 유명한 DNS 사건. Mirai 봇넷이 DNS 서비스 업체 Dyn에 대규모 DDoS 공격을 감행했다.

원인 Mirai 봇넷: 보안이 취약한 IoT 기기(CCTV, 공유기, DVR) 약 10만 대가 감염. 기본 비밀번호(admin/admin)를 그대로 사용한 기기들이 봇넷에 편입됨.
공격 1.2Tbps 규모 DDoS: Dyn의 DNS 서버에 초당 수천만 건의 DNS 질의를 퍼부음. 당시 사상 최대 규모의 DDoS 공격.
영향 미국 인터넷 절반 마비: Dyn을 DNS 서비스로 사용하던 Twitter, Netflix, Spotify, Reddit, GitHub, PayPal, CNN 등이 접속 불가. 약 6시간 동안 미국 동부 지역 인터넷이 사실상 마비.
교훈 DNS 의존도: 하나의 DNS 서비스에 의존하는 것의 위험성이 입증됨. 이후 많은 기업이 멀티 DNS 전략(복수의 DNS 제공자 사용)을 채택.
1.2 Tbps 공격 트래픽 규모 당시 역대 최대 DDoS
~10만 대 감염된 IoT 기기 Mirai 봇넷 규모
~6시간 서비스 장애 시간 미국 동부 중심

Cloudflare 1.1.1.1의 탄생 (2018)

Cloudflare가 1.1.1.1을 공개 DNS로 출시한 것은 단순한 기술 이벤트가 아니었다.

1.1.1.1은 원래 APNIC(아시아태평양 인터넷 주소 관리 기관)이 보유한 IP 주소였지만, 너무 많은 사람이 테스트 용도로 아무 곳에나 1.1.1.1을 입력하는 바람에 "쓰레기 트래픽"에 파묻혀 사실상 사용 불가능한 주소였다. Cloudflare는 APNIC과 협력하여 이 "버린 IP"를 세계에서 가장 빠른 DNS 서비스로 탈바꿈시켰다.

💡
출시일이 4월 1일인 이유: Cloudflare는 2018년 4월 1일(만우절)에 1.1.1.1을 출시했다. IP 주소가 "1.1.1.1"이고 출시일이 4월 1일이라서, 많은 사람이 만우절 장난으로 오해했다. Cloudflare CEO인 Matthew Prince는 "가장 외우기 쉬운 DNS 주소를 가장 기억에 남는 날에 출시했다"고 말했다.

Cloudflare 1.1.1.1의 핵심 가치:

  • 속도: 전 세계 평균 DNS 응답 시간 약 12ms (Google DNS의 ~34ms보다 빠름)
  • 프라이버시: DNS 질의 로그를 24시간 내 삭제. IP 주소를 사용자 추적에 사용하지 않겠다는 약속
  • DoH/DoT 지원: 암호화된 DNS 질의 지원

한국의 DNS 차단 논란 (2019)

2019년 2월, 한국 정부가 HTTPS 차단을 위해 SNI(Server Name Indication) 필드 감시를 도입했다. 이전까지는 DNS 차단만으로 불법 사이트를 차단했지만, 사용자들이 DNS를 변경하면 우회가 가능했다.

이 사건은 DNS와 인터넷 자유에 대한 대중의 관심을 크게 높였다. DNS 변경(8.8.8.8, 1.1.1.1)이 "IT 팁"으로 포털 검색 순위에 오르기도 했으며, DoH에 대한 관심도 급증했다.


9. 클라우드 시대의 DNS: Route 53과 그 너머

클라우드 환경에서 DNS는 단순한 이름 해석을 넘어 트래픽 관리, 장애 대응, 서비스 디스커버리의 핵심 도구가 된다.

AWS Route 53

AWS의 관리형 DNS 서비스. 이름은 DNS가 사용하는 포트 번호 53에서 따왔다. "Route"는 미국의 유명한 도로 Route 66에서 영감을 받았다.

Route 53 핵심 기능
DNS 호스팅 도메인의 DNS 레코드 관리
도메인 등록 도메인 구매 및 갱신
헬스 체크 서버 상태 모니터링
트래픽 라우팅 지연 시간, 지역, 가중치 기반

라우팅 정책

Route 53의 진짜 파워는 라우팅 정책(Routing Policy)에 있다. 단순히 "이 도메인 = 이 IP"가 아니라, 다양한 조건에 따라 다른 IP를 반환할 수 있다.

라우팅 정책동작사용 예시
단순 (Simple)하나의 IP 반환소규모 서비스, 단일 서버
가중치 (Weighted)비율에 따라 트래픽 분배블루/그린 배포 (90%:10%)
지연 시간 (Latency)가장 빠른 리전으로 라우팅글로벌 서비스 최적화
페일오버 (Failover)헬스 체크 실패 시 백업으로 전환고가용성(HA) 아키텍처
지리적 (Geolocation)사용자 위치에 따라 다른 IP 반환국가별 콘텐츠, 규제 준수
다중값 (Multivalue)여러 IP를 반환 + 헬스 체크간이 로드밸런싱

커스텀 도메인과 HTTPS 설정

클라우드에서 서비스를 배포할 때 가장 먼저 하는 일 중 하나가 커스텀 도메인을 연결하는 것이다. 전형적인 흐름은 다음과 같다.

1 도메인 등록: Route 53 또는 가비아 등에서 도메인 구매. (예: core.today)
2 네임서버 설정: 도메인의 NS 레코드를 Route 53 (또는 사용하는 DNS 서비스)의 네임서버로 지정.
3 SSL 인증서 발급: AWS ACM(Certificate Manager)에서 무료 SSL 인증서 발급. 도메인 소유권 인증을 위해 CNAME 레코드를 추가해야 함.
4 A/ALIAS 레코드 생성: 도메인을 CloudFront, ALB, 또는 EC2의 IP로 연결. Route 53의 ALIAS 레코드로 AWS 리소스에 직접 매핑 가능.
5 헬스 체크 설정: 서버 상태를 주기적으로 모니터링. 장애 감지 시 자동으로 페일오버 실행.

ALIAS 레코드: Route 53의 킬러 기능

앞서 CNAME은 루트 도메인에 사용할 수 없다고 했다. 그렇다면 example.com(www 없이)을 CloudFront나 ALB에 연결하려면? Route 53의 ALIAS 레코드가 답이다.

ALIAS 레코드는 AWS 전용 기능으로, CNAME처럼 다른 도메인을 가리키면서도 루트 도메인에 사용할 수 있다. 또한 Route 53 → AWS 리소스 간 ALIAS 질의에는 추가 비용이 없다.

CNAME vs ALIAS
CNAME (RFC 표준)
루트 도메인 사용 불가 www.example.com → OK / example.com → X
vs
ALIAS (Route 53 전용)
루트 도메인 사용 가능 example.com → CloudFront, ALB, S3 직접 연결

Route 53 헬스 체크와 장애 대응

Route 53은 전 세계 여러 위치에서 주기적으로 엔드포인트의 상태를 확인한다. 헬스 체크 실패가 감지되면 DNS 응답에서 해당 엔드포인트를 제거하여 트래픽을 정상 서버로 자동 전환한다.

Route 53 헬스 체커 (전 세계 분산)
↓ 10~30초마다 HTTP/HTTPS/TCP 체크
서울 서버: 정상 (200 OK) 도쿄 서버: 장애 (Timeout)
↓ 페일오버 자동 실행
DNS 응답에서 도쿄 서버 제거 → 모든 트래픽이 서울로

이 메커니즘은 서버 장애뿐 아니라 리전 장애(DR, Disaster Recovery)에도 적용된다. 서울 리전 전체가 다운되면 DNS 레벨에서 도쿄나 싱가포르로 자동 전환할 수 있다.


10. DNS 관련 자주 묻는 질문

"DNS 전파에 48시간이 걸린다"는 진짜인가?

반은 맞고 반은 틀리다. DNS 레코드를 변경하면 전 세계 캐시가 모두 갱신되는 데 최대 TTL 만큼 시간이 걸릴 수 있다. TTL이 48시간(172800초)이면 이론적으로 48시간까지 걸릴 수 있지만, 현대 DNS 설정에서 TTL을 48시간으로 설정하는 경우는 드물다. 일반적으로 TTL이 300~3600초이므로, 실제 전파는 5분~1시간 내에 완료된다.

DNS 설정을 변경하면 속도가 빨라지는가?

"구글 DNS(8.8.8.8)로 바꾸면 인터넷이 빨라진다"는 말을 들어본 적이 있을 것이다. 정확히 말하면, DNS 응답 속도가 빨라질 수 있다. 하지만 DNS 질의는 웹페이지 로딩의 극히 일부이므로, 체감 속도 변화는 미미한 경우가 많다. 다만, ISP의 DNS가 불안정하거나 느린 경우에는 확실한 개선 효과가 있다.

개인 도메인이 필요한가?

클라우드/DX 전문가를 목표로 한다면, 개인 도메인을 하나 구매하고 DNS를 직접 설정해 보는 것을 강력히 권한다. .com 도메인은 연간 약 12,000~15,000원, .kr은 약 18,000원 정도다. DNS 레코드를 직접 생성하고, 서브도메인을 나누고, SSL 인증서를 발급하는 과정이 최고의 학습이다.


마치며: 보이지 않는 인프라, 보이는 실력

우리가 주소창에 URL을 입력하고 Enter를 누르는 그 순간, DNS는 수십 ms 안에 이 모든 일을 처리한다. 루트 서버에서 시작해 TLD를 거쳐 권한 있는 네임서버에 도달하고, 그 결과를 여러 계층의 캐시에 저장한다. 1983년 Paul Mockapetris가 설계한 이 시스템은 40년이 지난 지금도 인터넷의 근간을 이루고 있다.

DNS를 이해한다는 것은 단순히 "도메인을 IP로 바꾼다"는 것을 아는 수준을 넘어선다. 그것은 인터넷이 어떻게 동작하는가의 첫 번째 조각을 이해하는 것이다.

1983 DNS 탄생 RFC 882/883, Paul Mockapetris
13 루트 서버 클러스터 Anycast로 전 세계 수백 노드에 분산
< 50ms 대부분의 DNS 질의 시간 캐싱 덕분에 극도로 빠름

클라우드와 DX를 공부하면서 가장 먼저 만나게 되는 기술이 DNS다. EC2를 만들면 도메인을 연결해야 하고, S3 정적 웹사이트를 배포하면 CNAME을 설정해야 하고, 이메일을 보내려면 MX와 TXT 레코드를 다뤄야 한다.

지금 당장 할 수 있는 것: 터미널을 열고 dig google.com +trace를 실행해 보자. DNS 질의가 루트 서버에서 시작해서 최종 응답에 도달하는 전체 여정을 눈으로 확인할 수 있다. 그 과정을 한 번 직접 보면, DNS는 더 이상 추상적인 개념이 아니라 손에 잡히는 기술이 된다.

인터넷의 전화번호부, DNS. 이제 당신은 그 전화번호부가 어떻게 만들어지고, 어떻게 작동하며, 왜 중요한지를 안다.