인터넷의 전화번호부
DNS(Domain Name System)는 사람이 읽는 이름 (github.com) 을 IP 주소 (140.82.121.3) 로 번역해줘. DNS 없으면 모든 URL 이 숫자 문자열일 거야. 있으니까 이름만 외우면 돼.
도메인 입력했을 때 벌어지는 일
브라우저가 github.com 열면 lookup chain 이 발사돼:
- OS 캐시 — 이 머신이 최근에 풀었어?
- 라우터 캐시 — 라우터가 최근에 풀었어?
- Recursive resolver — ISP 의 DNS, 또는 public (1.1.1.1, 8.8.8.8). 무거운 일 다 함.
- Root nameserver — ".com 은 .com TLD 서버한테 물어봐."
- TLD nameserver — "github.com 은 GitHub 의 authoritative 한테 물어봐."
- Authoritative nameserver — 실제 IP 반환.
이 전체 춤이 millisecond 단위고 모든 layer 에서 캐시돼. 브라우저는 보통 step 3 (recursive resolver) 까지만 쳐 — recursive resolver 가 그 아래 전부 캐시하니까.
/etc/hosts — DNS 보다 먼저 있던 override
DNS 전엔 모든 머신이 /etc/hosts 파일에 이름→IP 매핑을 손으로 적었어. 지금도 있고 DNS 보다 먼저 검사돼. 로컬 override 한테 무지 유용해 — 테스트용으로 도메인을 다른 IP 로 보내거나, 광고 서버 차단하거나, LAN 의 장치 이름 짓거나.
mDNS / .local 주소
mDNS(Multicast DNS) 는 같은 LAN 의 장치들이 DNS 서버 없이 이름으로 서로 찾게 해줘. macOS 에선 Bonjour. 같은 네트워크의 모든 맥은 hostname.local 로 도달 가능. ssh office.local 이 DNS 한 줄, SSH config 한 줄도 없이 그냥 동작 — 그게 mDNS.