백엔드 개발자

DNS(Domain Name System) 본문

카테고리 없음

DNS(Domain Name System)

임잠탱 2025. 4. 13. 20:59

1. DNS란?

  • Domain Name System
  • 인터넷의 주소록이자 분산형 계층적 데이터베이스 시스템
  • 사람이 기억하기 쉬운 도메인 이름 ↔ 컴퓨터가 사용하는 IP 주소 간 매핑 수행

2. DNS는 분산형 데이터베이스이다

DNS는 도메인 이름에 대한 IP를 저장하고 있는 데이터베이스라고 할 수 있다.

분산형 데이터베이스. 왜 분산형인가?

도메인 이름을 통해 모든 요청은 DNS를 거치게 될 것이다.

  • 단일 서버에 모든 정보를 저장하면,
    • 확장성, 가용성, 속도, 신뢰성 문제가 발생한다.
  • 그래서 DNS는 다음과 같은 특성을 가진다:
분산성 전 세계적으로 수많은 DNS 서버가 정보를 나눠 가짐
계층적 구조 루트 → TLD → SLD → 하위 도메인
권한 위임 (Delegation) 각 단계마다 자신이 책임지는 도메인만 관리
캐싱 (Cache) 성능 향상을 위한 TTL 기반 데이터 저장
중복성 (Redundancy) NS 서버 여러 개로 구성, 장애 대응 가능

DNS 계층 구조

 

DNS는 계층 구조를 가진다.

최상위 도메인 루트를 시작으로 

Top Level 도메인,

Seconde Level 도메인,

그 아래는 모두 서브 도메인이라고 칭한다.

  • www.google.com 를 검색하여 DNS 질의를 한다고 가정하면:
    • 루트: .
      • 최상위 도메인. 모든 도메인의 출발점.
      • .은 생략되는 경우가 대부분이다. (www.google.com. ← 실제로 끝에 점이 있다.)
    • TLD(Top-Level Domain): com
      • 루트 바로 아래. .com, .net, .kr, .org 등이 있다.
      • 관리 기관: ICANN과 위임받은 기관들 (예: .kr은 KISA)
    • SLD(Second-Level Domain): google
      • 사용자 정의 영역. 예: google in google.com
    • Subdomain: www
      • www, mail, docs 등. 예: mail.google.com

이러한 순서로 DNS 서버를 거치게 될 것이다. (캐시가 없는 경우)

DNS 구성 요소

3.1 네임서버(Name Server)

  • DNS 쿼리를 처리하고, 도메인-IP 매핑 정보를 갖고 있음.
  • Root Name Server: 루트 도메인을 관리. 전 세계에 약 13개 클러스터(A~M).
  • TLD Name Server: .com, .kr 같은 TLD를 관리.
  • Authoritative Name Server: 실제 도메인 정보를 갖고 있음. (example.com의 IP 주소 등)

3.2 리졸버(Resolver)

  • 클라이언트가 사용하는 DNS 클라이언트. 도메인-IP 매핑 정보를 직접적으로 가지고 있지 않음.
  • Recursive Resolver: 최종 답을 줄 때까지 다른 서버에 요청을 전달함. (대부분 ISP가 제공)

=> 우리가 기본적으로 생각하는 DNS가 네임서버이다. 다 네임서버가 아니었어? 라고 생각이 들 수 있는데, 우리가 직접적으로 요청을 보내는 곳은 리졸버이다. 따로 설정을 하지 않는다면 우리는 ISP(KT, SKT, LGU+ 등) 에서 제공하는 DNS를 사용하게 될텐데, 이게 리졸버이고, 진짜 데이터를 가지고 있지 않고, 네임서버에서 받아와서 우리에게 알려주는 역할을 한다. 

DNS 질의 흐름

  1. 사용자가 브라우저에서 www.google.com 입력
  2. 로컬 캐시 확인
  3. 캐시 없으면 → ISP 리졸버로 요청
  4. 리졸버가 루트 → TLD → 권한 네임서버를 거쳐 IP 획득
  5. IP 주소 응답 후 → 웹사이트 접속

DNS 질의 방식: Recursive vs Iterative

🔸 Recursive Query (재귀 쿼리)

  • 클라이언트 → 리졸버에게 "IP 주소 알려줘"라고 요청
  • 리졸버가 대신 루트 → TLD → Authoritative까지 찾아서 최종 응답 전달
  • 주로 ISP의 리졸버나 8.8.8.8 같은 Public DNS가 수행

🔸 Iterative Query (반복 쿼리)

  • 질의받은 DNS 서버가 "나는 몰라, 여기 가서 물어봐" 하고 네임서버를 알려줌
  • 주로 네임서버 간 통신에 사용됨 (권한 위임 처리 포함)

=> 클라이언트 입장에서는 항상 recursive, 서버 간은 iterative 방식으로 동작

위에서 봤던것처럼, 우리는 리졸버에게 요청을 하고 리졸버는 네임서버에 원하는 답을 얻을때까지 반복해서 요청을 하게 되는데, 각 재귀 쿼리, 반복 쿼리라고 한다.


📄 6. 레코드 종류 – 데이터의 기본 단위

타입설명
A IPv4 주소
AAAA IPv6 주소
CNAME 별칭 (Alias)
NS 권한 있는 네임서버 정보
MX 메일 서버 정보
TXT 텍스트 (SPF, 인증 등)
SOA 도메인 시작 정보
SRV 서비스 정보 (포트 포함)
PTR IP → 도메인 (역방향 조회)
CAA 인증서 발급 권한 지정

🔄 7. 캐싱 – 성능을 책임지는 핵심 기술

  • TTL(Time to Live): 레코드 유효 시간
  • 계층별로 캐싱:
    • 브라우저
    • OS
    • Recursive Resolver

한 번 요청한 도메인은, TTL 동안 재질의 없이 빠르게 응답


 

용어 정리

Recursive Resolver 클라이언트 대신 전체 질의 과정을 수행
Iterative Query 다음 단계의 서버 위치만 알려주고, 클라이언트가 직접 요청
Authoritative Name Server 해당 도메인의 최종 IP 정보 보유
DNS Cache TTL이 만료되지 않은 정보 보관소
Glue Record NS 레코드가 가리키는 도메인의 IP 주소를 함께 제공

Anycast 기반 DNS 서비스

Anycast는 네트워크 통신에서

"여러 서버가 같은 IP 주소를 공유하고, 클라이언트 요청이 가장 가까운 서버로 라우팅되도록 하는 방식"

  • 여러 서버가 하나의 IP를 공유한다. (예: 모두 8.8.8.8)
  • 네트워크 경로상 가장 빠르고 가까운 서버가 요청을 처리한다.

2. Anycast를 왜 쓸까?

  • 성능 향상: 가까운 서버로 빠른 응답
  • 장애 대응: 특정 서버가 죽어도 다른 서버가 응답
  • 로드 밸런싱: 자연스럽게 트래픽 분산
  • DDoS 완화: 공격 트래픽이 여러 서버로 분산됨

🔸 2. BGP (Border Gateway Protocol)로 광고

각 서버는 BGP를 통해 "나 8.8.8.8 담당해!"라고 주변 라우터(인터넷)에게 알림.

  • 서버들은 다른 위치, 다른 네트워크에서 같은 IP를 BGP로 광고.
  • 인터넷 라우터들은 "가장 가까운 8.8.8.8 경로"를 선택.

🔸 3. 클라이언트 요청 → 가장 가까운 서버로 도달

  • 사용자가 8.8.8.8에 요청을 보내면,
  • 네트워크 라우터가 BGP 경로 테이블을 보고,
  • 최소 홉 수, 최소 지연(latency) 등을 고려해
  • 가장 최적의 서버로 요청을 보내줌.

CDN이랑 비슷한건가?

=> 비슷하지만, CDN은 IP를 공유하는 것이 아니라 DNS에서 사용자 IP를 기반으로 다른 IP를 응답해줌. 단순히 위치만 보는것이 아니라 네트워크 혼잡도나 서버 부하, 응답 속도를 고려하는 경우도 있음. 이렇게 사용자의 물리적인 위치를 기반으로 다른 DNS 응답을 돌려주는 기술을 GeoDNS 라고 함.

Comments