Skip to content
난이도 면접 빈출문제은행 3

DNS ​

DNS(Domain Name System, 도메인 이름 시스템)는 example.com 같은 도메인 이름(domain name)을 컴퓨터가 실제로 찾아갈 IP(Internet Protocol, 인터넷 프로토콜) 주소로 바꿔 주는 시스템이다. 전 세계 이름을 서버 한 대가 다 아는 것이 아니라, 이름을 계층으로 나눠 여러 서버가 나눠 맡는다. 브라우저는 대신 찾아 주는 서버에 한 번만 묻고, 그 서버가 계층을 따라 내려가며 답을 찾아온다.

왜 필요한가 ​

네트워크에서 패킷(packet)을 목적지로 보내려면 IP 주소가 있어야 한다. 하지만 사람은 192.0.2.10 같은 숫자를 외우기 어렵고, 서버를 옮기면 주소가 바뀌기도 한다. 그래서 사람은 이름을 쓰고, 시스템이 그 이름을 그때그때 주소로 바꿔 주는 층을 하나 둔다. 이름과 주소를 분리해 두면 서비스 운영자는 주소를 바꿔도 이름은 그대로 유지할 수 있다.

도메인 이름의 계층 ​

도메인 이름은 점으로 나뉜 조각을 오른쪽부터 읽는다. www.example.com.에서 맨 끝의 보이지 않는 점이 루트(root)이고, 그 아래 com, 그 아래 example, 맨 아래 www가 있다. 전체 이름 공간은 루트에서 갈라지는 뒤집힌 트리(tree) 모양이다. 루트 바로 아래 층인 com·org·kr을 TLD(Top-Level Domain, 최상위 도메인)라고 부른다.

트리의 각 층은 네임 서버(name server)가 나눠 맡는다. 네임 서버는 자기가 맡은 도메인 정보를 가지고 질의에 답하는 서버다.

층예맡는 서버
루트.루트 네임 서버
최상위 도메인com, org, krTLD 네임 서버
2단계 이하example.com, www.example.com권한 네임 서버(authoritative name server)
  • 루트 네임 서버: 각 TLD를 어느 네임 서버가 맡는지만 알려 준다.
  • TLD 네임 서버: com 아래의 도메인마다 어느 네임 서버가 담당하는지 알려 준다.
  • 권한 네임 서버: 그 도메인의 실제 리소스 레코드(resource record)를 가진 서버다. 도메인 주인이 레코드를 등록하는 곳이 여기이고, 최종 답은 이 서버가 준다.

이렇게 위층은 "누구에게 물어보라"는 위임(delegation) 정보만 들고 아래층에 일을 넘긴다. 덕분에 도메인이 수억 개여도 한 서버에 부담이 몰리지 않고, 각 조직이 자기 도메인을 직접 관리할 수 있다.

리졸버와 두 가지 질의 방식 ​

브라우저가 루트부터 직접 묻지는 않는다. 대신 리졸버(resolver)에게 부탁한다. 리졸버는 클라이언트 대신 여러 네임 서버에 차례로 물어 최종 답을 찾아 주는 DNS 서버다. 보통 ISP(Internet Service Provider, 인터넷 서비스 제공자)가 운영하는 것이 기본으로 잡히고, Google의 8.8.8.8이나 Cloudflare의 1.1.1.1 같은 공개 리졸버를 직접 지정할 수도 있다. 어느 리졸버를 쓸지는 DHCP(Dynamic Host Configuration Protocol, 동적 호스트 구성 프로토콜)가 네트워크 접속 때 알려 주거나 사용자가 설정한다.

질의 방식은 두 가지다.

  • 재귀 질의(recursive query): "최종 답을 찾아서 달라"는 요청이다. 클라이언트가 리졸버에게 보내는 질의가 이 방식이라, 클라이언트는 한 번 묻고 답 하나만 받는다.
  • 반복 질의(iterative query): 물어본 서버가 답을 모르면 "다음은 이 서버에 물어보라"는 안내만 돌려준다. 리졸버가 루트·TLD·권한 네임 서버에 묻는 방식이 이것이다. 루트나 TLD 서버가 매번 끝까지 대신 찾아 주면 전 세계 질의가 이 서버들에 쌓이므로, 이 서버들은 다음 안내만 주고 따라가는 일은 리졸버가 맡는다.

조회 흐름 ​

주소창에 www.example.com을 치면 가까운 캐시(cache)부터 차례로 확인하고, 모두 없을 때만 네트워크 너머로 물으러 간다. 가까운 곳에서 답을 찾을수록 왕복이 줄어 빨라지고, 위층 네임 서버로 가는 질의도 줄어든다.

다이어그램 로딩…
  1. 브라우저가 자기 캐시에 최근 결과가 있는지 본다.
  2. 없으면 OS에 묻는다. OS의 이름 조회 기능은 로컬 hosts 파일과 OS 캐시를 확인한다. 리눅스에서는 이 확인 순서를 /etc/nsswitch.conf 설정이 정한다.
  3. 그래도 없으면 리졸버에 재귀 질의를 보낸다. 리졸버도 자기 캐시에 답이 있으면 바로 돌려준다.
  4. 리졸버에 답이 없으면 루트, TLD, 권한 네임 서버 순으로 반복 질의를 해서 답을 얻고, 캐시에 넣은 뒤 돌려준다.

hosts 파일은 이름과 IP 주소 짝을 직접 적어 두는 로컬 파일이다(리눅스·macOS /etc/hosts). 여기에 적은 짝은 DNS보다 먼저 쓰이는 것이 일반적이라, 개발할 때 도메인을 로컬 서버로 돌리는 데 자주 쓴다.

이어지는 내용은 DNS 2에서 다룬다. 권한 네임 서버가 주는 레코드의 종류, 캐시 때문에 변경이 늦게 퍼지는 이유, DNS가 쓰는 전송 방식을 본다.

면접 포인트 ​

  • "DNS 조회 과정은?" → 브라우저 캐시 → OS(hosts·캐시) → 리졸버(재귀 질의) → 루트 → TLD → 권한 네임 서버(반복 질의) → 결과 캐시.
  • "재귀 질의와 반복 질의 차이는?" → 재귀 질의는 최종 답을 요구(클라이언트→리졸버), 반복 질의는 다음 서버 안내를 받아 리졸버가 직접 따라감.
  • "이름 공간을 왜 계층으로 나누나요?" → 위층은 위임 정보만 들고 아래층에 넘겨 한 서버에 부담이 몰리지 않고, 조직마다 자기 도메인을 직접 관리한다.

관련 문서