문서의 각 단락이 어느 리비전에서 마지막으로 수정되었는지 확인할 수 있습니다. 왼쪽의 정보 칩을 통해 작성자와 수정 시점을 파악하세요.


DNS(Domain Name System)는 사람이 읽을 수 있는 도메인 이름(예: www.example.com)을 컴퓨터가 이해하는 IP 주소(예: 192.0.2.1)로 변환하는 전 세계적인 분산형 디렉터리 서비스이다. 인터넷의 전화번호부 역할을 하여, 사용자가 복잡한 숫자 주소를 기억하지 않고도 웹사이트에 접속하거나 이메일을 보내는 것을 가능하게 한다.
이 시스템은 1980년대 초, ARPANET에서 사용되던 단일 호스트 파일(HOSTS.TXT)의 한계를 극복하기 위해 폴 모카페트리스와 존 포스터에 의해 고안되었다[1]. DNS는 중앙 집중식 관리 대신 계층적이고 분산된 구조를 채택하여 확장성과 견고성을 제공한다. 도메인 이름 공간은 점(.)으로 구분된 계층 구조로 구성되며, 최상위에는 루트 도메인이 위치한다.
DNS의 핵심 기능은 이름 해석(Name Resolution)이다. 웹 브라우저에 도메인 이름을 입력하면, 사용자의 컴퓨터는 먼저 로컬 DNS 캐시를 확인한 후, 필요한 경우 DNS 서버에 질의를 보내 해당 도메인의 IP 주소를 얻는다. 이 과정은 보이지 않는 곳에서 신속하게 이루어져 사용자는 단순히 웹페이지가 로드되는 결과만을 경험한다.
DNS는 단순한 주소 변환을 넘어, 이메일 서버 위치 지정(MX 레코드), 도메인 별명 지정(CNAME 레코드), 서비스 발견(SRV 레코드) 등 다양한 목적으로 사용되는 인터넷 인프라의 필수 기반이다. 현대 인터넷의 기능적 토대를 형성하는 가장 중요한 프로토콜 중 하나로 평가받는다.

DNS는 사람이 읽을 수 있는 도메인 이름을 컴퓨터가 이해하는 IP 주소로 변환하는 분산형 데이터베이스 시스템이다. 이 변환 과정을 '이름 해석'이라고 하며, 전 세계 수많은 DNS 서버가 계층 구조를 이루며 협력하여 수행한다. 사용자가 웹 브라우저에 도메인 이름을 입력하면, 해당 이름에 대한 IP 주소를 찾기 위해 일련의 질의 과정이 시작된다.
작동 과정은 일반적으로 다음과 같은 단계를 거친다. 먼저, 사용자의 컴퓨터(재귀 확인자)는 로컬에 캐시된 정보를 확인하고, 없으면 설정된 로컬 DNS 서버에 질의를 보낸다. 로컬 DNS 서버도 캐시에 정보가 없으면, 루트 DNS 서버부터 탐색을 시작한다. 루트 서버는 해당 도메인의 최상위 도메인(TLD) 서버(예: .com, .net)의 주소를 알려준다. 그다음 TLD 서버는 해당 도메인을 관리하는 권한 있는 네임 서버의 주소를 응답하고, 최종적으로 권한 있는 네임 서버가 정확한 IP 주소(A 레코드 또는 AAAA 레코드)를 제공한다. 이 정보는 질의 경로를 따라 역으로 전달되어 최초 요청자에게 도달한다.
이 과정에는 주로 두 가지 질의 방식이 사용된다. 하나는 클라이언트(재귀 확인자)가 서버에게 최종 답변을 가져올 것을 요청하는 재귀적 질의이다. 다른 하나는 서버가 자신이 알고 있는 최선의 정보(다른 서버의 참조 정보)만을 응답하고, 클라이언트가 직접 그 서버에게 다시 질의하도록 하는 반복적 질의이다. 일반적으로 최종 사용자와 로컬 DNS 서버 사이에는 재귀적 질의가, DNS 서버들 간에는 반복적 질의가 주로 사용된다.
전체 시스템의 효율성을 높이기 위해 DNS 캐싱이 핵심 역할을 한다. 각 단계의 DNS 확인자와 서버는 획득한 응답을 일정 시간(TTL) 동안 로컬에 저장한다. 이후 동일한 질의가 들어오면 캐시된 정보를 즉시 응답하여, 루트 서버부터의 반복적인 조회를 줄이고 전반적인 해석 속도와 네트워크 부하를 개선한다.
DNS 질의는 크게 재귀적 질의와 반복적 질의 두 가지 방식으로 구분된다. 이 두 방식은 DNS 클라이언트와 DNS 서버 간의 상호작용 방식에 차이가 있다.
재귀적 질의에서 클라이언트는 자신이 연결한 DNS 리졸버에게 완전한 답변을 요청한다. 리졸버는 클라이언트를 대신하여 필요한 모든 질의를 수행하고, 최종 IP 주소를 찾아내어 클라이언트에게 단일 응답으로 돌려준다. 이 과정에서 리졸버는 필요한 경우 루트 서버, TLD 서버, 권한 있는 네임서버에 차례로 질의를 진행한다. 일반적인 최종 사용자(예: 웹 브라우저)는 재귀적 질의를 사용한다.
반면, 반복적 질의에서는 서버가 자신이 알고 있는 최선의 정보를 제공하며, 추가 정보가 필요하면 다른 서버의 주소를 안내한다. 클라이언트(또는 리졸버)는 이 안내를 받아 직접 다음 서버에게 질의를 반복한다. 예를 들어, 로컬 DNS 캐시 서버가 루트 서버에 example.com의 주소를 물으면, 루트 서버는 .com TLD 서버의 주소만 알려준다. 그러면 로컬 서버는 .com TLD 서버에게 다시 질의하고, TLD 서버는 example.com을 관리하는 권한 있는 네임서버의 주소를 알려준다. 최종 답변은 권한 있는 네임서버로부터 얻는다.
질의 유형 | 요청자 역할 | 응답자 역할 | 일반적 사용처 |
|---|---|---|---|
재귀적 질의 | 최종 답변 요구 | 답변을 찾는 모든 과정 수행 | 스터브 리졸버(클라이언트) → 재귀 리졸버 |
반복적 질의 | 다음 질의 대상 요구 | 자신이 아는 최선의 정보(답변 또는 참조) 제공 | 재귀 리졸버 → 루트/TLD/권한 있는 서버 |
실제 DNS 조회 과정은 이 두 방식을 혼합하여 사용한다. 최종 사용자의 클라이언트는 재귀 리졸버에게 재귀적 질의를 보내고, 재귀 리졸버는 루트 서버, TLD 서버, 권한 있는 서버에게 반복적 질의를 수행하며 답변을 찾아간다. 이 구조는 서버 부하를 분산시키고 효율적인 질의 처리를 가능하게 한다.
DNS 캐싱은 DNS 질의 응답을 임시로 저장하여, 동일한 질의에 대한 응답 속도를 높이고 상위 DNS 서버의 부하를 줄이는 핵심적인 성능 최적화 기법이다. DNS 클라이언트(스텁 리졸버)와 재귀 리졸버 서버 모두 캐싱을 수행한다.
캐싱의 작동 과정은 다음과 같다. 사용자가 처음으로 example.com을 방문하면, 재귀 리졸버는 필요한 루트 DNS 서버, TLD 서버, 권한 있는 네임서버를 차례로 질의하여 최종 IP 주소를 얻는다. 이 과정에서 얻은 모든 응답(예: .com TLD 서버의 주소, example.com의 권한 있는 서버 주소, 최종 A 레코드 값)은 재귀 리졸버의 캐시에 저장된다. 이후 다른 사용자가 동일한 도메인을 질의하면, 리졸버는 권한 있는 서버에 다시 질의하지 않고 캐시에 저장된 정보를 즉시 반환한다. 이는 응답 시간을 크게 단축시킨다.
캐시에 저장된 정보는 영구적이지 않으며, 각 리소스 레코드에 함께 전달되는 TTL 값에 의해 관리된다. TTL은 초 단위로 지정되며, 해당 시간이 지나면 캐시 항목은 만료되어 삭제된다. 이후 동일한 질의가 들어오면 리졸버는 다시 권한 있는 서버로부터 최신 정보를 조회한다. TTL 설정은 도메인 관리자의 정책에 따라 다르며, 빠른 변경이 필요한 경우 짧게(예: 300초), 안정적인 서비스는 길게(예: 86400초) 설정하는 것이 일반적이다.
캐싱 주체 | 캐시 위치 | 주요 목적 |
|---|---|---|
운영체제/클라이언트 | 로컬 스텁 리졸버 | 동일 시스템 내 애플리케이션의 반복 질의 감소 |
ISP 또는 공공 DNS 서비스 | 재귀 리졸버 서버 | 광범위한 사용자 질의에 대한 응답 가속화 및 외부 트래픽 감소 |
캐싱은 네트워크 효율성을 극대화하지만, 도메인 정보가 변경되었을 때 TTL이 만료되기 전까지는 오래된 정보가 제공될 수 있다는 단점도 있다. 이를 'DNS 전파 지연'이라고 부른다. 또한, 악의적인 공격자가 조작된 데이터를 캐시에 주입하는 DNS 캐시 포이즈닝 공격의 표적이 되기도 한다.

DNS 시스템은 여러 구성 요소가 계층적이고 분산된 방식으로 상호작용하여 작동한다. 핵심 구성 요소는 다양한 유형의 DNS 서버와 서버가 저장하고 응답하는 데이터 형식인 리소스 레코드로 나눌 수 있다.
DNS 서버는 그 역할에 따라 크게 세 가지 유형으로 구분된다. 최상위에는 전 세계에 13개 군데 분산되어 있는 루트 DNS 서버가 있다. 이 서버들은 TLD 서버의 주소를 알고 있다. TLD 서버는 .com, .org, .kr과 같은 최상위 도메인을 관리하는 서버이며, 해당 TLD 아래에 등록된 권한 있는 DNS 서버의 주소를 저장하고 안내한다. 권한 있는 DNS 서버는 특정 도메인 이름 (예: example.com)에 대한 최종적인 정보를 소유하고 제공하는 서버이다. 이 서버는 해당 도메인의 IP 주소, 메일 서버 정보 등을 직접 관리하는 정확한 정보의 원천이다.
이러한 서버들이 처리하는 정보의 기본 단위는 리소스 레코드이다. 리소스 레코드는 도메인 이름을 다양한 데이터와 연결하는 데이터베이스 항목이다. 주요 레코드 유형은 다음과 같다.
레코드 타입 | 설명 | 예시 데이터 |
|---|---|---|
도메인 이름을 IPv4 주소로 매핑한다. |
| |
도메인 이름을 IPv6 주소로 매핑한다. |
| |
한 도메인 이름을 다른 도메인 이름(별칭)으로 연결한다. |
| |
해당 도메인으로의 이메일을 수신할 메일 서버의 주소를 지정한다. |
| |
해당 도메인에 대한 권한 있는 DNS 서버를 지정한다. |
| |
|
이러한 구성 요소들이 협력하여 사용자가 입력한 도메인 이름을 최종 IP 주소로 변환하는 이름 해석 과정을 완성한다.
DNS 시스템은 계층적 구조로 이루어져 있으며, 각 계층을 담당하는 특정 유형의 서버가 협력하여 질의를 처리한다. 주요 서버 유형으로는 루트 DNS 서버, 최상위 도메인 서버, 권한 있는 네임 서버가 있다. 이들은 질의가 최종 IP 주소를 찾아가는 과정에서 순차적으로 참여한다.
가장 상위 계층에 위치하는 루트 DNS 서버는 전 세계에 13개의 루트 서버 그룹(A부터 M)으로 분산 운영된다[2]] 기술로 분산 배치됨]. 이 서버들은 도메인 이름 질의에서 가장 먼저 접근하며, 해당 도메인의 최상위 도메인(TLD)을 관리하는 서버의 주소를 안내하는 역할을 한다. 예를 들어, "example.com"에 대한 질의가 들어오면, 루트 서버는 ".com" 도메인을 관리하는 TLD 서버의 주소를 응답한다.
TLD 서버는 ".com", ".org", ".net"과 같은 일반 최상위 도메인(gTLD)이나 ".kr", ".jp"와 같은 국가 코드 최상위 도메인(ccTLD)을 관리한다. 루트 서버로부터 안내받은 리졸버는 이 TLD 서버에 다시 질의를 보낸다. TLD 서버는 해당 도메인의 실제 네임 서버 정보, 즉 권한 있는 네임 서버의 주소를 저장하고 있으며, 이를 질의자에게 응답한다.
서버 유형 | 담당 범위 | 주요 역할 | 예시 |
|---|---|---|---|
전역적 | 질의의 시작점, 해당 도메인의 TLD 서버 주소 제공 | a.root-servers.net | |
특정 최상위 도메인(.com, .kr 등) | 해당 TLD에 등록된 도메인의 권한 있는 네임 서버 주소 제공 | gtld-servers.net (for .com) | |
특정 도메인 영역(example.com) | 자신이 관리하는 도메인 영역의 실제 리소스 레코드(A, MX 등)를 최종 응답 | ns1.example.com |
최종 단계인 권한 있는 네임 서버는 특정 도메인(예: example.com)과 그 하위 도메인에 대한 완전한 정보를 가지고 있는 서버이다. 도메인 등록기관을 통해 도메인을 등록할 때 설정하며, 실제 IP 주소, 메일 서버 정보 등을 담은 리소스 레코드를 직접 관리하고 최종 응답한다. 이 서버의 응답을 받으면 리졸버는 사용자에게 최종 IP 주소를 전달하여 연결을 완성한다.
리소스 레코드는 DNS 존 파일에 저장되는 데이터 단위로, 도메인 이름과 관련된 특정 유형의 정보를 정의합니다. 각 레코드는 도메인 이름을 IP 주소나 메일 서버 정보 등 다른 형태의 데이터로 매핑하는 역할을 합니다. 모든 리소스 레코드는 공통된 구조를 가지며, TTL, 클래스, 유형, 그리고 레코드 데이터로 구성됩니다.
주요 리소스 레코드 유형은 다음과 같습니다.
레코드 유형 | 설명 | 주요 용도 |
|---|---|---|
도메인 이름을 IPv4 주소로 매핑합니다. | 웹사이트 호스팅, 일반적인 서비스 연결 | |
도메인 이름을 IPv6 주소로 매핑합니다. | IPv6 네트워크 환경에서의 서비스 연결 | |
한 도메인 이름을 다른 *별칭* 도메인 이름으로 지정합니다. | 서브도메인이 다른 서버를 가리키도록 할 때 사용 | |
도메인에 대한 메일 교환 서버를 지정합니다. | 이메일 수신을 위한 메일 서버 안내 | |
도메인에 대한 권한 있는 네임 서버를 지정합니다. | 도메인 관리 권한을 다른 서버에 위임 | |
도메인에 대한 임의의 텍스트 정보를 저장합니다. | ||
존에 대한 권한과 관리 정보(기본 네임서버, 관리자 이메일, 새로고침 주기 등)를 담습니다. | 존 전송과 동기화를 관리하는 시작 지점 |
이 외에도 SRV 레코드(특정 서비스의 위치 지정), CAA 레코드(인증기관 권한 부여) 등 다양한 특수 목적의 레코드가 존재합니다. 시스템 관리자는 이러한 레코드들을 조합하여 네트워크 서비스를 구성하고, 도메인 이름 체계를 효율적으로 운영합니다.

DNS 프로토콜은 TCP와 UDP 두 가지 전송 프로토콜을 사용한다. 표준적인 DNS 질의와 응답은 주로 UDP 포트 53을 통해 이루어지며, 이는 낮은 지연 시간과 오버헤드를 제공한다. 그러나 응답 메시지 크기가 512바이트를 초과하거나 영역 전송과 같은 중요한 작업의 경우 TCP 포트 53을 사용하여 신뢰성 있는 연결을 확보한다.
DNS 메시지는 질의와 응답 모두 동일한 기본 형식을 공유한다. 메시지는 헤더, 질문 섹션, 응답 섹션, 권한 섹션, 추가 정보 섹션으로 구성된다. 헤더에는 트랜잭션 ID, 플래그(질의/응답, 재귀 요청/가능 여부 등), 질문 수, 응답 리소스 레코드 수, 권한 서버 리소스 레코드 수, 추가 정보 리소스 레코드 수가 포함된다.
섹션 | 설명 |
|---|---|
헤더 | 메시지의 제어 정보를 담는다. |
질문 섹션 | |
응답 섹션 | 질문에 대한 답변으로, 하나 이상의 리소스 레코드를 포함한다. |
권한 섹션 | 응답을 제공한 권한 있는 네임 서버의 레코드를 가리킨다. |
추가 정보 섹션 | 응답에 직접적으로 답하지는 않지만 관련된 추가 레코드(예: A 레코드)를 제공한다. |
질문 섹션 이후의 세 섹션(응답, 권한, 추가 정보)은 모두 동일한 리소스 레코드 형식으로 데이터를 저장한다. 각 리소스 레코드는 도메인 이름, 유형, 클래스, TTL(Time To Live, 캐시 유지 시간), 데이터 길이, 그리고 실제 데이터(예: IP 주소)로 구성된다. 이 구조적 일관성은 프로토콜의 확장성을 높인다. 메시지 형식의 확장을 위해 EDNS가 개발되어 더 큰 메시지 크기와 새로운 옵션 코드를 지원한다.

DNSSEC(Domain Name System Security Extensions)은 DNS 프로토콜에 인증과 데이터 무결성을 제공하기 위해 설계된 일련의 보안 확장 기능이다. 기존 DNS는 설계상 보안을 고려하지 않아, 질의 응답이 위변조되거나 스푸핑 공격에 취약했다. DNSSEC은 공개 키 암호화와 디지털 서명 기술을 활용하여 DNS 데이터의 출처를 인증하고 전송 중 변조되지 않았음을 검증할 수 있게 한다.
DNSSEC의 핵심 작동 원리는 계층적 서명 구조에 있다. 루트 존의 공개 키는 신뢰의 시작점(Trust Anchor)으로 미리 알려져 있다. 루트 존은 그 하위 TLD(최상위 도메인) 존의 공개 키에 서명하고, 각 TLD 존은 다시 그 하위 권한 있는 서버의 공개 키에 서명하는 방식으로 신뢰 체인을 형성한다. 최종적으로 실제 호스트 이름과 IP 주소 매핑 정보를 담은 리소스 레코드 세트(RRset)도 해당 존의 개인 키로 서명된다. 리졸버는 이 신뢰 체인을 따라 올라가 루트의 신뢰 앵커까지 검증에 성공하면 응답의 진위를 확신할 수 있다.
주요 리소스 레코드 타입으로는 데이터 서명을 담는 RRSIG(Resource Record Signature), 권한 있는 서버의 공개 키를 담는 DNSKEY, 그리고 자식 존의 키 해시를 담아 위임 신뢰를 연결하는 DS(Delegation Signer) 레코드 등이 추가되었다. 검증 과정은 리졸버가 RRSIG 레코드의 서명을 해당 DNSKEY로 확인하고, 필요 시 DS 레코드를 통해 상위 존으로 검증을 위임하는 방식으로 진행된다.
DNSSEC은 DNS 응답의 인증과 무결성을 보장하지만, 기밀성을 제공하거나 DDoS 공격을 직접 차단하지는 않는다[4]. 또한, 복잡한 키 관리와 배포 과제가 남아 있다. 그럼에도 불구하고, 전 세계 루트 서버와 많은 TLD가 DNSSEC을 지원하며, 인터넷 인프라의 핵심적인 보안 층으로 자리 잡고 있다.

DNS는 초기 설계 이후 지속적으로 확장되어 왔으며, 특히 개인정보 보호와 보안 강화를 위한 최신 기술이 주목받고 있다. 대표적인 확장 기술로는 EDNS가 있으며, 최근에는 전송 구간 암호화를 위한 DoH와 DoT가 널리 채택되고 있다.
EDNS는 기존 DNS 프로토콜의 제한을 극복하기 위해 설계된 확장 메커니즘이다. 원래 DNS 메시지는 UDP를 통해 전송될 때 512바이트로 크기가 제한되어 있었으나, EDNS는 이를 확장하여 더 큰 메시지(예: DNSSEC 서명 데이터)를 처리할 수 있게 한다. 또한, 클라이언트와 서버의 기능을 협상하는 데 사용되며, DNSSEC 구현의 기반이 된다.
전통적인 DNS 쿼리는 암호화되지 않은 평문으로 전송되어 도청 및 변조 위험이 있었다. 이를 해결하기 위해 등장한 것이 DoT와 DoH이다. DoT는 DNS 메시지를 TLS 암호화 터널을 통해 전송하는 표준이다. 일반적으로 853번 포트를 사용하며, 전용 포트를 통해 DNS 트래픽을 식별하고 암호화한다. 반면, DoH는 DNS 메시지를 일반적인 HTTPS 트래픽(443번 포트)에 캡슐화하여 전송한다. 이는 다른 웹 트래픽과 혼합되어 구분하기 어렵게 만들어, 감시 및 필터링을 회피하는 데 유리하지만, 네트워크 관리 측면에서는 복잡성을 증가시킨다. 두 프로토콜 모두 중간자 공격으로부터의 보호와 사용자 질의의 기밀성을 향상시키는 것을 목표로 한다.
프로토콜 | 표준 포트 | 암호화 방식 | 주요 특징 |
|---|---|---|---|
853 | DNS 전용 포트 사용, 트래픽 식별 용이 | ||
443 (HTTPS) | TLS (HTTPS 내부) | 일반 웹 트래픽과 혼합, 필터링 회피에 유리 |
이러한 확장 기술들은 DNS의 핵심 기능인 이름 해석을 유지하면서, 현대 인터넷이 요구하는 보안, 개인정보 보호, 그리고 더 큰 데이터 처리 요구를 충족시키기 위해 계속 발전하고 있다.
DoH와 DoT는 기존의 평문 UDP 또는 TCP를 통해 전송되던 DNS 질의와 응답을 암호화하여 사용자의 프라이버시와 보안을 강화하는 기술이다. 두 기술 모두 중간자 공격이나 감청으로부터 DNS 트래픽을 보호하는 것이 목표이지만, 구현 방식과 사용하는 네트워크 포트에서 차이를 보인다.
DNS over TLS는 TLS 암호화 프로토콜을 사용하여 DNS 통신을 보호한다. 기존 DNS 포트(53번) 대신 전용 포트(853번)를 사용하여 암호화된 연결을 수립한다. 이 방식은 네트워크 관리자가 표준 포트를 모니터링하거나 필터링하는 것과 유사하게, DoT 트래픽을 식별하고 관리할 수 있게 한다. 일부 환경에서는 이 특정 포트의 트래픽을 차단함으로써 DoT 사용을 제어할 수도 있다.
반면, DNS over HTTPS는 HTTPS 프로토콜 위에서 DNS 질의와 응답을 전송한다. 모든 통신이 일반적인 웹 트래픽과 동일한 443번 포트를 통해 이루어지므로, 네트워크 수준에서 DNS 트래픽과 다른 웹 트래픽을 구분하기 어렵다. 이는 사용자 프라이버시를 더욱 강력하게 보호하지만, 기업이나 교육 기관과 같은 곳에서 네트워크 정책에 따라 DNS 필터링을 적용하기 어렵게 만들 수 있다. 주요 웹 브라우저들은 사용자 DNS 설정을 무시하고 자체적으로 DoH 리졸버로 트래픽을 전송할 수 있어 논란의 원인이 되기도 했다.
두 프로토콜의 비교는 다음과 같다.
특성 | DNS over TLS (DoT) | DNS over HTTPS (DoH) |
|---|---|---|
암호화 프로토콜 | HTTPS (HTTP/2 또는 HTTP/3 over TLS) | |
사용 포트 | 전용 포트 (853) | 웹 표준 포트 (443) |
트래픽 식별 | 포트를 통해 상대적으로 식별 용이 | 일반 웹 트래픽과 혼합되어 식별 어려움 |
주요 구현 | 전용 DNS 클라이언트/서버, 모바일 OS | 웹 브라우저, 일부 운영체제 설정 |
관리성 | 네트워크 수준에서 차단 또는 허용 가능 | 포트 기반 필터링으로 차단 어려움 |
DoT는 네트워크 운영의 투명성과 관리 용이성을, DoH는 최대한의 트래픽 혼합을 통한 프라이버시를 각각의 장점으로 삼는다. 두 기술 모두 DNSSEC이 제공하는 데이터 무결성 검증과는 별개로, 전송 구간의 기밀성을 해결한다는 공통점을 가진다.
EDNS(Extension Mechanisms for DNS)는 기존 DNS 프로토콜의 제한을 극복하기 위해 설계된 확장 메커니즘이다. 1999년 IETF에 의해 RFC 2671로 처음 표준화되었으며, 이후 개정을 거쳐 현재는 RFC 6891이 최신 표준이다. 기본 DNS 프로토콜은 1980년대 설계 당시의 네트워크 환경을 반영하여, UDP 패킷의 최대 크기를 512바이트로 제한하고 확장성을 고려하지 않았다. EDNS는 이러한 한계를 해결하기 위해 DNS 메시지 헤더의 확장 영역을 정의하고, 새로운 플래그와 옵션 코드를 도입하여 프로토콜의 기능을 유연하게 확장할 수 있는 기반을 제공한다.
EDNS의 가장 중요한 기능은 UDP를 통한 응답 메시지의 최대 크리를 협상할 수 있게 하는 것이다. 이를 위해 EDNS0 버전에서는 'OPT'라는 가상의 리소스 레코드를 도입한다. 질의자가 OPT 레코드를 포함해 질의하면, 이는 지원하는 최대 UDP 응답 패킷 크기(EDNS 버퍼 크기)를 서버에 알리는 역할을 한다. 이를 통해 512바이트를 초과하는 대용량 응답(예: DNSSEC 서명이 포함된 응답)을 UDP로 전송할 수 있게 되어, 불필요한 TCP 폴백을 줄이고 성능을 향상시킨다.
EDNS는 다양한 확장 옵션을 정의하는 플랫폼 역할도 한다. 대표적인 옵션은 다음과 같다.
옵션 코드 (OPTION-CODE) | 이름 | 주요 목적 |
|---|---|---|
8 | 사용자의 서브넷 정보를 전달해 지리적으로 가까운 CDN 서버를 제공받기 위함 | |
10 | DNS 증폭 공격 등의 취약점을 완화하기 위한 클라이언트-서버 간 쿠키 교환 |
이 외에도 DNSSEC를 지원하기 위한 필수 메커니즘이며, 향후 새로운 요구사항에 따라 추가 옵션을 정의할 수 있는 유연한 구조를 가진다. 현대 DNS 인프라에서는 EDNS 지원이 사실상 표준으로 자리 잡아, 보안, 성능, 기능적 측면에서 필수적인 프로토콜 확장이 되었다.

DNS 관리와 운영은 도메인 이름 시스템의 안정적이고 효율적인 작동을 보장하기 위한 일련의 절차와 실무를 포괄한다. 핵심은 도메인 등록과 DNS 위임, 그리고 DNS 서버 소프트웨어의 설정 및 유지보수이다.
도메인 등록기관을 통해 원하는 도메인 이름을 등록하는 것이 첫 단계이다. 등록자는 도메인 등록대행자를 통해 특정 최상위 도메인 아래에 자신의 도메인을 등록하고, 해당 도메인의 권한 있는 네임서버 정보를 등록기관의 데이터베이스에 제공한다. 이 과정에서 도메인에 대한 DNS 위임이 설정된다. 즉, 루트 DNS 서버는 해당 TLD 서버를 가리키고, TLD 서버는 등록자가 지정한 권한 있는 네임서버를 가리키며, 최종적으로 해당 네임서버가 도메인의 리소스 레코드를 관리한다. 도메인의 NS 레코드는 이 위임 체인을 정의하는 핵심 요소이다.
권한 있는 네임서버를 운영하기 위해서는 BIND, PowerDNS, Unbound, Knot DNS와 같은 DNS 서버 소프트웨어를 설치하고 설정 파일을 관리해야 한다. 설정 작업에는 존 파일 작성이 포함된다. 존 파일은 해당 도메인에 대한 모든 리소스 레코드(A 레코드, AAAA 레코드, CNAME 레코드, MX 레코드, TXT 레코드 등)를 정의하는 텍스트 파일이다. 운영 측면에서는 서버의 가용성과 성능을 유지하기 위해 마스터-슬레이브 구조를 통한 복제, 정기적인 존 전송, 시스템 로그 모니터링, 그리고 DDoS 공격과 같은 위협에 대비한 보안 설정이 중요하다.
운영 주체 | 주요 역할 | 관련 구성 요소/개념 |
|---|---|---|
도메인 등록기관/대행자 | 도메인 이름의 등록 및 관리, WHOIS 데이터베이스 유지 | |
도메인 소유자/관리자 | 권한 있는 네임서버 지정, 존 파일 내 리소스 레코드 관리 | |
DNS 서버 운영자 | DNS 서버 소프트웨어 설치, 설정, 보안 및 성능 관리 |
효율적인 DNS 운영은 적절한 TTL 값 설정을 통해 DNS 캐싱의 효율을 조절하고, 지리적 분산을 위한 Anycast 라우팅 기술을 적용하며, DNSSEC을 서명하여 데이터 무결성을 보호하는 것을 포함한다. 또한, 최근에는 클라우드 기반의 DNS 호스팅 서비스를 이용하여 인프라 관리 부담을 줄이는 경우도 많다.
도메인 이름 등록은 특정 도메인을 사용할 권리를 일정 기간 동안 획득하는 과정이다. 등록자는 ICANN이 인증한 도메인 등록 대행자를 통해 원하는 도메인 이름을 선택하고 등록 비용을 지불하여 등록 절차를 완료한다. 등록된 정보는 해당 최상위 도메인의 도메인 등록 기관이 관리하는 데이터베이스에 저장된다.
도메인 위임은 DNS 계층 구조에서 특정 도메인의 관리 책임을 하위 네임서버에게 넘기는 것을 의미한다. 예를 들어, example.com 도메인의 소유자가 자신의 도메인에 대한 권한 있는 네임서버를 지정하면, .com TLD 서버는 해당 도메인에 대한 질의를 더 이상 직접 처리하지 않고 지정된 권한 있는 네임서버로 질의를 전달한다. 이 위임은 TLD 서버가 관리하는 존 파일에 NS 레코드를 등록함으로써 이루어진다.
위임 과정은 다음과 같은 단계로 이루어진다.
1. 도메인 등록자가 자신의 도메인을 관리할 권한 있는 네임서버(예: ns1.myprovider.com, ns2.myprovider.com)를 설정한다.
2. 등록 대행자를 통해 이 네임서버 정보가 TLD의 등록 기관에 전달되고, TLD 존 파일에 NS 레코드로 등록된다.
3. 이후 www.example.com과 같은 하위 호스트 이름에 대한 리소스 레코드(예: A 레코드, MX 레코드)는 전적으로 도메인 소유자가 지정한 권한 있는 네임서버에서 관리하게 된다.
도메인 등록과 위임은 별개의 개념이지만 밀접하게 연관되어 있다. 등록은 도메인 이름 사용 권리를 확보하는 행위라면, 위임은 그 도메인 이름을 실제로 인터넷상에서 작동하도록 DNS 시스템에 연결하는 기술적 절차이다. 등록 정보가 변경되거나 위임된 네임서버 정보가 올바르지 않으면, 해당 도메인에 대한 접속이 불가능해지는 장애가 발생할 수 있다[5].
DNS 서버를 운영하기 위해서는 BIND, PowerDNS, Unbound, dnsmasq 등과 같은 DNS 서버 소프트웨어를 선택하고 적절히 설정해야 한다. 이들 소프트웨어는 권한 있는 네임 서버 또는 재귀 확인자 역할을 수행하도록 구성할 수 있으며, 각각의 설정 파일을 통해 동작 방식을 정의한다. 일반적으로 설정 파일은 존(zone) 정보를 정의하는 존 파일(zone file)과 서버의 전반적인 동작을 제어하는 주 구성 파일(main configuration file)로 나뉜다.
가장 널리 사용되는 BIND (Berkeley Internet Name Domain)의 경우, 주 구성 파일인 named.conf에서 리스닝할 IP 주소와 포트, 재귀 질의 허용 여부, 로깅 옵션, 그리고 참조할 각 존 파일의 경로를 지정한다. 존 파일은 해당 도메인에 대한 리소스 레코드 (예: A 레코드, MX 레코드, CNAME 레코드)를 포함하는 텍스트 파일이다. 반면, PowerDNS는 다양한 백엔드(예: 관계형 데이터베이스, 파일 시스템)를 지원하여 유연한 데이터 저장 방식을 제공하는 것이 특징이다. Unbound는 주로 캐싱 전용 재귀 확인자로서 보안과 성능에 중점을 두고 설계되었다.
설정 시 고려해야 할 주요 사항은 다음과 같다.
설정 항목 | 설명 | 일반적인 값/예시 |
|---|---|---|
SOA 레코드 | 존의 권한과 관리 정보를 정의[6] |
|
네임 서버(NS) | 해당 존을 책임지는 네임 서버 호스트명 지정 |
|
A / AAAA 레코드 |
| |
재귀 질의 | 외부 클라이언트에 대한 재귀적 응답 허용 여부 |
|
전송 제한 | 존 데이터의 영역 전송(zone transfer)을 허용할 클라이언트 제한 |
|
서버 설정 후에는 named-checkconf와 named-checkzone (BIND 기준) 같은 도구를 사용하여 구성 파일과 존 파일의 문법 오류를 검증하는 것이 필수적이다. 또한, dig나 nslookup 명령어를 활용해 서버가 정상적으로 응답하는지, 리소스 레코드가 올바르게 조회되는지 반드시 테스트해야 한다. 최종적으로는 보안을 위해 불필요한 서비스는 비활성화하고, 정기적으로 소프트웨어를 최신 상태로 유지하여 알려진 취약점으로부터 시스템을 보호해야 한다.

DNS 스푸핑은 공격자가 위조된 DNS 응답을 보내 사용자를 악성 사이트로 유도하는 공격이다. 이는 DNS 캐싱 서버나 클라이언트의 캐시를 오염시켜 발생한다. 유사한 공격인 DNS 캐시 포이즈닝은 권한 없는 데이터를 DNS 서버의 캐시에 주입하는 기술이다. 이러한 문제를 완화하기 위해 DNSSEC이 개발되었다. DNSSEC은 DNS 응답에 디지털 서명을 추가하여 데이터의 출처 인증과 무결성을 보장한다. 그러나 DNSSEC은 응답 자체의 기밀성을 보호하지는 않는다[7].
성능 문제는 주로 높은 지연 시간과 서버 장애에서 비롯된다. 지연 시간을 줄이기 위해 Anycast 라우팅을 사용하여 지리적으로 분산된 여러 서버가 동일한 IP 주소를 공유하게 할 수 있다. 이렇게 하면 사용자는 가장 가까운 서버로 자동 연결된다. 또한 TTL 값을 적절히 설정하는 것이 중요하다. 짧은 TTL은 변경 사항을 빠르게 전파하지만 서버 부하를 증가시키고, 긴 TTL은 캐시 효율성을 높이지만 변경 사항의 반영이 느려진다.
장애 대응 측면에서 중요한 것은 중복성과 모니터링이다. 보조 권한 있는 네임서버를 설정하여 주 서버에 장애가 발생할 때도 도메인 이름을 계속 확인할 수 있게 해야 한다. DNS 서비스의 가용성과 응답 시간을 지속적으로 모니터링하고, DDoS 공격에 대비하여 대역폭 여유를 확보하거나 클라우드 기반의 보호 서비스를 활용하는 것이 일반적이다.