DNS (Domain Name System)
한눈에 보기
DNS는 도메인 이름을 IP 주소로 변환하는 분산 계층형 이름 해석 시스템이다. 루트, TLD, 권한 서버와 재귀 리졸버의 역할, 해석 과정, 레코드 타입, 캐싱과 DNSSEC, DoH까지 정리한다.
최종 업데이트 2026.09.17
DNS(Domain Name System)는 사람이 기억하기 쉬운 도메인 이름을 컴퓨터가 통신에 사용하는 IP 주소로 변환해 주는 분산 계층형 이름 해석 시스템이다. 전 세계의 네임 서버(name server)가 트리 구조로 역할을 나누어 갖고 있으며, 캐싱(caching)을 통해 매 요청마다 전체 트리를 탐색하지 않고도 빠르게 응답한다. 웹 브라우저 주소창에 도메인을 입력하는 순간 가장 먼저 동작하는 인터넷의 기반 인프라이다.
왜 DNS가 필요한가
인터넷 통신은 결국 IP 주소로 이루어지지만, 숫자 주소는 외우기 어렵고 서버 이전이나 증설 때마다 바뀔 수 있다. DNS는 이름과 주소를 분리해서, 서비스 운영자가 뒤에서 IP를 바꾸더라도 사용자는 같은 도메인으로 접속할 수 있게 한다. 또한 하나의 도메인에 여러 IP를 매핑해 트래픽을 분산하거나, 지역별로 다른 응답을 돌려주는 지리 기반 라우팅에도 활용된다. 초기 인터넷은 hosts 파일 하나에 모든 매핑을 적어 배포했지만, 호스트 수가 폭증하면서 중앙 파일 방식이 한계에 부딪혔고 그 해법으로 분산 데이터베이스인 DNS가 등장했다.
계층 구조와 서버의 역할
DNS는 도메인 이름을 점 단위로 쪼갠 계층 구조를 그대로 서버 조직에 반영한다. www.example.com이라는 이름은 오른쪽부터 루트, com, example.com 순서의 트리 경로로 읽는다.
- 루트 네임 서버(root name server): 트리의 최상단으로, 각 최상위 도메인을 담당하는 서버의 위치를 알려준다. 전 세계에 13개의 논리 주소가 있고 애니캐스트(anycast)로 수백 대가 분산 운영된다.
- TLD 네임 서버(Top-Level Domain name server): com, org, kr 같은 최상위 도메인을 관리하며, 각 도메인의 권한 서버 위치를 알려준다.
- 권한 네임 서버(authoritative name server): 특정 도메인의 실제 레코드를 보유한 서버로, 최종 답을 줄 수 있는 유일한 주체이다.
- 재귀 리졸버(recursive resolver): 사용자를 대신해 위 서버들을 차례로 질의하고 결과를 캐싱하는 서버이다. 통신사 DNS나 8.8.8.8, 1.1.1.1 같은 공개 리졸버가 여기에 해당한다.
도메인 해석 과정
브라우저에 www.example.com을 입력했을 때의 해석 절차는 다음과 같다.
- 브라우저 캐시와 운영체제 캐시, hosts 파일을 순서대로 확인하고, 있으면 즉시 그 값을 사용한다.
- 캐시에 없으면 운영체제가 설정된 재귀 리졸버에 질의를 보낸다.
- 리졸버는 자체 캐시를 확인한 뒤, 없으면 루트 서버에 물어 com TLD 서버 주소를 받는다.
- 리졸버가 TLD 서버에 물어 example.com의 권한 서버 주소를 받는다.
- 리졸버가 권한 서버에 물어 www.example.com의 IP가 담긴 최종 응답을 받는다.
- 리졸버는 응답을 TTL(Time To Live) 동안 캐싱하고 클라이언트에 돌려주며, 브라우저는 그 IP로 TCP 또는 QUIC 연결을 시작한다.
이때 클라이언트가 리졸버에 보내는 질의를 재귀 질의(recursive query), 리졸버가 루트부터 권한 서버까지 단계별로 묻는 방식을 반복 질의(iterative query)라고 부른다. 클라이언트는 완성된 답을 요구하고, 리졸버는 각 서버에게서 "다음으로 물어볼 곳"을 안내받아 내려가는 구조다. 실제 운영 환경에서는 TLD 서버 주소나 자주 찾는 도메인의 답이 리졸버 캐시에 이미 있으므로 루트까지 올라가는 경우는 드물고, 대부분의 질의는 캐시에서 밀리초 단위로 끝난다. TTL이 짧으면 변경이 빨리 전파되는 대신 캐시 적중률이 떨어지고, 길면 그 반대가 되므로 서버 이전을 앞두고는 미리 TTL을 줄여 두는 것이 실무 관행이다.
주요 레코드 타입 비교
| 레코드 | 역할 | 비고 |
|---|---|---|
| A | 도메인을 IPv4 주소에 매핑 | 가장 기본적인 레코드 |
| AAAA | 도메인을 IPv6 주소에 매핑 | IPv6 보급과 함께 중요성 증가 |
| CNAME | 도메인을 다른 도메인의 별칭으로 지정 | 루트 도메인에는 원칙적으로 사용 불가 |
| NS | 해당 존을 담당하는 네임 서버 지정 | 위임 구조의 핵심 |
| MX | 메일 수신 서버 지정 | 우선순위 값을 함께 가짐 |
| TXT | 임의 문자열 저장 | SPF, DKIM 등 인증 용도로 활용 |
전송 방식과 보안
DNS 질의는 전통적으로 UDP 53번 포트를 사용한다. 질의와 응답이 각각 패킷 하나로 끝나는 통신이라 연결 수립 비용이 아까운 데다, 응답이 없으면 그냥 다시 물으면 되기 때문이다. 다만 응답이 UDP 한 패킷에 담기 어려울 만큼 크거나, 네임 서버 간에 존 전체를 복제하는 존 전송(zone transfer)이 필요할 때는 TCP로 전환한다. 평문 프로토콜이라는 약점 때문에 위조 응답을 캐시에 심는 캐시 포이즈닝(cache poisoning) 공격이 가능했고, 이를 막기 위해 응답에 전자 서명을 붙여 무결성을 검증하는 DNSSEC(DNS Security Extensions)이 도입되었다. 또한 질의 내용 자체를 제3자가 엿보지 못하도록 암호화하는 DoH(DNS over HTTPS)와 DoT(DNS over TLS)가 최신 브라우저와 운영체제에 기본 탑재되는 추세이다. DNSSEC은 위변조 방지, DoH와 DoT는 도청 방지라는 서로 다른 문제를 푼다는 점을 구분해야 한다.
면접에서 이렇게 물어본다
- 브라우저에 도메인을 입력하고 IP를 얻기까지의 과정을 단계별로 설명해 보라.
- 재귀 질의와 반복 질의의 차이는 무엇이고 각각 누가 수행하는가.
- A 레코드와 CNAME 레코드의 차이, 그리고 CNAME을 루트 도메인에 쓰기 어려운 이유는 무엇인가.
- TTL을 길게 또는 짧게 설정할 때의 장단점을 서버 이전 시나리오로 설명해 보라.
- DNS 캐시 포이즈닝은 어떤 공격이며 DNSSEC은 이를 어떻게 막는가.
네트워크에서 같이 읽기
- I/O 모델: 블로킹, 논블로킹, I/O 멀티플렉싱 (I/O Models)I/O 모델은 애플리케이션이 커널에 입출력을 요청했을 때 결과를 기다리는 방식이다. 블로킹, 논블로킹, I/O 멀티플렉싱의 동작 원리와 select, epoll, io_uring, 이벤트 루프까지 정리한다.
- CORS (Cross-Origin Resource Sharing)CORS는 브라우저의 동일 출처 정책을 안전하게 완화하는 HTTP 헤더 기반 메커니즘이다. 단순 요청과 프리플라이트, 자격 증명, 서버 설정에서 자주 하는 실수까지 정리했다.
- HTTP와 HTTPS (HTTP and HTTPS)HTTP는 웹의 요청과 응답을 주고받는 프로토콜이고, HTTPS는 이를 TLS 위에 얹어 암호화한 것이다. 무상태성, 인증서 신뢰 사슬, HTTP/1.1과 2, 3의 차이까지 비교해 정리한다.
- 로드 밸런싱 (Load Balancing)로드 밸런싱은 트래픽을 여러 서버에 분산해 처리량과 가용성을 높이는 기술이다. L4와 L7의 차이, 라운드 로빈과 최소 연결 등 분산 알고리즘, 헬스 체크와 세션 처리 전략을 정리한다.
이 개념, 내 코드에서는 어떻게 물어볼까요
데브핏(DevFit)에 채용공고 URL을 붙여 넣고 레포지토리를 연결하면, 내가 쓴 커밋에서 예상 질문과 어필 포인트를 만듭니다. 하루 10회까지 무료입니다. 합불 판정이나 지원자 랭킹은 만들지 않고, 최종 판단은 사람이 합니다.
공고 넣고 시작하기