2부 · 주소를 찾아서: 도메인과 DNS

← 1부 | 목차 | 다음: 3부 · HTTP →

지금 다루는 단계: ① DNS 조회 — 여정의 첫 발걸음입니다.
flowchart LR
    U["사용자<br/>주소 입력"]:::user
    DNS["① DNS 조회<br/>이름 → 주소"]:::focus
    TCP["② 연결"]:::dim
    REQ["③ 요청"]:::dim
    SRV["④ 서버"]:::dim
    RES["⑤ 응답"]:::dim
    REN["⑥ 렌더링"]:::dim
    U --> DNS --> TCP --> REQ --> SRV --> RES --> REN

    classDef user fill:#fff3b0,stroke:#d4a017,color:#000
    classDef focus fill:#cfe8ff,stroke:#2b6cb0,color:#000,stroke-width:3px
    classDef dim fill:#f0f0f0,stroke:#bbb,color:#999

컴퓨터는 이름이 아니라 번호로 찾아간다

우리는 google.com이라는 이름을 기억합니다. 하지만 인터넷 위의 컴퓨터들은 이름이 아니라 번호로 서로를 찾습니다. 이 번호를 IP 주소(IP address)라고 합니다.

CODE
google.com  →  142.250.x.x   (이런 식의 숫자)

IP 주소는 인터넷에서의 전화번호 같은 것입니다. 집집마다 다른 번호가 있듯, 인터넷에 연결된 모든 컴퓨터(서버 포함)에는 주소가 있어요.

문제는, 사람이 142.250.x.x 같은 숫자를 외우긴 어렵다는 것이죠. 그래서 이름 ↔ 번호를 연결해 주는 전화번호부가 필요합니다. 그게 바로 DNS입니다.

DNS(Domain Name System, 도메인 이름 시스템): 사람이 읽는 이름(google.com)을 컴퓨터가 쓰는 번호(IP 주소)로 바꿔 주는 인터넷의 전화번호부.

도메인 이름의 구조

www.example.com 같은 주소는 점(.)으로 나뉜 조각들로 이루어집니다. 오른쪽에서 왼쪽으로 갈수록 범위가 좁아집니다.

CODE
www  .  example  .  com
 │         │         │
 │         │         └── 최상위 도메인(TLD): .com, .org, .kr 등 큰 분류
 │         └──────────── 도메인 이름: 우리가 등록해 소유하는 부분
 └────────────────────── 서브도메인: 한 도메인 안의 세부 구역 (예: www, blog, mail)
  • .com, .kr, .org 같은 최상위 도메인(TLD)은 가장 큰 우편번호 구역입니다.
  • example 부분이 우리가 돈을 내고 등록해 쓰는 고유한 이름입니다.
  • www, blog, shop 같은 서브도메인은 그 안의 세부 구역이고요.

이름이 주소로 바뀌는 과정

브라우저가 example.com의 주소를 알아내는 과정은, 전화번호부를 한 번에 한 권 뒤지는 게 아니라 여러 번호부에 차례로 물어보는 릴레이입니다.

sequenceDiagram
    participant B as 브라우저
    participant R as DNS 리졸버<br/>(통신사 등)
    participant Root as 루트 서버
    participant TLD as .com 서버
    participant Auth as example.com<br/>담당 서버

    B->>R: example.com 주소 알아?
    Note over R: 먼저 캐시(기억)부터 확인
    R->>Root: .com은 어디서 관리해?
    Root-->>R: .com 담당은 저쪽이야
    R->>TLD: example.com 담당은 누구야?
    TLD-->>R: 담당 서버 위치는 여기
    R->>Auth: example.com의 IP 주소 줘
    Auth-->>R: 93.184.x.x 입니다
    R-->>B: 주소는 93.184.x.x!

말로 풀면 이렇습니다.

  1. 브라우저가 DNS 리졸버(보통 통신사가 운영하는 안내원)에게 "example.com 주소 알아?"라고 묻습니다.
  2. 리졸버는 먼저 기억(캐시)을 뒤집니다. 최근에 찾아봤으면 바로 답합니다.
  3. 모르면 루트 서버에게 ".com은 누가 관리해?"라고 묻고,
  4. .com 서버에게 "example.com 담당이 누구야?"를 묻고,
  5. 마지막으로 그 담당 서버에게 진짜 IP 주소를 받아 옵니다.
  6. 받은 주소를 브라우저에 알려 주고, 다음을 위해 잠시 기억해 둡니다.

복잡해 보이지만, 한 번 찾으면 한동안 캐시(cache, 임시 저장)에 보관되므로 매번 이 릴레이를 다 도는 건 아닙니다. 그래서 두 번째 방문은 더 빠릅니다.

캐시(cache): 자주 쓰는 답을 가까운 곳에 미리 적어 두는 메모. DNS뿐 아니라 웹 곳곳에서 속도를 위해 쓰입니다.

캐시는 여러 층으로 쌓여 있다

사실 브라우저는 리졸버에게 묻기 전에 더 가까운 메모부터 차례로 뒤집니다. 가까운 곳에 답이 있으면 거기서 멈추죠.

flowchart LR
    A["① 브라우저<br/>캐시"]:::net --> B["② 운영체제<br/>캐시"]:::net --> C["③ 리졸버<br/>캐시"]:::net --> D["④ 릴레이로<br/>직접 조회"]:::net
    A -.->|있으면 여기서 끝| STOP1["✓"]:::good
    B -.->|있으면 여기서 끝| STOP2["✓"]:::good
    C -.->|있으면 여기서 끝| STOP3["✓"]:::good

    classDef net fill:#cfe8ff,stroke:#2b6cb0,color:#000
    classDef good fill:#c6f6d5,stroke:#276749,color:#000

각 캐시에는 "이 답을 얼마나 오래 믿어도 되는지"를 정한 TTL(Time To Live, 유효 시간)이 함께 저장됩니다. TTL이 지나면 그 메모는 버리고 다시 물어봅니다. 사이트 주소를 바꾼 뒤 "왜 아직 옛날 화면이 보이지?" 하는 일이 생기는 건, 이 캐시들의 TTL이 아직 안 끝났기 때문입니다(전파 지연).

DNS는 주소 하나만 알려주는 게 아니다

DNS 전화번호부에는 용도가 다른 여러 종류의 기록(레코드, record)이 있습니다. 초보가 다 외울 필요는 없지만, 이름은 종종 보게 됩니다.

레코드역할
A이름 → IPv4 주소 (가장 기본)
AAAA이름 → IPv6 주소 (더 긴 새 형식 주소)
CNAME이름 → 다른 이름 (별명 연결, 예: www → 본 도메인)
MX그 도메인의 메일 서버는 어디인지
TXT임의의 텍스트 메모 (도메인 소유 증명 등에 쓰임)

즉 한 도메인은 "웹은 이 서버, 메일은 저 서버"처럼 용도별로 다른 곳을 가리킬 수 있습니다. 우리가 다루는 웹 접속에서는 주로 A(또는 AAAA) 레코드가 쓰입니다.

직접 확인해 보기 (선택 실습)

브라우저만으로도 충분하지만, 호기심이 있다면 컴퓨터의 명령 도구로 직접 이름을 주소로 바꿔 볼 수 있습니다. 안 해도 이해에는 지장 없습니다.

BASH
# 윈도우: 명령 프롬프트(cmd)에서
nslookup example.com

# 맥/리눅스: 터미널에서
nslookup example.com
# 또는
dig example.com

예상 출력(숫자는 환경마다 다릅니다):

CODE
이름:    example.com
Address: 93.184.x.x

여기서 보이는 Address가 바로 브라우저가 실제로 연결하러 가는 번호입니다.

흔한 오해와 한계

  • DNS는 페이지 내용을 가져오지 않습니다. 오직 "이름 → 주소" 변환만 합니다. 실제 페이지를 받아오는 건 다음 단계(HTTP)의 일입니다.
  • DNS가 느리거나 잘못되면 "사이트를 찾을 수 없음" 류의 오류가 납니다. 사이트 자체는 멀쩡한데 전화번호부만 문제일 수 있다는 뜻이죠.
  • 캐시 덕에 빠르지만, 그래서 방금 바뀐 주소가 한동안 옛 주소로 보이는 일도 생깁니다(전파 지연).

이 부에서 기억할 것

  • 컴퓨터는 이름이 아니라 IP 주소(번호)로 서로를 찾는다.
  • DNS는 이름을 번호로 바꿔 주는 인터넷 전화번호부다.
  • 변환은 리졸버 → 루트 → TLD → 담당 서버로 이어지는 릴레이이고, 캐시 덕에 보통은 빠르다.
  • 캐시는 브라우저 → OS → 리졸버 여러 층으로 쌓여 있고, 각 메모에는 유효 시간(TTL)이 있다.
  • DNS에는 용도별 레코드(A·AAAA·CNAME·MX 등)가 있고, 웹 접속엔 주로 A 레코드가 쓰인다.
  • DNS는 주소만 알려 줄 뿐, 페이지 내용은 다음 단계에서 가져온다.

이제 주소를 알았으니, 그 서버에게 실제로 "페이지 주세요"라고 말을 거는 방법 — HTTP를 봅니다.

3부 · 대화의 규칙: HTTP