DNS

The Domain Name System (DNS) is a hierarchical and decentralized naming system for computers, services, or other resources connected to the Internet.

— IETF DNS 표준 정의

인터넷 연결이 안 될 때 10개 중 9개는 DNS 네임서버 설정이 풀렸거나 캐시가 꼬인 것이다. 하지만 사람들은 항상 애꿎은 공유기 전원 코드만 뺐다 끼곤 한다. 도메인 이사하고 'DNS 전파 중'이라는 핑계로 합법적인 루팡 타임을 가질 수 있는 유용한 수단이다.(...)

1. 개요

숫자로 이루어진 복잡한 IP 주소를 인간이 기억하기 쉬운 문자 형태의 도메인 이름으로 변환하고, 그 반대의 매핑을 관리해 주는 분산 데이터베이스 시스템. 인터넷 통신의 가장 맨 앞 단에 존재하여 사용자가 브라우저 주소창에 주소를 입력하는 순간 작동하는, 웹 기술 생태계의 없어서는 안 될 대동맥 역할을 담당한다.

2. 계층형 트리 구조와 네임서버의 분산 질의

DNS는 전 세계의 도메인을 단 하나의 거대한 서버가 처리하는 것이 아니라, 역삼각형 모양의 철저한 계층형 트리 구조(Hierarchical Tree Structure)로 분산하여 관리한다. 최상위의 루트 네임서버(Root Name Server)부터 시작해서, .com, .net, .kr 등을 담당하는 TLD(Top-Level Domain) 네임서버, 그리고 실제 도메인의 최종 주소를 들고 있는 권한 있는 네임서버(Authoritative Name Server)로 순차적으로 퐁퐁 내려가며 주소를 묻는다.1 브라우저는 이 고된 매핑 과정을 매번 반복하기 비효율적이므로, 한 번 알아낸 IP 주소는 로컬 컴퓨터나 공유기, 통신사의 캐시(Recursive Resolver)에 일정 시간(TTL, Time To Live) 동안 곱게 저장해 둔다.

3. 다양한 DNS 레코드 유형과 배포 전파

실무 개발을 시작하면 단순히 도메인만 연결하는 것이 아니라, 여러 종류의 DNS 레코드(DNS Records)를 관리하는 업무를 빈번하게 수행하게 된다. 가장 기본이 되는 IPv4 주소 매핑인 A 레코드, IPv6 매핑인 AAAA 레코드, 도메인 이름에 일종의 별칭을 붙여주는 CNAME 레코드, 메일 서버 경로를 지정하는 MX 레코드 등이 있다. 이 설정들은 세계 곳곳에 흩어진 분산 네임서버들로 동기화되는 과정인 'DNS 전파(Propagation)' 시간이 필요하며, 전파 기간 중에는 접속이 되다 안 되다 하는 현상이 발생하여 네트워크 엔지니어와 개발자들의 피를 말리곤 한다.

4. 관련 밈 및 드립

4.1. 그것은 항상 DNS 탓이다 (It's always DNS)

시스템 엔지니어(sysadmin)들 사이에서 유래한 유구한 격언으로, 네트워크 장애, 서버 다운, 이메일 전송 불능 등 온갖 괴이한 IT 장애의 원인을 깊이 추적하다 보면 결국 범인은 항상 DNS 설정 오류였다는 슬픈 밈이다. '문제가 생겼나요? 네트워크를 보기 전에 DNS를 확인하세요'라는 짤방이 업계의 대표적인 밈으로 활약하고 있다.

4.2. 8.8.8.8과 1.1.1.1

통신사의 기본 DNS 서버가 멍청해지거나 정전 등으로 죽었을 때, 혹은 특정 사이트의 접속 차단을 우회하기 위해 개발자들이 기도하는 심정으로 컴퓨터 네트워크 카드 설정에 입력하는 신성한 구원의 IP 주소들. 각각 구글(Google)과 클라우드플레어(Cloudflare)가 제공하는 무료 공개 DNS 서버로, 인터넷 접속 불능 상태를 구원해 주는 종교적인 숫자로 통한다.(...)

5. 여담

  • Root Name Server의 개수: 전 세계에 존재하는 루트 네임서버는 기술적 제약(IPv4 UDP 패킷 사이즈 제한인 512바이트)으로 인해 물리적으로 단 '13개'의 IP 주소만 배정되어 있었다. 현재는 Anycast 캐스팅 기술 등을 적용하여 실제 하드웨어 서버 장비는 전 세계 수백 곳에 복제 분산되어 안정적으로 운영 중이다.
  • 도메인 뒤의 보이지 않는 점(.): 사실 모든 도메인의 끝에는 보이지 않는 점(Root)이 숨겨져 있다. 즉 google.com은 정확히 google.com.이며, 여기서 가장 뒤의 점이 루트 도메인을 뜻한다. 현대 브라우저는 사용자의 편의를 위해 이 마지막 점을 알아서 생략해 준다.
  • DNS Spoofing 해킹: DNS 질의는 빠른 속도를 위해 기본적으로 연결 검증이 없는 UDP 프로토콜을 사용한다. 이 허점을 파고들어 사용자가 은행 사이트에 접속할 때 가짜 IP 주소를 중간에 가로채서 내려보내는 해킹 기법이 DNS 스푸핑이다. 이를 예방하기 위해 보안이 한층 강화된 DNSSEC(DNS Security Extensions) 표준이 도입되고 있다.

6. 관련 문서

각주

  1. 이처럼 브라우저 대신 루트 네임서버부터 차례차례 질의하여 주소를 가져다주는 중개 서버를 '재귀적 네임서버(Recursive Name Server)'라고 부른다.