DNS 정리: 구조, 질의 방식, 레코드, 이중화와 위임
도메인 계층 구조와 질의 과정부터 주요 레코드, TTL, 마스터-슬레이브 이중화, 도메인 위임과 GSLB까지 정리한다.
시리즈 · 네트워크7 / 12
- OSI 7 Layer와 계층별 역할, ARP
- IP 주소: IPv4와 IPv6, NAT, 체크섬
- 라우터: 경로 지정, 브로드캐스트 컨트롤, 라우팅과 스위칭
- DHCP 동작 방식과 UDP를 사용하는 이유
- IP의 한계와 TCP·UDP, 3-Way Handshake
- TCP 4-Way Handshake와 TIME_WAIT
- DNS 정리: 구조, 질의 방식, 레코드, 이중화와 위임
- 로드 밸런서: 구성 방식, 헬스 체크, L4와 L7
- HTTP 메서드와 상태 코드: 멱등성, POST와 PUT의 차이
- HTTP의 Stateless·Connectionless와 쿠키, 세션
- HTTP/1.1, HTTP/2, HTTP/3 비교
- 소켓과 포트, 그리고 웹소켓
DNS의 위치: 컨트롤 프로토콜
네트워크 프로토콜은 역할에 따라 둘로 나눌 수 있다.
- 데이터 프로토콜: 실제로 데이터를 실어 나른다.
- 컨트롤 프로토콜: 통신에 직접 관여하지는 않지만, 처음 통신 관계를 맺거나 유지하도록 도와 데이터 프로토콜이 잘 동작하게 한다. TCP/IP 체계의 주요 컨트롤 프로토콜로 ARP, ICMP, DNS가 있다.
DNS (Domain Name System)
DNS는 도메인 주소를 IP 주소로 변환한다.
- 일반 사용자에게는 IP 주소보다 도메인 주소가 익숙하다.
- 서버 IP가 바뀌어도 쉽게 대처할 수 있다.
인터넷 연결뿐 아니라 내부 시스템의 서비스 간 연결에도 DNS를 사용한다. 보통 외부용 DNS와 내부 서비스 간 이름 풀이를 위한 내부 DNS를 분리해 운영한다.
도메인 구조

www.naver.com을 예로 들면 다음과 같다.
www: Third-Level Domainnaver: Second-Level Domaincom: Top-Level Domain (TLD)- Root(
.)는 생략한다.
도메인은 최대 255바이트까지 쓸 수 있고, 문자는 알파벳, 숫자, -만 사용할 수 있으며 대소문자를 구분하지 않는다.

Root Domain
- 도메인을 구성하는 최상위 영역이다.
- DNS 서버는 질의받은 도메인의 값을 직접 갖고 있거나 캐시에 저장된 정보로 응답하고, 정보가 없으면 루트 DNS에 질의한다.
- 루트 DNS는 전 세계에 13개가 있다. DNS 서버를 설치하면 루트 DNS의 IP 주소가 기록된 힌트 파일이 함께 들어 있어 따로 설정할 필요가 없다.
Top-Level Domain (TLD)
IANA는 TLD를 여섯 가지 유형으로 구분한다.
- Generic (gTLD): 일반 최상위 도메인 (
.com,.edu,.gov,.int,.mil,.net,.org) - Country-code (ccTLD): 국가 최상위 도메인. 우리나라는
.kr - Sponsored (sTLD): 특정 목적을 위한 스폰서를 두고 있는 최상위 도메인
- Infrastructure: 운용상 중요한 인프라 식별자 공간을 위한 전용 도메인
- Generic-restricted (grTLD): 특정 기준을 충족하는 사람이나 단체만 사용할 수 있는 도메인
- Test (tTLD): IDN 개발 과정에서 테스트 목적으로 사용
DNS 질의
IP 주소를 찾아가는 과정
github.com에 접속한다고 하면 다음 순서로 IP 주소를 찾는다.
- hosts 파일 확인: hosts 파일은 IP 주소와 호스트 이름을 매칭해 둔 텍스트 파일이다. 해당 컴퓨터 안에서는 이 파일이 우선권을 갖는다.
- 로컬 DNS 캐시 확인: hosts 파일에 없으면 컴퓨터에 저장된 DNS 캐시에 IP 주소가 있는지 확인한다.
- 로컬 DNS 서버에 질의: 캐시에도 없으면 설정된 DNS 서버에 묻는다. 통신사가 제공하는 DNS나 Public DNS가 여기에 해당한다. 로컬 DNS 서버에 해당 도메인이 캐싱되어 있으면 바로 응답하고, 없으면 루트 DNS부터 차례로 질의한다.
Recursive Query와 Iterative Query
레벨마다 담당 네임 서버가 있고, 각 서버는 바로 아래 레벨 도메인의 네임 서버 주소만 안다.
- Root 서버는 Top-Level의 정보를 안다.
- Top-Level 서버는 Second-Level의 정보를 안다.
따라서 질의가 들어오면 Root부터 시작해 단계적으로 IP 주소를 찾아간다.
클라이언트 → DNS 서버 → Root DNS → DNS 서버 → TLD DNS → DNS 서버 → ...
- Recursive Query: 클라이언트 → DNS 서버. 최종 결과를 돌려 달라고 요청한다.
- Iterative Query: DNS 서버 → Root, TLD 등 각 네임 서버. 단계별로 다음에 물어볼 곳을 받아 가며 반복 질의한다.
TTL (Time To Live)
DNS에 질의해 응답받은 결과를 캐시에 유지하는 시간이다.
- TTL이 길면 반복 질의에 걸리는 시간이 줄어 전체적인 응답 시간이 단축된다.
- 반면 도메인 정보가 변경되었을 때 갱신이 그만큼 지연된다.
- 기본값은 윈도우가 1시간, 리눅스가 3시간이다.
DNS 레코드
A 레코드 (IPv4)
- 도메인 주소를 IP 주소로 변환하는 기본 레코드이다.
- 하나의 A 레코드는 도메인 주소 하나와 IP 주소 하나를 1:1로 매핑한다.
- 같은 도메인으로 A 레코드를 여러 개 만들어 서로 다른 IP에 매핑할 수 있다.
- 반대로 여러 도메인에 같은 IP를 매핑할 수도 있다.
서버 한 대에서 여러 웹 서비스를 구동할 때는 여러 도메인에 같은 IP를 매핑하고, HTTP 헤더의 Host 필드로 도메인을 구분한다.
AAAA 레코드 (IPv6)
역할은 A 레코드와 같고, IPv6 주소 체계에서 사용한다.
CNAME 레코드 (Canonical Name)
- 별칭을 쓸 수 있게 해 주는 레코드로, IP가 아닌 도메인 주소에 매핑한다.
- 네임 서버가 CNAME 레코드에 대한 질의를 받으면, 설정된 도메인을 내부적으로 다시 질의해 얻은 IP를 응답한다.
naver.com과 www.naver.com을 모두 A 레코드로 매핑하면 IP가 바뀔 때 두 레코드를 다 고쳐야 한다. naver.com만 A 레코드로 두고 www.naver.com을 naver.com에 대한 CNAME으로 매핑하면 naver.com만 고치면 된다.
SOA 레코드 (Start Of Authority)
- 도메인 영역에 대한 권한을 나타내는 레코드로, 현재 네임 서버가 이 도메인 영역의 관리 주체임을 뜻한다. 해당 도메인은 다른 네임 서버에 질의하지 않고 직접 응답한다.
- 필수 항목이라 반드시 만들어야 한다.
- 도메인 동기화에 필요한 타이머 값과 TTL, 도메인의 네임 서버와 관리자 정보도 SOA 레코드에서 설정한다.
PTR 레코드 (Pointer)
- A 레코드와 반대로, IP 주소에 대한 질의에 도메인 주소로 응답하는 레코드이다.
- 하나의 IP 주소는 하나의 도메인 주소만 가질 수 있다.
- 화이트 도메인 구성에 사용한다.
이 외에 NS(Name Server), MX(Mail eXchange), TXT 레코드가 있다.
DNS 이중화: Master와 Slave
DNS의 마스터와 슬레이브는 우선순위가 아니라 도메인의 존(Zone) 파일을 직접 관리하는지로 구분한다.
- Master: 존 파일을 직접 생성해 도메인 정보를 관리한다. 인가받지 않은 DNS 서버가 도메인 정보를 복제해 가지 못하도록 슬레이브 서버를 지정해 복제를 제한한다. 설정하지 않으면 누구나 복제할 수 있어 보안 문제가 된다.
- Slave: 마스터에 만들어진 존 파일을 복제한다(영역 전송).
일반적인 이중화와 다른 점
네트워크 서비스나 시스템의 일부가 정상 동작하지 않아도 서비스가 지속되도록 고가용성 기술을 사용한다. 일반적으로 쓰는 구조는 다음 두 가지다.
- Active-Active: 두 노드가 동시에 서비스하고, 한 노드에 문제가 생기면 다른 노드가 계속 서비스한다.
- Active-Standby: 액티브 노드만 서비스하고, 스탠바이 노드는 대기하다가 액티브에 장애가 나면 서비스를 시작한다.
두 방식 모두 액티브 장비에 문제가 생겨도 나머지 장비가 그대로 서비스를 이어 간다. DNS의 마스터-슬레이브는 이와 다르다. 마스터 서버에 문제가 생기고 일정 시간이 지나면 슬레이브 서버도 도메인 질의에 정상적으로 응답하지 못한다. 이 시간을 만료 시간이라 하며 SOA 레코드에 설정한다. 만료 시간 안에 슬레이브가 마스터에서 존 정보를 받아 오지 못하면 슬레이브의 존 정보는 사용할 수 없게 된다.
도메인 위임 (DNS Delegation)
도메인을 관리하는 네임 서버가 모든 레코드를 직접 관리하지 않고, 일부 영역을 다른 곳에서 관리하도록 넘기는 방식이다. 특정 영역의 관리 주체를 분리할 때 쓰며, CDN이나 GSLB를 사용하는 경우가 대표적이다.
예를 들어 naver.com을 관리하는 네임 서버에서 하위에 post 영역을 추가하고 이 영역을 GSLB에서 관리하려면, post의 관리 권한을 GSLB에 넘겨준다.
GSLB (Global Server Load Balancing)
- DNS처럼 도메인 질의에 응답하면서, 로드 밸런서처럼 도메인에 연결된 서비스가 정상인지 헬스 체크를 수행한다.
- 지리적으로 가깝거나 정상 응답할 수 있는 서버로 안내해 빠르게 서비스를 제공한다. 분산 처리에 유용하다.