ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [책집필] 면접 질문 - DNS
    Front-end 개발 2023. 10. 14. 15:51

    프론트엔드와 백엔드 개발자 그리고 서버 엔지니어의 기술 면접 질문으로 나올 수 있는 질문이다.

     

    DNS 에 대해 설명하세요


    1. 30초 답변:

    DNS(Domain Name System)는 컴퓨터가 통신을 하는데 사용하는 숫자로 된 IP 주소(Internet Protocol Address)를 사람이 이해하기 쉬운 도메인 이름으로 변환(mapping)하고 라우팅 정보를 제공하는 계층형 분산 데이터베이스 시스템입니다. 전화번호부와 비슷한 역할을 하며, 전 세계에 분산되어 있는 DNS 서버들이 계층적으로 도메인 이름과 IP 주소의 정보를 저장하고 공유합니다. 이를 통해 기억하기 어려운 IP 주소를 모르더라도 도메인 이름을 사용하여 원하는 웹사이트나 웹 자원에 쉽고 빠르게 접근할 수 있습니다.

    2. 상세 답변:

    2-1. DNS의 계층적 구조

    DNS는 도메인 이름 공간이라고 부르는 트리 형태의 계층 구조로 이루어져 있습니다. 트리의 각 노드는 0개 이상의 리소스 레코드(RR: Resource Record)라고 부르는 데이터를 가지고 있습니다. 리소스 레코드에는 도메인 이름과 IP 주소, 네임 서버, 메일 서버 등의 정보가 담겨 있습니다. 트리의 최상위에는 루트 영역(root zone)이라고 부르는 노드가 있으며, 여기서부터 여러 개의 하위 영역(zone)으로 나뉘어집니다. 각 영역은 하나 이상의 권한 있는 네임 서버(Name Server)에 의해 관리됩니다.

    DNS는 전 세계에 수많은 DNS 서버가 분산되어 운영됩니다. 가장 상위 DNS 서버인 루트 네임 서버는 국제 인터넷 주소 관리 기구(ICANN)에 의해 전체 도메인 네임 공간을 관리합니다. 루트 도메인은 도메인 이름 끝의 점(.)이며 보통 생략합니다. 루트 네임 서버는 전 세계에 13대가 구축되어 있으며, 각각의 루트 네임 서버는 다른 루트 서버의 정보를 가지고 있습니다. 루트 네임 서버는 특정 도메인에 대한 IP 주소를 직접 알고 있지 않고, 해당 도메인을 관리하는 하위의 네임 서버의 정보를 알려줍니다.

    루트 네임 서버 하위에는 다시 Top-Level Domain, Sencond-Level Domain, Trid-Level Domain 등 계층적으로 명명하지만 최상위 수준을 TLD (Top-Level Domain) 네임 서버, 그외 도메인을 하위 도메인 네임 서버라고 부릅니다. 도메인 네임을 등록하기 위해 사용하는 Cafe24, 가비아, Route53와 같은 도메인 판매 업체들이 하위 도메인 네임 서버를 운영하고 있습니다. TLD에는 com, net, org 과 같은 일반 TLD와 ko, app, gov와 같은 특수 TLD가 있습니다. 각 TLD 네임 서버는 해당 TLD의 하위 도메인을 관리하는 네임 서버의 정보를 알고 있습니다.

    이미지출처 : https://better-together.tistory.com/128

    2-2. DNS 기본 동작 방식

    사용자가 웹 브라우저에서 www.google.com을 입력하면, 웹 브라우저는 DNS 서버에 IP 주소를 요청하기 전에 사용자 컴퓨터의 DNS 캐시(Cashe)와 hosts 파일을 우선적으로 확인합니다. IP 주소가 없다면 보통 KT, SKT, 유플러스와 같은 인터넷 서비스 제공자(ISP: Internet Service Provider)가 제공하는 로컬 DNS 서버에게 www.google.com에 대한 IP 주소를 요청하는 재귀적 쿼리를 보냅니다.

    로컬 DNS 서버는 자신의 캐시에 해당 정보가 없으므로, 루트 네임 서버에게 반복적 쿼리를 보냅니다. 루트 네임 서버는 com 영역을 관리하는 TLD 네임 서버의 참조를 반환합니다. 로컬 DNS 서버는 TLD 네임 서버에게 반복적 쿼리를 보냅니다. TLD 네임 서버는 google.com 영역을 관리하는 권한 있는 하위 도메인 네임 서버의 참조를 반환합니다. 로컬 DNS 서버는 권한 있는 네임 서버에게 반복적 쿼리를 보냅니다. 권한 있는 네임 서버는 www.google.com의 IP 주소를 반환합니다. 로컬 DNS 서버는 이 IP 주소를 자신의 캐시에 저장하고, DNS 클라이언트인 사용자에게 재귀적 응답으로 반환합니다. 사용자의 웹 브라우저는 응답 받은 IP 주소로 www.google.com에 대한 요청을 전송하고, 웹 페이지를 표시합니다. 

    이미지 출처: https://www.youtube.com/watch?v=sDXcLyrn6gU

    3. 꼬리질문: DNS의 재귀적 쿼리와 반복적 쿼리

    재귀적 쿼리(Recursive Query): DNS 클라이언트가 DNS 서버에게 도메인 이름을 IP 주소로 변환하도록 요청하는 쿼리입니다. DNS 서버는 자신이 해당 도메인 이름에 대한 권한이 있는 네임 서버인지, 캐시에 응답이 있는지 확인합니다. 만약 둘 다 아니라면, DNS 서버는 다른 네임 서버에게 쿼리를 전달하고, 그 결과를 받아서 DNS 클라이언트에게 반환합니다. 이 과정은 DNS 서버가 결정적인 응답을 받을 때까지 반복됩니다.

    반복적 쿼리(Iterative Query): DNS 서버가 다른 네임 서버에게 도메인 이름을 IP 주소로 변환하도록 요청하는 쿼리입니다. 다른 네임 서버는 자신이 해당 도메인 이름에 대한 권한이 있는 네임 서버인지, 캐시에 응답이 있는지 확인합니다. 만약 둘 다 아니라면, 다른 네임 서버는 DNS 서버에게 참조를 반환합니다. 참조란 해당 도메인 이름을 관리하는 더 구체적인 네임 서버의 정보를 의미합니다. DNS 서버는 이 참조를 통해 다음 네임 서버에게 쿼리를 보냅니다. 이 과정은 DNS 서버가 결정적인 응답을 받을 때까지 반복됩니다.

    4. 사전 지식

    4-1. 도메인의 세부 명칭

    DNS 쿼리로 요청된 URI가 www.google.com(.) 라면, 생략된 점(.)은 Root Domain, .com 는 Top-level Domain, .google.com는 Second-level Domain 그리고 www는 호스트 네임(Host Name)이라고 부른다.

     

    4-2. Local DNS Server

    일반적으로 로컬 DNS 서버는 DNS 계층에는 포함되지 않지만, DNS가 동작하는데 중요한 역할을 하는 서버로서 사용자가 도메인 이름에 매칭되는 IP주소를 찾을 때 가장 먼저 찾아가는 DNS 서버입니다.

    권한이 있는 네임 서버와 없는 네임 서버

    권한이 있는 서버는 A, AAAA, CNAME 등의 DNS 이름 레코드를 보유한 서버입니다. 권한이 없는 서버는 도메인에 대한 이전 쿼리를 기반으로 캐시 파일을 생성하여 원본 이름 레코드를 보유하지 않습니다. 로컬 DNS 서버가 이에 해당합니다.

     

    4-3. DNS 리소스 레코드 종류 (DNS Resource Recode)

    DNS 리소스 레코드는 DNS 서버가 도메인 이름과 IP 주소를 매핑하고, 다른 DNS 서비스를 제공하기 위해 사용하는 데이터입니다. DNS 리소스 레코드에는 다양한 종류가 있습니다. 일반적인 DNS 리소스 레코드 다음과 같습니다.

     - A 레코드(Host Record): 도메인 이름을 IPv4 주소로 매핑합니다.

     - AAAA 레코드(IPv6 DNS Record): 도메인 이름을 IPv6 주소로 매핑합니다.

     - CNAME 레코드(Alias Record): 도메인 이름을 다른 도메인 이름으로 전달합니다.

     -  MX 레코드(Mail Exchange Record): 도메인의 메일 서버를 지정합니다.

     -  TXT 레코드: 도메인에 임의의 텍스트 정보를 저장합니다.

     -  NS 레코드(Name Servers Record): 도메인의 권한 있는 이름 서버를 지정합니다.

     -  SOA 레코드(Start of Authority): 도메인의 기본 정보를 저장합니다.

     -  SRV 레코드(Service Resources Redcord): 도메인에서 제공하는 특정 서비스의 위치를 지정합니다.

     -  PTR 레코드: IP 주소를 도메인 이름으로 매핑합니다.

Designed by Tistory.