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 배포 시