로고

DNS (Domain Name System) DeepDive - Name Resolution

develop / Jul 6, 2025

DNS (Domain Name System) DeepDive - Name Resolution

develop /
... views
Without AI

이용자의 요구에 따라 도메인 이름에 대응하는 IP주소를 찾아내는 것을 Name Resolution(이름풀이) 라고 합니다. 이번 포스팅에서는 DNS에 의한 이름 풀이의 기본적인 동작을 확인할 예정입니다.

질의와 응답

Name Resolution의 기본은 질의응답입니다. 이 질의와 응답에는 세 가지 약속이 있습니다.

  1. 질의와 응답은 항상 1대1로 대응한다.
    • 질의에 대응하지 않는 응답이 오거나, 한 개의 질의에 두 개의 응답이 오는 일은 없습니다.
  2. 정보를 알고 싶은 사람은 알고 싶은 정보의 도메인 이름과 타입을 지정해서 질의한다.
    • jinmu.me의 IP 주소와 같이 이름과 종류를 함께 지정해야 합니다.
  3. 정보를 제공하는 사람은 받은 질의에 대해 자신이 알고 있는 정보를 응답한다.

계층 구조를 따르는 Name Resolution

이전 포스팅에서 설명드렸던 것과 같이 DNS에서는 계층화와 위임에 의해 루트를 정점으로 갖는 계층 구조가 만들어집니다. DNS에 의한 이름 풀이의 기본은 정점인 루트의 네임 서버에서부터 계층의 순서를 따라가, 알고 싶은 정보를 질의하여 필요한 정보를 입수하고 최종 목적인 IP주소를 얻는 것입니다. DNS에서는 이런 행위를 iterative resolution(반복에 의한 풀이) 라고 합니다. 앞으로 이런 동작(iterative resolution)을 계층 구조를 따라간다고 표현하겠습니다.

image-142.webp

정보를 알고싶은 사람이 DNS의 계층 구조를 따라 Name Resolution을 하기 위해선 적절한 질의처를 알아야 합니다. 그래서 DNS에서는 자식의 네임 서버 정보를 부모에게 등록하고, 위임한 도메인 이름에 대한 질의를 받은 부모는 다음 질의처로 자식의 네임 서버 정보를 응답하는 구조를 채택했습니다. 이 구조 덕분에 질의자는 위임에 의한 계층 구조를 따라갈 수 있게 됩니다.

image-1232.webp

사전 준비(그림 왼쪽)

  1. 루트me사이엔 위임에 의한 부모-자식 관계가 성립되어 있다. 루트가 부모, me가 자식이 된다.
  2. me부모인 루트에게 자신의 네임 서버 정보를 등록한다. 루트me이 등록한 네임 서버 정보를 자신의 네임 서버에 등록 및 설정한다.

실제 이름 풀이 (그림 오른쪽)

  1. 위임에 의한 부모-자식 관계가 성립된 상태에서 A가 루트에게 ‘jinmu.me의 IP주소를 알려주세요’라고 질의한다.
  2. 루트는 me에 대해서는 위임처의 네임 서버 정보만 알고 있기에 me의 네임 서버 정보(b.dns.me)를 응답한다.
  3. A는 루트로부터 받은 me의 네임 서버 정보를 사용해 b.dns.me에게 질의한다.

이렇게 DNS의 계층 구조를 루트에서부터 순서대로 따라가는 것이 이름 풀이 구조의 기본입니다.

이름 풀이의 작동

위에서 살펴보았던 계층 구조에 따른 이름 풀이를 조금 더 자세히 살펴 보겠습니다.

dns-deepdive-3-1751809205331.webp

  1. 질의

    • User는 계층 구조의 정점인 루트의 네임 서버로 알고 싶은 정보의 이름과 종류를 지정해서 질의를 보냅니다.
  2. 응답

    • 루트는 me를 위임하고 있기 때문에 me의 네임 서버 정보(이 예시에서는 b.dns.me)를 응답합니다.
  3. 질의

    • 루트로부터 받은 응답에서 아래 두 가지를 알 수 있습니다.
      • 루트는 me을 위임하고 있다.
      • 위임처의 네임 서버는 b.dns.me이다.
    • 이 정보를 이용해 me의 네임 서버로 1번의 질의를 보냅니다.
  4. 응답

    • mejinmu.me을 위임하고 있기 때문에 위임처인 jinmu.me의 네임 서버 정보(이 예시 에서는 ns1.jinmu.me)를 응답합니다.
  5. 질의

    • me로부터 받은 응답에서 아래 두 가지를 알 수 있습니다.
      • mejinmu.me을 위임하고 있다.
      • 위임처의 네임 서버는 ns1.jinmu.me이다.
    • 이 정보를 이용해 jinmu.me의 네임 서버로 1번과 똑같은 질의를 보냅니다.
  6. 응답

    • jinmu.me의 네임 서버는 jinmu.me의 IP주소를 알고 있기 때문에 IP 주소를 응답합니다. 이것으로 User는 jinmu.me의 IP 주소(76.76.21.21)를 얻을 수 있으며 이름 풀이가 종료됩니다.

이름 풀이의 부하와 시간의 경감

이처럼 루트에서부터 DNS의 계층 구조를 따라가 이름 풀이를 하는 것은 확실하지만, 많은 요청과 응답 그리고 시간이 듭니다. 그래서 이름 풀이를 담당하는 별도의 서버를 두고 다른 호스트로부터 의뢰를 접수해 이름 풀이를 대행하는 방법이 고안되었습니다.

예시에서 User대신에 이름 풀이를 해주는 대행자를 X라 하겠습니다. 이때 User는 X에게 ‘나 대신 이름 풀이를 해주고 jinmu.me의 IP주소를 알려주세요’라는 질의를 보내며, 위에서 설명한 이름 풀이는 X가 대행하게 됩니다.

dns-deepdive-3-1751810301365.webp

X는 A가 부탁한 이름 풀이를 하여 jinmu.me의 IP주소 76.76.21.21를 User에게 응답합니다.

그리고 X는 이름 풀이를 할 때 질의처인 네임 서버로부터 얻은 정보를 일정 시간 저장합니다. 만약 시간 내에 A가 같은 질의를 X에게 했을 때, X는 이미 그 결과를 가지고 있기 때문에 새로운 이름 풀이는 하지 않고 가지고 있는 결과를 User에게 응답합니다.

dns-deepdive-3-1751810710080.webp

이렇게 되면 네임 서버에 질의하는 횟수를 줄일 수 있어 이름 풀이에 걸리는 부하와 시간을 경감할 수 있습니다.

지금 까지의 정보를 통해 우리는 DNS이름 풀이를 할 때의 역할에는 세 종류가 있음을 알 수 있습니다.

  1. 정보가 필요한 사람(User A, User B, User C)
  2. 정보가 필요한 사람으로부터 의뢰를 받아 이름 풀이를 하는 사람(X)
  3. 정보를 제공하는 사람(DNS의 계층 구조를 만드는 네임 서버들)

Outro

이번 글에서는 도메인 이름에 해당하는 IP 주소를 찾아가는 과정인 ‘이름 풀이(Name Resolution)’ 에 대해 살펴보았습니다. 루트 네임 서버에서 시작해 계층 구조를 순서대로 따라가는 반복적인 질의(iterative resolution) 가 기본 원리라는 것과, 이 과정의 질의⋅응답 부하와 시간을 줄이기 위해 캐시 기능을 갖춘 이름 풀이 대행자가 등장했습니다. 이를 통해 DNS 생태계가 정보를 요청하는 ‘사용자’, 대신해서 이름 풀이를 실행하는 ‘캐시 리졸버’, 그리고 정보를 제공하는 ‘권한 네임 서버’라는 세 가지 역할로 구성된다는 점을 확인 할 수 있었습니다.

지금까지 DNS가 ‘어떻게’ 동작하는지에 대한 큰 그림을 그려보았습니다. 다음 포스팅에서는 한 걸음 더 나아가, 이 과정을 실제로 가능하게 하는 DNS의 구체적인 구성 요소들은 무엇이며, 각 요소가 어떤 정보를 주고받으며 작동하는지에 대해 더 자세히 알아보겠습니다.

감사합니다.

...