IT Knowledge/Network/images/04-dns-동작-원리-diagram.svg

DNS 동작 원리

DNS는 인터넷의 전화번호부입니다. 사람이 읽을 수 있는 도메인 이름을 컴퓨터가 이해할 수 있는 IP 주소로 변환합니다.


🎯 이 파일을 학습하면 무엇을 알게 될까요?

이 파일을 학습하면 다음을 할 수 있게 됩니다:

  • DNS가 무엇이고 왜 필요한지 이해
  • DNS 쿼리가 어떻게 처리되는지 이해
  • DNS 레코드 종류와 역할 파악
  • DNS 캐싱과 성능 최적화 이해
  • 실제로 DNS 문제를 진단하고 해결

🧠 학습 전 생각해볼 질문

  1. 왜 DNS가 필요할까요?

    • IP 주소(192.168.1.1)만 사용하면 안 될까요?
    • 웹사이트 주소를 외우기 쉬운 이유는 무엇일까요?
  2. DNS는 어떻게 작동할까요?

    • google.com을 입력했을 때 무슨 일이 일어날까요?
    • 전 세계의 모든 DNS 서버가 모든 도메인을 알고 있을까요?
  3. DNS 문제가 발생했을 때 어떻게 알 수 있을까요?

    • 웹사이트가 안 열리면 무엇을 확인해야 할까요?

📖 1. DNS란 무엇인가?

1.1 DNS의 정의

**DNS (Domain Name System)**는 도메인 이름을 IP 주소로 변환하는 시스템입니다.

비유: 전화번호부

  • 전화번호부: 이름 → 전화번호
  • DNS: 도메인 이름 → IP 주소

1.2 왜 DNS가 필요한가?

문제 상황: IP 주소만 사용한다면?

🤔 "https://172.217.26.142"에 접속하고 싶어요!"

문제점:

  • IP 주소를 외우기 어렵다
  • 서버가 변경되면 IP도 바뀐다 (사용자에게 알려야 함)
  • 서로 다른 서비스가 같은 서버에서 실행될 때 구분하기 어렵다

해결: DNS 사용

✅ "https://google.com"에 접속하고 싶어요!"

장점:

  • 도메인 이름을 기억하기 쉽다
  • IP가 바뀌어도 도메인 이름은 동일
  • 여러 서비스를 구분 가능 (www.google.com, mail.google.com)

🔍 2. DNS 동작 원리

2.1 DNS 쿼리 과정 (Recursive Query)

sequenceDiagram
    participant User as 사용자 컴퓨터
    participant Resolver as 리졸버 (Recursive)
    participant Root as 루트 서버
    participant TLD as TLD 서버
    participant Auth as 권한 서버

    User->>Resolver: google.com IP 요청
    Resolver->>Resolver: 캐시 확인 (없음)
    Resolver->>Root: .com TLD 찾아줘
    Root->>Resolver: .com TLD IP 알려줌
    Resolver->>TLD: google.com 권한 서버 찾아줘
    TLD->>Resolver: google.com 권한 서버 IP 알려줌
    Resolver->>Auth: google.com IP 알려줘
    Auth->>Resolver: 172.217.26.142
    Resolver->>Resolver: 캐싱
    Resolver->>User: 172.217.26.142

단계별 설명

1단계: 사용자가 도메인 요청

사용자: "google.com 접속하고 싶어!"

2단계: 로컬 DNS 캐시 확인

리졸버: "캐시에 있나? → 없네"

3단계: 루트 서버 질문

리졸버: "루트 서버야, .com TLD 서버가 어디야?"
루트 서버: ".com TLD 서버는 192.0.14.129야"

4단계: TLD 서버 질문

리졸버: ".com TLD 서버야, google.com 권한 서버가 어디야?"
.com TLD 서버: "google.com 권한 서버는 216.239.32.10야"

5단계: 권한 서버 질문

리졸버: "google.com 권한 서버야, google.com IP가 뭐야?"
권한 서버: "google.com은 172.217.26.142야"

6단계: 결과 반환 및 캐싱

리졸버: "알겠어! 캐싱하고 사용자에게 알려줘야지"

2.2 DNS 계층 구조

graph TD
    A[루트 서버 .] --> B[TLD 서버 .com]
    A --> C[TLD 서버 .net]
    A --> D[TLD 서버 .org]
    B --> E[google.com 권한 서버]
    B --> F[example.com 권한 서버]
    C --> G[example.net 권한 서버]

계층별 역할

계층역할예시책임
루트 서버DNS 계층의 최상위. (dot)TLD 서버 위치 알려줌
TLD 서버최상위 도메인 관리.com, .net, .org권한 서버 위치 알려줌
권한 서버실제 도메인 데이터google.com실제 IP 주소 제공

📋 3. DNS 레코드 종류

3.1 기본 DNS 레코드

A 레코드 (Address Record)

  • 역할: 도메인 이름 → IPv4 주소
  • 예시:
    example.com → 192.168.1.1
    www.example.com → 192.168.1.1
    

AAAA 레코드 (IPv6 Address Record)

  • 역할: 도메인 이름 → IPv6 주소
  • 예시:
    example.com → 2001:0db8:85a3:0000:0000:8a2e:0370:7334
    

CNAME 레코드 (Canonical Name)

  • 역할: 도메인 별칭 → 실제 도메인
  • 비유: “별명”이 “본명”을 가리킴
  • 예시:
    www.example.com → example.com
    blog.example.com → example.com
    

MX 레코드 (Mail Exchange)

  • 역할: 이메일 서버 지정
  • 예시:
    example.com → mail.example.com (우선순위 10)
    example.com → mail2.example.com (우선순위 20)
    

NS 레코드 (Name Server)

  • 역할: 권한 서버 지정
  • 예시:
    example.com → ns1.example.com
    example.com → ns2.example.com
    

TXT 레코드 (Text)

  • 역할: 텍스트 정보 저장 (SPF, DKIM, 도메인 검증 등)
  • 예시:
    example.com → "v=spf1 include:_spf.google.com ~all"
    

PTR 레코드 (Pointer)

  • 역할: IP 주소 → 도메인 이름 (역방향 조회)
  • 예시:
    192.168.1.1 → example.com
    

3.2 DNS 레코드 비교

레코드방향주요 용도
A도메인 → IPv4웹사이트, 서비스
AAAA도메인 → IPv6IPv6 웹사이트
CNAME도메인 → 도메인도메인 별칭
MX도메인 → 도메인이메일 서버
NS도메인 → 도메인권한 서버
PTRIPv4 → 도메인역방향 조회
TXT-도메인 검증, SPF

⚡ 4. DNS 캐싱과 성능 최적화

4.1 DNS 캐싱 작동 원리

처음 요청:
google.com → 300ms (루트 → TLD → 권한 서버)

캐시된 요청:
google.com → 10ms (로컬 캐시)

캐싱 계층

  1. 브라우저 캐시: 브라우저가 저장
  2. OS 캐시: 운영체제가 저장
  3. 리졸버 캐시: DNS 서버가 저장

4.2 TTL (Time to Live)

  • 정의: DNS 레코드가 캐시되는 시간
  • 단위: 초 (seconds)
  • 예시:
    example.com A 192.168.1.1 TTL=3600 (1시간)
    

비유: 유통기한

  • TTL = 유통기한
  • TTL이 지나면 새로운 정보 가져와야 함

TTL 전략

상황추천 TTL이유
정적 IP86400초 (24시간)자주 변경 안 됨
동적 IP300초 (5분)자주 변경됨
이메일 MX3600초 (1시간)적당한 갱신
도메인 검증 TXT300초 (5분)빠른 검증 필요

🛠️ 5. 실무에서의 DNS 활용

5.1 DNS 쿼리 명령어

dig (Linux/macOS)

# 기본 A 레코드 조회
dig example.com
 
# 특정 레코드 조회
dig MX google.com
dig TXT google.com
 
# 역방향 조회
dig -x 8.8.8.8
 
# DNSSEC 검증
dig +dnssec google.com
 
# 특정 DNS 서버 사용
dig @8.8.8.8 google.com

nslookup (Windows/Linux)

# 기본 조회
nslookup example.com
 
# 특정 레코드 조회
nslookup -type=MX google.com
 
# 특정 DNS 서버 사용
nslookup example.com 8.8.8.8

host (Linux/macOS)

# 기본 조회
host example.com
 
# 역방향 조회
host 8.8.8.8

5.2 DNS 문제 진단

일반적인 DNS 문제

증상가능한 원인확인 방법
웹사이트가 안 열림DNS 캐싱 문제dig domain.com 확인
특정 사이트만 안 열림특정 DNS 레코드 오류dig @8.8.8.8 domain.com
느린 인터넷DNS 느림DNS 서버 변경
이메일 수신 안 됨MX 레코드 문제dig MX domain.com

DNS 캐시 플러시

# macOS
sudo dscacheutil -flushcache
sudo killall -HUP mDNSResponder
 
# Windows
ipconfig /flushdns
 
# Linux (systemd-resolved)
sudo systemd-resolve --flush-caches

5.3 공용 DNS 서버

DNS 서버IP 주소특징
Google DNS8.8.8.8, 8.8.4.4빠르고 안정적
Cloudflare DNS1.1.1.1, 1.0.0.1개인정보 보호
OpenDNS208.67.222.222, 208.67.220.220보안 기능 포함
Quad99.9.9.9악성 도메인 차단

🎓 6. 심화 주제

6.1 DNS 보안 (DNSSEC)

**DNSSEC (DNS Security Extensions)**는 DNS 데이터의 무결성과 출처를 검증합니다.

DNSSEC 작동 원리

보안된 DNS:
도메인 데이터 + 디지털 서명 → 검증 가능

DNSSEC 체인

graph TD
    A[루트 키] --> B[TLD 키]
    B --> C[권한 서버 키]
    C --> D[도메인 데이터]
    D --> E[디지털 서명]

6.2 DNS over HTTPS (DoH) & DNS over TLS (DoT)

DNS over HTTPS (DoH)

  • 정의: DNS 쿼리를 HTTPS로 암호화
  • 포트: 443
  • 예시: https://dns.google/resolve?name=example.com

DNS over TLS (DoT)

  • 정의: DNS 쿼리를 TLS로 암호화
  • 포트: 853
  • 특징: 전용 포트 사용

비교

항목DoHDoT
프로토콜HTTPSTLS
포트443853
특징웹 트래픽으로 위장 가능전용 포트

✅ 7. 학습 체크리스트

기초 개념

  • DNS의 정의와 필요성 이해
  • DNS가 IP 주소를 변환하는 방법 이해
  • DNS 계층 구조 이해 (루트 → TLD → 권한)

DNS 쿼리

  • DNS 쿼리 과정 이해 (Recursive Query)
  • DNS 캐싱 작동 원리 이해
  • TTL(Time to Live) 개념 이해

DNS 레코드

  • A 레코드 역할 이해
  • AAAA 레코드 역할 이해
  • CNAME 레코드 역할 이해
  • MX 레코드 역할 이해
  • NS, PTR, TXT 레코드 역할 이해

실무 활용

  • dig 명령어 사용 가능
  • DNS 캐시 플러시 가능
  • DNS 문제 진단 가능

🧪 8. 실습 연습

연습 1: DNS 레코드 조회

# Google의 A 레코드 조회
dig +short A google.com
 
# Google의 MX 레코드 조회
dig +short MX google.com
 
# Google의 TXT 레코드 조회 (SPF 레코드)
dig +short TXT google.com

예상 출력:

172.217.26.142
172.217.27.46
...

5 alt2.aspmx.l.google.com.
10 alt3.aspmx.l.google.com.
...

"v=spf1 include:_spf.google.com ~all"

연습 2: DNS 쿼리 추적

# DNS 쿼리 전체 과정 추적
dig +trace google.com

출력 해석:

; <<>> DiG 9.10.6 <<>> +trace google.com
;; global options: +cmd
.                       3600    IN      NS      a.root-servers.net.
.                       3600    IN      NS      b.root-servers.net.
...
com.                    172800  IN      NS      a.gtld-servers.net.
...
google.com.             300     IN      A       172.217.26.142

연습 3: DNS 응답 시간 측정

# DNS 응답 시간 측정
time dig google.com

💡 9. 학습 후 생각해볼 질문

  1. 이 부분을 이해했나요?

    • DNS 쿼리가 루트 → TLD → 권한 서버로 이동하는 과정을 설명할 수 있나요?
  2. 어떻게 확인하지?

    • dig +trace로 DNS 쿼리 과정을 직접 확인해보세요.
  3. 무엇이 가장 어려웠나요?

    • DNS 레코드의 종류가 많아 헷갈리지 않았나요?
  4. 어떻게 개선할까요?

    • 각 레코드의 용도를 실제로 사용해보면서 이해하세요.

🔗 관련 노트


마지막 업데이트: 2026-01-29 다음 단계: HTTP와 HTTPS 학습