DNS 조회 방법: 도메인에서 IP 주소 찾기
DNS 조회 방법: 도메인에서 IP 주소 찾기
웹 브라우저에 google.com을 입력하면, 어떻게 구글 서버의 IP 주소를 찾아 접속하게 될까요? 이 과정의 핵심이 바로 **DNS(Domain Name System)**입니다. DNS는 “인터넷의 전화번호부”라고 불리며, 사람이 읽을 수 있는 도메인 이름을 컴퓨터가 이해하는 IP 주소로 변환합니다.
이 글에서는 DNS의 기본 원리부터 레코드 타입, 실용적인 조회 도구, 그리고 캐싱 메커니즘까지 상세하게 다루겠습니다.
DNS란 무엇인가?
**DNS(Domain Name System)**는 도메인 이름(예: example.com)을 IP 주소(예: 93.184.216.34)로 변환하는 분산 데이터베이스 시스템입니다.
인터넷의 모든 통신은 IP 주소를 기반으로 이루어지지만, 사람이 142.250.196.110과 같은 숫자를 외우는 것은 비현실적입니다. DNS 덕분에 우리는 google.com 같은 읽기 쉬운 이름을 사용하면서도 실제로는 IP 주소로 통신할 수 있습니다.
DNS 조회 과정 (Resolution Flow)
도메인 이름이 IP 주소로 변환되는 과정은 여러 단계를 거칩니다:
- 브라우저 캐시 확인: 브라우저가 이전에 조회한 결과를 저장하고 있는지 확인
- 운영체제 캐시 확인: OS의 DNS 캐시에 기록이 있는지 확인
- 재귀 리졸버(Recursive Resolver)에 질의: ISP의 DNS 서버 또는
8.8.8.8(Google),1.1.1.1(Cloudflare) 같은 퍼블릭 DNS에 질의 - 루트 서버 질의: 리졸버가 루트 네임서버(전 세계 13개 클러스터)에 TLD 정보를 질의
- TLD 서버 질의:
.com,.kr등 최상위 도메인 서버에 권한 네임서버 정보를 질의 - 권한 네임서버 질의: 도메인의 최종 DNS 레코드를 가진 서버에서 IP 주소를 응답
- 결과 반환 및 캐싱: IP 주소가 브라우저까지 전달되고, 각 단계에서 캐싱
이 전체 과정은 보통 20~120밀리초 이내에 완료됩니다. 캐시에 이미 결과가 있다면 1밀리초 미만으로 응답됩니다.
DNS 레코드 타입
DNS에는 다양한 레코드 타입이 있으며, 각각 다른 용도로 사용됩니다. 가장 중요한 레코드 타입을 살펴보겠습니다.
A 레코드 (Address Record)
가장 기본적인 DNS 레코드로, 도메인을 IPv4 주소에 매핑합니다.
example.com. IN A 93.184.216.34
- 하나의 도메인에 여러 A 레코드를 설정하여 로드 밸런싱 가능
- 웹사이트 접속 시 가장 먼저 조회되는 레코드
- 서브도메인별로 다른 IP를 설정할 수 있음 (예:
api.example.com→ 다른 서버)
AAAA 레코드 (IPv6 Address Record)
A 레코드의 IPv6 버전으로, 도메인을 IPv6 주소에 매핑합니다.
example.com. IN AAAA 2606:2800:220:1:248:1893:25c8:1946
- IPv6 환경에서 필수적인 레코드
- “AAAA”라는 이름은 IPv6 주소가 IPv4의 4배 길이(128비트 vs 32비트)이기 때문
- 많은 최신 웹사이트는 A 레코드와 AAAA 레코드를 모두 설정 (듀얼 스택)
IPv4와 IPv6의 차이에 대해서는 IP 주소 완전 가이드에서 더 자세히 다루고 있습니다.
MX 레코드 (Mail Exchange Record)
이메일 수신을 위한 메일 서버를 지정합니다.
example.com. IN MX 10 mail1.example.com.
example.com. IN MX 20 mail2.example.com.
- 우선순위(Priority) 값이 낮을수록 먼저 시도됨
- 여러 MX 레코드를 설정하여 장애 시 대체 서버로 전환 가능
- 이메일 시스템의 핵심 레코드
TXT 레코드 (Text Record)
임의의 텍스트 데이터를 저장하며, 주로 검증 및 보안 목적으로 사용됩니다.
example.com. IN TXT "v=spf1 include:_spf.google.com ~all"
주요 용도:
- SPF (Sender Policy Framework): 이메일 발송이 허가된 서버 목록을 지정하여 스팸 방지
- DKIM (DomainKeys Identified Mail): 이메일 서명의 공개키 저장
- DMARC: 이메일 인증 정책 설정
- 도메인 소유권 검증: Google Search Console, SSL 인증서 발급 등에서 사용
- 사이트 검증:
google-site-verification=xxx같은 형태
NS 레코드 (Name Server Record)
도메인의 권한 네임서버를 지정합니다. DNS 위임(delegation)의 핵심 레코드입니다.
example.com. IN NS ns1.example.com.
example.com. IN NS ns2.example.com.
- 최소 2개 이상의 NS 레코드를 설정하는 것이 권장됨 (이중화)
- 도메인 등록 시 반드시 설정해야 하는 레코드
- 서브도메인의 DNS 관리를 다른 네임서버에 위임할 때도 사용
CNAME 레코드 (Canonical Name Record)
도메인을 다른 도메인의 별칭으로 설정합니다.
www.example.com. IN CNAME example.com.
blog.example.com. IN CNAME hosting.provider.com.
www.example.com을example.com으로 연결할 때 많이 사용- CNAME이 가리키는 도메인의 A/AAAA 레코드를 최종적으로 참조
- 주의: 루트 도메인(zone apex)에는 CNAME을 사용할 수 없음. 일부 DNS 제공자는 이를 위해 ALIAS 또는 ANAME 레코드를 지원
- CNAME과 다른 레코드(A, MX 등)는 동일 이름에 공존할 수 없음
기타 레코드 타입
| 레코드 | 용도 | 예시 |
|---|---|---|
| SRV | 서비스 위치 지정 | SIP, XMPP 서버 |
| CAA | SSL 인증서 발급 권한 제한 | 0 issue "letsencrypt.org" |
| PTR | IP → 도메인 역방향 조회 | 메일 서버 인증 |
| SOA | 도메인 관리 정보 | 시리얼 번호, 갱신 주기 |
명령줄 DNS 조회 도구
터미널에서 DNS 레코드를 직접 조회할 수 있는 두 가지 주요 도구를 알아보겠습니다.
nslookup
nslookup은 Windows, macOS, Linux 모두에서 기본 제공되는 DNS 조회 도구입니다.
# 기본 A 레코드 조회
nslookup example.com
# 특정 레코드 타입 조회
nslookup -type=MX example.com
# 특정 DNS 서버를 지정하여 조회
nslookup example.com 8.8.8.8
# AAAA (IPv6) 레코드 조회
nslookup -type=AAAA example.com
# TXT 레코드 조회
nslookup -type=TXT example.com
nslookup의 출력은 간결하고 읽기 쉬워 빠른 확인에 적합합니다.
dig
**dig(Domain Information Groper)**는 더 상세한 정보를 제공하는 고급 DNS 조회 도구입니다. macOS와 Linux에 기본 포함되어 있으며, Windows에서는 BIND를 설치하면 사용 가능합니다.
# 기본 조회
dig example.com
# 특정 레코드 타입 조회
dig example.com MX
# 간단한 출력 (+short 옵션)
dig example.com +short
# 전체 해석 경로 추적 (+trace 옵션)
dig example.com +trace
# 특정 DNS 서버 지정
dig @8.8.8.8 example.com
# 모든 레코드 조회
dig example.com ANY
dig의 출력에는 응답 섹션(ANSWER SECTION), 권한 섹션(AUTHORITY SECTION), 추가 섹션(ADDITIONAL SECTION), 쿼리 시간 등 풍부한 정보가 포함됩니다.
두 도구의 비교
| 항목 | nslookup | dig |
|---|---|---|
| 기본 제공 OS | Windows, macOS, Linux | macOS, Linux |
| 출력 상세도 | 간결 | 매우 상세 |
| DNSSEC 지원 | 제한적 | 완전 지원 |
| 추적 기능 | 없음 | +trace 옵션 |
| 사용 난이도 | 쉬움 | 중급 |
| 권장 용도 | 빠른 확인 | 문제 해결, 심층 분석 |
TTL과 DNS 캐싱
**TTL(Time To Live)**은 DNS 레코드가 캐시에 보관되는 시간을 초 단위로 지정합니다.
example.com. 300 IN A 93.184.216.34
위 예시에서 TTL은 **300초(5분)**입니다. 이는 DNS 리졸버가 이 결과를 5분 동안 캐시에 저장한 뒤, 만료되면 다시 조회한다는 의미입니다.
TTL 설정 전략
| TTL 값 | 장점 | 단점 | 적합한 상황 |
|---|---|---|---|
| 짧음 (60~300초) | 변경 사항 빠른 반영 | DNS 쿼리 증가, 지연 증가 | IP 변경이 잦은 서비스, 장애 대응 |
| 보통 (3600초 = 1시간) | 균형 잡힌 성능 | — | 대부분의 일반 서비스 |
| 김 (86400초 = 1일) | 캐시 적중률 높음, 빠른 응답 | 변경 반영 느림 | 거의 변하지 않는 레코드 |
DNS 레코드를 변경할 예정이라면, 미리 TTL을 낮춰 놓는 것이 좋습니다. 예를 들어 서버 이전 전에 TTL을 60초로 줄여 놓으면, 이전 후 빠르게 새 IP로 전환됩니다.
DNS 캐시 계층
DNS 결과는 여러 단계에서 캐싱됩니다:
- 브라우저 캐시: Chrome은
chrome://net-internals/#dns에서 확인 가능 - 운영체제 캐시:
ipconfig /flushdns(Windows) 또는sudo dscacheutil -flushcache(macOS)로 초기화 - 라우터 캐시: 라우터 재부팅으로 초기화
- ISP 리졸버 캐시: 사용자가 직접 제어 불가
DNS 변경 후 반영이 안 되는 것처럼 보인다면, 대부분 캐시 때문입니다. 로컬 캐시를 초기화하거나, TTL이 만료될 때까지 기다려야 합니다.
웹에서 DNS 조회하기
명령줄이 익숙하지 않다면, 웹 기반 DNS 조회 도구를 사용할 수 있습니다.
ip.utilo.kr의 DNS 조회 도구에서는 도메인을 입력하면 A, AAAA, MX, TXT, NS, CNAME 등 주요 DNS 레코드를 한눈에 확인할 수 있습니다. 별도의 소프트웨어 설치 없이 브라우저에서 바로 사용 가능합니다.
IP 주소의 기본 개념이 궁금하다면 IP 주소 완전 가이드를, 공인 IP와 사설 IP의 차이를 알고 싶다면 공인 IP vs 사설 IP를 참고하세요.