DNS 서버의 구조

DNS 서버의 구조

DNS 서버의 구조

1. DNS란?

DNS 개념

┌─────────────────────────────────────────────────────────────┐
│              DNS (Domain Name System)                       │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  정의:                                                      │
│  • 도메인 이름을 IP 주소로 변환하는 시스템                  │
│  • 인터넷의 "전화번호부"                                    │
│  • 계층적 분산 데이터베이스 시스템                          │
│                                                             │
│  핵심 기능:                                                 │
│  ─────────────────────────────────────────                  │
│  • 이름 해석 (Name Resolution)                              │
│  • 도메인 이름 → IP 주소 변환                               │
│  • 사람이 기억하기 쉬운 이름 사용                           │
│                                                             │
│  포트 번호:                                                 │
│  • 53 (UDP/TCP)                                             │
│                                                             │
│  전송 계층:                                                 │
│  • 주로 UDP 사용 (빠른 조회)                                │
│  • 큰 응답이나 영역 전송은 TCP 사용                         │
│                                                             │
└─────────────────────────────────────────────────────────────┘

이름 해석 (Name Resolution)

┌─────────────────────────────────────────────────────────────┐
│                    이름 해석 과정                           │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  문제:                                                      │
│  • IP 주소는 숫자라서 기억하기 어려움                       │
│    예: 142.250.185.78 ← 구글의 IP 주소                      │
│                                                             │
│  해결:                                                      │
│  • 도메인 이름 사용                                         │
│    예: www.google.com ← 기억하기 쉬움!                      │
│                                                             │
│                                                             │
│  이름 해석 흐름:                                            │
│  ─────────────────────────────────────────                  │
│                                                             │
│  [사용자]                                                   │
│     │                                                       │
│     │ 1. "www.google.com 방문하고 싶어!"                    │
│     ↓                                                       │
│  [웹 브라우저]                                              │
│     │                                                       │
│     │ 2. "www.google.com의 IP 주소는?"                      │
│     ↓                                                       │
│  [DNS 서버]                                                 │
│     │                                                       │
│     │ 3. DNS 조회 (Name Resolution)                         │
│     │    www.google.com → 142.250.185.78                    │
│     ↓                                                       │
│  [웹 브라우저]                                              │
│     │                                                       │
│     │ 4. IP 주소로 웹 서버 접속                             │
│     │    142.250.185.78:443                                 │
│     ↓                                                       │
│  [구글 웹 서버]                                             │
│     │                                                       │
│     │ 5. 웹 페이지 응답                                     │
│     ↓                                                       │
│  [사용자에게 표시]                                          │
│                                                             │
│                                                             │
│  변환 예시:                                                 │
│  ─────────────────────────────────────────                  │
│  www.google.com     → 142.250.185.78                        │
│  www.naver.com      → 223.130.200.107                       │
│  www.github.com     → 140.82.114.4                          │
│  www.youtube.com    → 142.250.207.174                       │
│                                                             │
└─────────────────────────────────────────────────────────────┘

2. 도메인 이름 구조

도메인 이름과 호스트 이름

┌─────────────────────────────────────────────────────────────┐
│                  도메인 이름 구조                           │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  URL 분석:                                                  │
│                                                             │
│  https://www.example.com/index.html                         │
│         └───┬──┘└───┬───┘                                  │
│         호스트명  도메인 이름                               │
│         └────────┬────────┘                                │
│              FQDN (정규화된 도메인 이름)                    │
│                                                             │
│                                                             │
│  구성 요소:                                                 │
│  ─────────────────────────────────────────                  │
│                                                             │
│  1. 호스트 이름 (Host Name)                                 │
│     • www                                                   │
│     • 서버를 식별하는 이름                                  │
│     • "웹 서버"를 의미 (관례)                               │
│     • 생략 가능 (example.com = www.example.com)            │
│                                                             │
│  2. 도메인 이름 (Domain Name)                               │
│     • example.com                                           │
│     • 조직이나 서비스를 식별                                │
│     • 계층 구조로 구성                                      │
│                                                             │
│                                                             │
│  FQDN (Fully Qualified Domain Name):                       │
│  ─────────────────────────────────────────                  │
│  • 완전한 도메인 이름                                       │
│  • 호스트 이름 + 도메인 이름                                │
│  • 예: www.example.com                                      │
│                                                             │
│                                                             │
│  다양한 호스트 이름:                                        │
│  ─────────────────────────────────────────                  │
│  www.example.com    - 웹 서버                               │
│  mail.example.com   - 메일 서버                             │
│  ftp.example.com    - FTP 서버                              │
│  blog.example.com   - 블로그 서버                           │
│  api.example.com    - API 서버                              │
│  dev.example.com    - 개발 서버                             │
│                                                             │
│  → 같은 도메인에 여러 서비스 운영 가능!                     │
│                                                             │
└─────────────────────────────────────────────────────────────┘

계층적 도메인 구조

┌─────────────────────────────────────────────────────────────┐
│              도메인 이름의 계층 구조                        │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  www.example.com. (끝에 점은 루트를 의미)                   │
│  └┬┘ └──┬──┘ └┬┘ │                                        │
│   3     2     1  루트                                       │
│                                                             │
│                                                             │
│  계층 구조:                                                 │
│  ─────────────────────────────────────────                  │
│                                                             │
│           루트 도메인 (.)                                   │
│                 │                                           │
│         ┌───────┼───────┬───────┬───────┐                  │
│         │       │       │       │       │                  │
│       .com    .org    .net    .edu    .kr    ← 1단계 (TLD)│
│         │                               │                  │
│    ┌────┼────┬────┐              ┌──────┼──────┐           │
│    │    │    │    │              │      │      │           │
│  google │  amazon │            .co    .or    .go  ← 2단계  │
│      example                     │                          │
│         │                        │                          │
│    ┌────┼────┐              ┌────┼────┐                    │
│    │    │    │              │    │    │                    │
│   www  mail ftp          example naver                      │
│                               │                             │
│                          ┌────┼────┐                        │
│                          │    │    │                        │
│                         www  mail api     ← 3단계 (호스트)  │
│                                                             │
│                                                             │
│  예시:                                                      │
│  ─────────────────────────────────────────                  │
│                                                             │
│  • www.google.com                                           │
│    - 루트: .                                                │
│    - TLD: com (최상위 도메인)                               │
│    - 2단계: google (조직 이름)                              │
│    - 3단계: www (호스트 이름)                               │
│                                                             │
│  • mail.example.co.kr                                       │
│    - 루트: .                                                │
│    - TLD: kr (국가 코드)                                    │
│    - 2단계: co (상업용)                                     │
│    - 3단계: example (조직 이름)                             │
│    - 4단계: mail (호스트 이름)                              │
│                                                             │
└─────────────────────────────────────────────────────────────┘

최상위 도메인 (TLD)

┌─────────────────────────────────────────────────────────────┐
│              최상위 도메인 (Top-Level Domain)               │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  1. 일반 최상위 도메인 (gTLD: Generic TLD)                  │
│  ─────────────────────────────────────────                  │
│                                                             │
│  .com    - 상업용 (Commercial)                              │
│  .org    - 비영리 기관 (Organization)                       │
│  .net    - 네트워크 (Network)                               │
│  .edu    - 교육 기관 (Education)                            │
│  .gov    - 정부 기관 (Government)                           │
│  .mil    - 군사 기관 (Military)                             │
│  .int    - 국제 기구 (International)                        │
│                                                             │
│                                                             │
│  2. 국가 코드 최상위 도메인 (ccTLD: Country Code TLD)       │
│  ─────────────────────────────────────────                  │
│                                                             │
│  .kr     - 대한민국 (Korea)                                 │
│  .us     - 미국 (United States)                             │
│  .jp     - 일본 (Japan)                                     │
│  .cn     - 중국 (China)                                     │
│  .uk     - 영국 (United Kingdom)                            │
│  .de     - 독일 (Germany)                                   │
│  .fr     - 프랑스 (France)                                  │
│                                                             │
│                                                             │
│  3. 새로운 일반 최상위 도메인 (New gTLD)                    │
│  ─────────────────────────────────────────                  │
│                                                             │
│  .app    - 애플리케이션                                     │
│  .blog   - 블로그                                           │
│  .shop   - 쇼핑                                             │
│  .tech   - 기술                                             │
│  .dev    - 개발자                                           │
│  .cloud  - 클라우드                                         │
│  .ai     - 인공지능                                         │
│                                                             │
│                                                             │
│  한국의 2단계 도메인:                                       │
│  ─────────────────────────────────────────                  │
│                                                             │
│  .co.kr  - 영리 기업                                        │
│  .or.kr  - 비영리 단체                                      │
│  .go.kr  - 정부 기관                                        │
│  .ac.kr  - 대학                                             │
│  .re.kr  - 연구소                                           │
│  .pe.kr  - 개인                                             │
│  .ne.kr  - 네트워크                                         │
│                                                             │
└─────────────────────────────────────────────────────────────┘

3. DNS 서버의 동작

DNS 쿼리 과정

┌─────────────────────────────────────────────────────────────┐
│                  DNS 쿼리 기본 흐름                         │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  [사용자 PC]                                                │
│  192.168.1.10                                               │
│      │                                                      │
│      │ 1. "www.example.com의 IP는?"                         │
│      ↓                                                      │
│  [DNS 캐시 확인]                                            │
│      │                                                      │
│      ├─ 캐시에 있음? → 바로 응답 (빠름!)                   │
│      │                                                      │
│      └─ 캐시에 없음? → DNS 서버 조회                        │
│      │                                                      │
│      │ 2. DNS 쿼리 (UDP 포트 53)                            │
│      ↓                                                      │
│  [로컬 DNS 서버]                                            │
│  (예: ISP DNS 또는 8.8.8.8)                                 │
│      │                                                      │
│      ├─ 캐시에 있음? → 응답                                │
│      │                                                      │
│      └─ 없음? → 상위 DNS 서버에 질의                       │
│      │                                                      │
│      │ 3. "example.com의 IP는?"                             │
│      ↓                                                      │
│  [권한 있는 DNS 서버]                                       │
│  (example.com의 공식 DNS)                                   │
│      │                                                      │
│      │ 4. IP 주소 응답                                      │
│      │    "93.184.216.34"                                   │
│      ↓                                                      │
│  [로컬 DNS 서버]                                            │
│      │                                                      │
│      │ - 캐시에 저장 (다음 조회 빠르게)                     │
│      │ - TTL 동안 유지                                      │
│      │                                                      │
│      │ 5. IP 주소 응답                                      │
│      ↓                                                      │
│  [사용자 PC]                                                │
│      │                                                      │
│      │ 6. IP 주소로 웹 서버 접속                            │
│      │    93.184.216.34:80                                  │
│      ↓                                                      │
│  [웹 서버]                                                  │
│                                                             │
└─────────────────────────────────────────────────────────────┘

재귀적 쿼리와 반복적 쿼리

┌─────────────────────────────────────────────────────────────┐
│              재귀적 쿼리 (Recursive Query)                  │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  클라이언트는 한 번만 요청, DNS 서버가 모든 작업 수행      │
│                                                             │
│  [클라이언트]          [로컬 DNS]      [루트 DNS]  [권한DNS]│
│      │                    │               │           │     │
│      │ 1. www.example.com?│               │           │     │
│      ├───────────────────→│               │           │     │
│      │                    │               │           │     │
│      │                    │ 2. .com은?    │           │     │
│      │                    ├──────────────→│           │     │
│      │                    │ 3. .com DNS   │           │     │
│      │                    │←──────────────┤           │     │
│      │                    │               │           │     │
│      │                    │ 4. example.com은?         │     │
│      │                    ├──────────────────────────→│     │
│      │                    │ 5. IP 주소    │           │     │
│      │                    │←──────────────────────────┤     │
│      │                    │               │           │     │
│      │ 6. 93.184.216.34   │               │           │     │
│      │←───────────────────┤               │           │     │
│      │                    │               │           │     │
│                                                             │
│  특징:                                                      │
│  • 클라이언트는 한 번만 요청                                │
│  • DNS 서버가 알아서 처리                                   │
│  • 클라이언트 입장에서 간편                                 │
│                                                             │
└─────────────────────────────────────────────────────────────┘


┌─────────────────────────────────────────────────────────────┐
│              반복적 쿼리 (Iterative Query)                  │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  DNS 서버가 다른 DNS 서버를 알려주면, 클라이언트가 다시 요청│
│                                                             │
│  [클라이언트]          [로컬 DNS]      [루트 DNS]  [권한DNS]│
│      │                    │               │           │     │
│      │ 1. www.example.com?│               │           │     │
│      ├───────────────────→│               │           │     │
│      │                    │ 2. .com은?    │           │     │
│      │                    ├──────────────→│           │     │
│      │ 3. .com DNS 주소   │ 4. .com DNS 주소          │     │
│      │←───────────────────┤←──────────────┤           │     │
│      │                    │               │           │     │
│      │ 5. example.com은?  │               │           │     │
│      ├──────────────────────────────────────────────→│     │
│      │ 6. IP 주소         │               │           │     │
│      │←──────────────────────────────────────────────┤     │
│      │                    │               │           │     │
│                                                             │
│  특징:                                                      │
│  • 클라이언트가 여러 번 요청                                │
│  • DNS 서버는 다음 DNS 주소만 알려줌                        │
│  • 일반적으로 사용하지 않음 (비효율적)                      │
│                                                             │
└─────────────────────────────────────────────────────────────┘

전체 DNS 조회 과정

┌─────────────────────────────────────────────────────────────┐
│          www.example.com 조회 상세 과정                     │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  [클라이언트]                                               │
│      │                                                      │
│      │ 1. 로컬 캐시 확인                                    │
│      │    - 브라우저 캐시                                   │
│      │    - OS DNS 캐시                                     │
│      │    → 없음!                                           │
│      ↓                                                      │
│  [로컬 DNS 서버]                                            │
│  (예: 8.8.8.8 또는 ISP DNS)                                 │
│      │                                                      │
│      │ 2. 로컬 DNS 캐시 확인                                │
│      │    → 없음! 상위 서버에 질의                          │
│      ↓                                                      │
│  [루트 DNS 서버]                                            │
│  (전 세계 13개 클러스터)                                    │
│      │                                                      │
│      │ 3. ".com TLD는 어디있어?"                            │
│      │    응답: "a.gtld-servers.net (192.5.6.30)"          │
│      ↓                                                      │
│  [.com TLD DNS 서버]                                        │
│      │                                                      │
│      │ 4. "example.com은 어디있어?"                         │
│      │    응답: "ns1.example.com (93.184.216.1)"           │
│      ↓                                                      │
│  [example.com 권한 있는 DNS 서버]                           │
│      │                                                      │
│      │ 5. "www.example.com의 IP는?"                         │
│      │    응답: "93.184.216.34" (A 레코드)                  │
│      ↓                                                      │
│  [로컬 DNS 서버]                                            │
│      │                                                      │
│      │ 6. 캐시에 저장 (TTL: 3600초)                         │
│      │    다음 조회는 빠르게!                               │
│      ↓                                                      │
│  [클라이언트]                                               │
│      │                                                      │
│      │ 7. IP 주소 수신: 93.184.216.34                       │
│      │ 8. 웹 서버 접속                                      │
│      ↓                                                      │
│  [웹 서버: 93.184.216.34]                                   │
│                                                             │
│                                                             │
│  총 소요 시간:                                              │
│  • 캐시 없음: 100~300ms (여러 DNS 서버 조회)                │
│  • 캐시 있음: 1~10ms (즉시 응답)                            │
│                                                             │
└─────────────────────────────────────────────────────────────┘

4. DNS 서버 계층 구조

DNS 서버 유형

┌─────────────────────────────────────────────────────────────┐
│                  DNS 서버의 종류                            │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  1. 루트 DNS 서버 (Root DNS Server)                         │
│  ─────────────────────────────────────────                  │
│     • 최상위 DNS 서버                                       │
│     • 전 세계 13개 클러스터 (실제로는 수백 대)              │
│     • TLD DNS 서버 위치 제공                                │
│     • 예: a.root-servers.net ~ m.root-servers.net           │
│                                                             │
│                                                             │
│  2. TLD DNS 서버 (Top-Level Domain DNS Server)              │
│  ─────────────────────────────────────────                  │
│     • 최상위 도메인 관리                                    │
│     • .com, .net, .org, .kr 등                              │
│     • 2단계 도메인의 DNS 서버 위치 제공                     │
│     • 예: a.gtld-servers.net (.com용)                       │
│                                                             │
│                                                             │
│  3. 권한 있는 DNS 서버 (Authoritative DNS Server)           │
│  ─────────────────────────────────────────                  │
│     • 특정 도메인의 공식 DNS 서버                           │
│     • 실제 IP 주소 정보 보유                                │
│     • 도메인 소유자가 관리                                  │
│     • 예: ns1.example.com                                   │
│                                                             │
│                                                             │
│  4. 로컬 DNS 서버 (Recursive DNS Server)                    │
│  ─────────────────────────────────────────                  │
│     • 클라이언트의 질의를 처리                              │
│     • 재귀적 쿼리 수행                                      │
│     • 캐시 저장                                             │
│     • 예: ISP DNS, 8.8.8.8 (구글), 1.1.1.1 (Cloudflare)     │
│                                                             │
└─────────────────────────────────────────────────────────────┘

DNS 계층 구조

┌─────────────────────────────────────────────────────────────┐
│                  DNS 서버 계층 구조                         │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│                   [루트 DNS 서버]                           │
│                          .                                  │
│                          │                                  │
│         ┌────────────────┼────────────────┐                │
│         │                │                │                │
│    [.com TLD]       [.net TLD]       [.kr TLD]             │
│         │                                 │                │
│    ┌────┼────┐                       ┌────┼────┐           │
│    │    │    │                       │    │    │           │
│  google │  amazon                  .co  .or  .go           │
│      example                         │                     │
│         │                            │                     │
│    [권한 있는 DNS]              [권한 있는 DNS]             │
│    ns1.example.com              ns.example.co.kr           │
│         │                            │                     │
│    ┌────┼────┐                  ┌────┼────┐               │
│    │    │    │                  │    │    │               │
│   www  mail ftp               www  mail api               │
│                                                             │
│                                                             │
│  조회 흐름 (www.example.com):                               │
│  ─────────────────────────────────────────                  │
│                                                             │
│  [클라이언트]                                               │
│       ↓                                                     │
│  [로컬 DNS] → [루트 DNS] → ".com은 여기!"                  │
│       ↓                                                     │
│  [로컬 DNS] → [.com TLD] → "example.com은 여기!"           │
│       ↓                                                     │
│  [로컬 DNS] → [ns1.example.com] → "93.184.216.34!"         │
│       ↓                                                     │
│  [클라이언트] ← "93.184.216.34"                             │
│                                                             │
└─────────────────────────────────────────────────────────────┘

5. DNS 레코드 타입

주요 DNS 레코드

┌─────────────────────────────────────────────────────────────┐
│                  DNS 레코드 타입                            │
├──────────┬──────────────────────────────────────────────────┤
│ 레코드   │                   설명                           │
├──────────┼──────────────────────────────────────────────────┤
│    A     │ • IPv4 주소                                      │
│          │ • 도메인 → IPv4 매핑                             │
│          │ • 예: example.com → 93.184.216.34                │
├──────────┼──────────────────────────────────────────────────┤
│   AAAA   │ • IPv6 주소                                      │
│          │ • 도메인 → IPv6 매핑                             │
│          │ • 예: example.com → 2606:2800:220:1:...          │
├──────────┼──────────────────────────────────────────────────┤
│  CNAME   │ • 별칭 (Canonical Name)                          │
│          │ • 도메인 → 다른 도메인                           │
│          │ • 예: www.example.com → example.com              │
├──────────┼──────────────────────────────────────────────────┤
│    MX    │ • 메일 서버 (Mail eXchange)                      │
│          │ • 메일 전송 목적지                               │
│          │ • 우선순위 포함                                  │
│          │ • 예: example.com → mail.example.com (10)        │
├──────────┼──────────────────────────────────────────────────┤
│    NS    │ • 네임 서버 (Name Server)                        │
│          │ • 권한 있는 DNS 서버                             │
│          │ • 예: example.com → ns1.example.com              │
├──────────┼──────────────────────────────────────────────────┤
│   TXT    │ • 텍스트 정보                                    │
│          │ • 도메인 검증, SPF, DKIM 등                      │
│          │ • 예: example.com → "v=spf1 ..."                 │
├──────────┼──────────────────────────────────────────────────┤
│   PTR    │ • 역방향 조회 (Pointer)                          │
│          │ • IP → 도메인 매핑                               │
│          │ • 예: 34.216.184.93.in-addr.arpa → example.com   │
├──────────┼──────────────────────────────────────────────────┤
│   SOA    │ • 권한 시작 (Start Of Authority)                 │
│          │ • 도메인 관리 정보                               │
│          │ • 시리얼, TTL, 리프레시 등                       │
├──────────┼──────────────────────────────────────────────────┤
│   SRV    │ • 서비스 레코드                                  │
│          │ • 특정 서비스 위치 지정                          │
│          │ • 예: _http._tcp.example.com                     │
└──────────┴──────────────────────────────────────────────────┘

DNS 레코드 예시

example.com DNS 레코드:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

A 레코드 (IPv4):
  example.com.           IN  A     93.184.216.34
  www.example.com.       IN  A     93.184.216.34

AAAA 레코드 (IPv6):
  example.com.           IN  AAAA  2606:2800:220:1:248:1893:25c8:1946

CNAME 레코드 (별칭):
  www.example.com.       IN  CNAME example.com.
  blog.example.com.      IN  CNAME example.github.io.

MX 레코드 (메일 서버):
  example.com.           IN  MX    10 mail1.example.com.
  example.com.           IN  MX    20 mail2.example.com.
                             └─┬─┘    └──────┬───────┘
                            우선순위      메일 서버

NS 레코드 (네임 서버):
  example.com.           IN  NS    ns1.example.com.
  example.com.           IN  NS    ns2.example.com.

TXT 레코드 (텍스트):
  example.com.           IN  TXT   "v=spf1 include:_spf.example.com ~all"
  _dmarc.example.com.    IN  TXT   "v=DMARC1; p=quarantine;"


레코드 형식:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

도메인이름          TTL   클래스  타입  값
example.com.        3600  IN      A     93.184.216.34
└────┬────┘        └┬─┘  └┬┘    └┬┘   └─────┬──────┘
   이름            수명  인터넷  타입    IP 주소

TTL (Time To Live):
• 캐시에 저장되는 시간 (초)
• 3600 = 1시간
• 짧으면: 빠른 업데이트, DNS 서버 부하 증가
• 길면: 캐시 효율 증가, 업데이트 느림

6. DNS 캐시

DNS 캐시 동작

┌─────────────────────────────────────────────────────────────┐
│                  DNS 캐시 (Cache)                           │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  목적:                                                      │
│  • 반복 조회 방지                                           │
│  • 응답 속도 향상                                           │
│  • DNS 서버 부하 감소                                       │
│                                                             │
│                                                             │
│  캐시 계층:                                                 │
│  ─────────────────────────────────────────                  │
│                                                             │
│  1. 브라우저 캐시                                           │
│     • 웹 브라우저 내부                                      │
│     • 가장 빠름 (1~2ms)                                     │
│     • 짧은 TTL (수분)                                       │
│                                                             │
│  2. OS DNS 캐시                                             │
│     • 운영체제 레벨                                         │
│     • 빠름 (5~10ms)                                         │
│     • 중간 TTL (수십분)                                     │
│                                                             │
│  3. 로컬 DNS 서버 캐시                                      │
│     • ISP 또는 공용 DNS                                     │
│     • 보통 (20~50ms)                                        │
│     • 긴 TTL (수시간)                                       │
│                                                             │
│                                                             │
│  캐시 조회 순서:                                            │
│  ─────────────────────────────────────────                  │
│                                                             │
│  [사용자]                                                   │
│      │                                                      │
│      │ 1. www.google.com 접속                               │
│      ↓                                                      │
│  [브라우저 캐시] → 있음? → 즉시 반환 ✓                     │
│      │                                                      │
│      └─ 없음                                                │
│      ↓                                                      │
│  [OS DNS 캐시] → 있음? → 즉시 반환 ✓                       │
│      │                                                      │
│      └─ 없음                                                │
│      ↓                                                      │
│  [로컬 DNS 캐시] → 있음? → 반환 ✓                          │
│      │                                                      │
│      └─ 없음                                                │
│      ↓                                                      │
│  [상위 DNS 서버 조회] → IP 주소 획득                        │
│      ↓                                                      │
│  [각 계층에 캐시 저장]                                      │
│                                                             │
└─────────────────────────────────────────────────────────────┘

캐시 관리

캐시 확인 및 삭제:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Windows:
  # DNS 캐시 확인
  > ipconfig /displaydns

  # DNS 캐시 삭제
  > ipconfig /flushdns

  성공적으로 DNS 해석 캐시를 플러시했습니다.


Linux:
  # systemd-resolved 사용 시
  $ sudo systemd-resolve --flush-caches
  $ sudo systemd-resolve --statistics

  # nscd 사용 시
  $ sudo /etc/init.d/nscd restart

  # dnsmasq 사용 시
  $ sudo systemctl restart dnsmasq


macOS:
  # DNS 캐시 삭제
  $ sudo dscacheutil -flushcache
  $ sudo killall -HUP mDNSResponder


브라우저 DNS 캐시 삭제:
  Chrome:
    chrome://net-internals/#dns
    → "Clear host cache" 클릭

  Firefox:
    브라우저 재시작


캐시 삭제가 필요한 경우:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

• DNS 레코드 변경 후 (서버 이전 등)
• 웹사이트 접속 불가 시
• 잘못된 IP로 연결될 때
• 개발/테스트 중 DNS 변경 시

7. 실무 활용

DNS 조회 명령어

nslookup (Windows/Linux/Mac):
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

1. 기본 조회
   > nslookup www.google.com

   Server:  8.8.8.8
   Address:  8.8.8.8#53

   Non-authoritative answer:
   Name:    www.google.com
   Address: 142.250.185.78


2. 특정 DNS 서버 사용
   > nslookup www.google.com 8.8.8.8


3. 레코드 타입 지정
   > nslookup -type=mx google.com    # MX 레코드
   > nslookup -type=ns google.com    # NS 레코드
   > nslookup -type=txt google.com   # TXT 레코드


4. 역방향 조회 (IP → 도메인)
   > nslookup 142.250.185.78


dig (Linux/Mac):
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

1. 기본 조회
   $ dig www.google.com

   ; <<>> DiG 9.10.6 <<>> www.google.com
   ;; ANSWER SECTION:
   www.google.com.    300    IN    A    142.250.185.78


2. 짧은 출력
   $ dig www.google.com +short
   142.250.185.78


3. 특정 레코드 타입
   $ dig google.com MX      # 메일 서버
   $ dig google.com NS      # 네임 서버
   $ dig google.com AAAA    # IPv6


4. 추적 (Trace)
   $ dig www.google.com +trace

   ; 루트 DNS부터 단계별 조회 과정 표시


5. 특정 DNS 서버 사용
   $ dig @8.8.8.8 www.google.com


6. 역방향 조회
   $ dig -x 142.250.185.78


host (Linux/Mac):
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

1. 기본 조회
   $ host www.google.com
   www.google.com has address 142.250.185.78


2. 상세 정보
   $ host -v www.google.com


3. 특정 레코드 타입
   $ host -t MX google.com
   $ host -t NS google.com


4. 역방향 조회
   $ host 142.250.185.78

공용 DNS 서버

┌─────────────────────────────────────────────────────────────┐
│                  주요 공용 DNS 서버                         │
├──────────────────┬──────────────────────────────────────────┤
│   제공자         │        IP 주소                           │
├──────────────────┼──────────────────────────────────────────┤
│ Google           │ 8.8.8.8, 8.8.4.4                         │
│ Public DNS       │ 2001:4860:4860::8888 (IPv6)              │
│                  │ • 빠르고 안정적                          │
│                  │ • 전 세계에서 사용 가능                  │
├──────────────────┼──────────────────────────────────────────┤
│ Cloudflare       │ 1.1.1.1, 1.0.0.1                         │
│                  │ 2606:4700:4700::1111 (IPv6)              │
│                  │ • 프라이버시 중시                        │
│                  │ • 가장 빠른 속도                         │
├──────────────────┼──────────────────────────────────────────┤
│ Quad9            │ 9.9.9.9, 149.112.112.112                 │
│                  │ • 보안 중시 (악성 사이트 차단)           │
├──────────────────┼──────────────────────────────────────────┤
│ OpenDNS          │ 208.67.222.222, 208.67.220.220           │
│ (Cisco)          │ • 필터링 기능 제공                       │
│                  │ • 가족 보호 옵션                         │
├──────────────────┼──────────────────────────────────────────┤
│ KT               │ 168.126.63.1, 168.126.63.2               │
│                  │ • 국내 ISP DNS                           │
├──────────────────┼──────────────────────────────────────────┤
│ SKB              │ 210.220.163.82, 219.250.36.130           │
│                  │ • 국내 ISP DNS                           │
└──────────────────┴──────────────────────────────────────────┘


DNS 서버 변경 방법:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Windows:
  1. 제어판 → 네트워크 및 인터넷 → 네트워크 연결
  2. 네트워크 어댑터 우클릭 → 속성
  3. "인터넷 프로토콜 버전 4 (TCP/IPv4)" 선택
  4. "다음 DNS 서버 주소 사용" 선택
  5. 기본 설정: 8.8.8.8
     보조 DNS: 8.8.4.4

Linux:
  $ sudo nano /etc/resolv.conf
  nameserver 8.8.8.8
  nameserver 8.8.4.4

macOS:
  1. 시스템 환경설정 → 네트워크
  2. 네트워크 선택 → 고급
  3. DNS 탭 → + 클릭
  4. 8.8.8.8 입력

핵심 정리

개념설명
DNS도메인 이름을 IP 주소로 변환하는 시스템
이름 해석도메인 이름 → IP 주소 변환 과정
도메인 이름컴퓨터/네트워크 식별 이름 (example.com)
호스트 이름서버 식별 이름 (www)
FQDN호스트 이름 + 도메인 이름 (www.example.com)
재귀적 쿼리DNS 서버가 모든 조회 수행
DNS 캐시조회 결과 임시 저장 (속도 향상)
TTL캐시 유지 시간 (Time To Live)

DNS 핵심 개념

┌─────────────────────────────────────────────────────────────┐
│                      DNS 요약                               │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  1. DNS의 역할                                              │
│     ─────────────────────────────────────────               │
│     도메인 이름 → IP 주소 변환                              │
│     www.google.com → 142.250.185.78                         │
│                                                             │
│  2. 계층 구조                                               │
│     ─────────────────────────────────────────               │
│     루트(.) → TLD(.com) → 도메인(example) → 호스트(www)    │
│                                                             │
│  3. DNS 쿼리 과정                                           │
│     ─────────────────────────────────────────               │
│     클라이언트 → 로컬 DNS → 루트 DNS                        │
│     → TLD DNS → 권한 있는 DNS → IP 주소 반환               │
│                                                             │
│  4. 캐시로 속도 향상                                        │
│     ─────────────────────────────────────────               │
│     브라우저 → OS → 로컬 DNS 캐시 순서로 확인              │
│     캐시 있으면 즉시 반환 (빠름!)                           │
│                                                             │
│  5. 주요 레코드                                             │
│     ─────────────────────────────────────────               │
│     • A: IPv4 주소                                          │
│     • AAAA: IPv6 주소                                       │
│     • CNAME: 별칭                                           │
│     • MX: 메일 서버                                         │
│     • NS: 네임 서버                                         │
│                                                             │
└─────────────────────────────────────────────────────────────┘

용어 정리

  • DNS (Domain Name System): 도메인 이름을 IP 주소로 변환하는 시스템
  • 이름 해석 (Name Resolution): 도메인 이름을 IP 주소로 변환하는 과정
  • 도메인 이름 (Domain Name): 컴퓨터나 네트워크를 식별하는 이름 (예: example.com)
  • 호스트 이름 (Host Name): 서버를 식별하는 이름 (예: www, mail)
  • FQDN (Fully Qualified Domain Name): 호스트 이름 + 도메인 이름 (예: www.example.com)
  • TLD (Top-Level Domain): 최상위 도메인 (.com, .org, .kr 등)
  • 재귀적 쿼리 (Recursive Query): DNS 서버가 완전한 답을 찾아 반환하는 방식
  • 반복적 쿼리 (Iterative Query): DNS 서버가 다음 DNS 서버만 알려주는 방식
  • DNS 캐시 (DNS Cache): DNS 조회 결과를 임시 저장하는 메모리
  • TTL (Time To Live): 캐시에 저장되는 시간 (초 단위)
  • 권한 있는 DNS 서버 (Authoritative DNS Server): 특정 도메인의 공식 DNS 서버