DNS

도메인 이름 조회 원리와 레코드 종류

DNS는 도메인을 IP로 변환하는 시스템. Resolver → Root → TLD → Authoritative 순으로 조회하고, TTL 동안 캐시한다. A, CNAME, MX 등 레코드 종류별 용도가 다르다.

Basics

개념

DNS(Domain Name System)는 도메인 이름을 IP 주소로 변환하는 전 세계 분산 전화번호부다. 컴퓨터는 IP로 통신하는데 사람이 IP를 외우긴 어려우니, 사람이 쓸 이름(google.com)과 기계가 쓸 주소(142.250.80.46)를 매핑한다. DNS가 없으면 웹 서비스가 사실상 불가능하다.

왜 필요한가

  • IP는 외우기 어렵다 — 사람이 기억할 수 있는 이름이 필요
  • IP는 바뀐다 — 서버를 옮겨도 도메인은 그대로 유지되면 좋음
  • 하나의 이름이 여러 IP로 분산될 수 있다 — 로드밸런싱, 지역별 서버
  • 서비스별 전용 이름mail.myapp.com, api.myapp.com 식으로 분리

조회 흐름

브라우저 입력
  → 내 컴퓨터 캐시 확인
  → /etc/hosts 확인
  → Resolver (ISP or 8.8.8.8) 에게 질문
      → Root 서버: ".com 담당은 저쪽이야"
      → TLD 서버: "google.com 담당은 저쪽이야"
      → Authoritative 서버: "142.250.80.46 이야"
  → IP 반환 → 연결

일반적으로 Resolver가 전체 과정을 대행하고 최종 IP만 돌려준다.

레코드 종류

레코드 연결 대상 언제 씀
A 도메인 → IPv4 기본 서버 연결
AAAA 도메인 → IPv6 IPv6 지원
CNAME 도메인 → 도메인 별칭, Vercel/Netlify 같은 외부 서비스 연결
MX 메일 서버 지정 이메일 수신
NS 네임서버 지정 DNS 정보 어느 서버가 갖고 있는지
TXT 텍스트 도메인 소유권 인증, SPF/DKIM 같은 스팸 방지

캐싱과 TTL

  • 매번 전체 조회하면 느리니까 결과를 캐시에 저장
  • TTL = 캐시 유효 시간 (초 단위). 지나면 다시 조회
  • IP를 바꿔도 TTL이 지나야 전 세계에 반영됨 → 도메인 이전할 땐 TTL을 먼저 줄여놓는 것이 기본

실무에서 쓰는 상황

  • 서비스 배포 — 서버 IP 받으면 A 레코드 등록해서 도메인 연결
  • 서브도메인api.myapp.com, admin.myapp.com 각각 다른 서버로 연결
  • 도메인 이전 — 서버 바꿀 때 A 레코드 수정, TTL 때문에 바로 안 바뀜
  • HTTPS 인증서 — TXT 레코드로 도메인 소유권 증명 (Let's Encrypt DNS-01 챌린지)
  • 메일 설정 — MX로 메일 서버, TXT로 SPF/DKIM 스팸 방지
  • CDN — Cloudflare 붙일 때 NS를 Cloudflare로 위임

A 레코드 등록하면 끝이 아님

DNS는 첫 번째 단계일 뿐, 그 뒤에도 필요한 것들이 있다.

도메인 구매
→ A 레코드 등록 (DNS)
→ 웹서버 설정 (Nginx 등)
→ SSL 인증서 발급 (HTTPS)
→ 포트 오픈 (80, 443)
→ 끝

CNAME 패턴

myapp.com      →  A      →  123.456.789.0
www.myapp.com  →  CNAME  →  myapp.com            # IP 바뀌면 여기도 자동 반영
myapp.com      →  CNAME  →  cname.vercel-dns.com # Vercel 배포 시

더 보기

  • TCP와-UDP — DNS는 기본 UDP, 응답이 크면 TCP fallback
  • 서버-배포-구성 — DNS + Nginx + SSL + Docker 실무 구성 예시
  • Nginx — DNS로 도달한 요청을 받아서 내부 서비스로 분배
sunshinemoon · 2026