[네트워크] DNS의 개요와 구조, 동작원리

2025. 11. 11. 19:49·CS/네트워크

1. DNS 개요

1) DNS 란?

인터넷 호스트를 식별하는 방법에는 두가지가있습니다. 하나는 www.google.com  같은 호스트 이름(host name)이고, 다른 하나는 IP주소(IP adress) 입니다.

IP주소는 121.7.106.83 과 같이 0~255범위의 십진수 네 개로 구성되며, 4바이트로 이루어지는 계층구조를 갖습니다. 

IP주소는 왼쪽에서 오른쪽으로 조사함으로써, 그 호스트가 인터넷의 어디에 위치하는지 정보를 알 수 있습니다.


사람은 www.google.com 처럼 기억하기 쉬운 호스트 이름을 좋아하겠지만, 라우터는 고정 길이, 숫자 기반, 계층 구조인 IP주소를 효율적으로 처리할 수 있습니다.

이를위해 DNS는 호스트 이름을 IP 주소로 변환해주는 디렉터리 서비스 역할을 합니다.

DNS(Domain Name System): 호스트 이름을 IP 주소로 변환해주는 디렉터리 서비스


DNS는 단순한 변환 시스템이 아니라,

  • 계층적으로 구성된 여러 DNS 서버들의 분산 데이터베이스이며,
  • 호스트가 질의(query) 를 통해 이 데이터베이스에 접근하도록 하는 애플리케이션 계층 프로토콜입니다.

속도가 중요한 DNS는 UDP 기반(포트 번호 53) 으로 동작합니다.



2) DNS가 제공하는 서비스

DNS는 호스트 이름을 IP 주소로 변환하는 것 외에 다음과 같은 중요한 추가 서비스를 제공합니다.

  • 호스트 에일리어싱(host aliasing)
    • 한 도메인 이름을 다른 도메인의 별칭(alias) 로 지정하는 것
    • 서브 도메인과 비슷하지만 다른 개념
      • 서브 도메인: 하나의 도메인을 여러개로 나눈 구조
      • 에일리어싱: 기존 도메인 이름에 새로운 "별명"을 붙이는 것
  • 메일 서버 에일리어싱(mail server aliasing)
    • 호스트 에일리어싱과 유사하지만, 이메일 주소에 사용되는 메일 서버 이름을 매핑하는 기능
  • 부하 분산(load distribution)
    • 하나의 도메인에 여러 개의 IP주소를 등록하여 트래픽을 분산하는 기능
    • 간단히는 라운들 로빈(Round Robin) 방식으로 번갈아 IP를 반환하는 방식으로 구현 가능
    • 실제 서비스에서는 주로 로드밸런서(Nginx 등)와 함께 사용되며 지역, 서버 상태, 트래픽 량에 따라 지능적으로 분산



2. DNS의 구조

1) DNS 서버 종류, 분산 계층 데이터베이스

DNS 서버 계층 구조의 일부

 

DNS는 많은 서버들이 계층적으로 연결된 구조로 이루어져 있으며, 이 서버들은 전 세계에 분산(Distributed) 되어 있습니다.

즉, 하나의 중앙 서버가 모든 정보를 갖고 있는 것이 아니라, 각 서버가 일부 정보만을 담당하고 서로 협력하여 동작합니다.

  • 루트 DNS 서버
    • DNS 계층의 최상위 서버
    • 직접 IP를 알려주지 않고, 어떤 TLD서버(.com, .net, .kr 등) 으로 가야하는지 알려줌
  •  레벨 도메인(TLD) 서버
    • .com, .net. org 같은 최상위 도메인(Top Level Domain)을 관리
    • 책임 네임서버(NS Record)를 알고 있으며, 책임 DNS 서버 주소를 반환
  • 책임 DNS 서버
    • 실제 도메인 이름과 IP주소의 정확한 매핑 정보(A Record)를 보유한 서버
    • AWS Route53, Cloudflare 등과 같은 서비스가 역할을 수행
  • 로컬 DNS 서버
    • 사용자의 컴퓨터가 가장 먼저 접근하는 DNS 서버
    • 인터넷 제공자(ISP)나 퍼블릭 DNS가 역할을 수행



3. DNS의 동작 원리

1) DNS 동작 과정

사용자가 www.example.com  같은 호스트 이름을 입력했을 때,  실제 IP주소로 변환하기 위해 어떤 단계를 거치는지 확인해보겠습니다.

(1) 브라우저 / OS 캐시 확인

  • 브라우저나 운영체제가 먼저 DNS 캐시(Local Cache)를 확인
  • 이미 방문한 적이 있는 사이트라면, 이 단계에서 바로 IP를 얻음

(2) 로컬 DNS 서버 질의

  • 브라우저/OS에서 캐시가 없으면 로컬 DNS 서버로 질의 전송
  • 로컬 DNS에 캐싱 되어있으면, 바로 IP를 얻음

(3) 루트 DNS 서버 질의

  • TLD 서버의 주소 반환
  • example.com 같은 경우 .com TLD 서버로 가라고 안내

(4) TLD DNS 서버 질의

  • TLD DNS는 각 도메인을 관리하는 책임 네임 서버(NS Record) 정보를 갖고 있음
  • 책임 네임 서버로 안내

(5) 책임 DNS 서버 질의

  • 책임 DNS 서버는 실제 IP(A Record)를 가지고 있음
  • www.example.com -> 203.0.113.25 식으로 응답 반환

(6) 응답 반환 및 캐시 저장

  • 로컬 DNS 서버가 응답받은 IP를 캐싱하고, 그 결과를 사용자의 OS와 브라우저로 전달
  • 동일 요청이 들어오면 캐싱된 값을 바로 반환



2) DNS 캐싱

위의 동작 개요를 보면 캐시(Cache)가 자주 등장하는 것을 볼 수 있습니다.

DNS는 각 단계에서 캐시를 이용하여 같은 질의에 대해 매번 전 과정을 반복하지 않습니다.

캐시를 활용하여 속도를 향상하고, 트래픽을 절감하며 안정성을 향상시킬 수 있습니다.

 

모든 DNS 응답에는 TTL 값이 포함되어 있습니다. 이 TTL은 이 결과를 몇 초 동안 신뢰할 수 있는가를 의미합니다.

TTL이 만료되면 캐시가 삭제되고, 새로 질의가 발생합니다.

TTL(Time To Live): DNS 및 CDN에서 데이터가 캐시되는 시간


이러한 과정을 거치면서 DNS는 좀 더 효율적으로 요청을 처리하게 됩니다.

[최초 요청]
브라우저 → OS → 로컬 DNS → 루트 → TLD → 책임 DNS
(응답 반환 및 캐시 저장)

[두 번째 요청]
브라우저 → OS → (캐시 HIT, 즉시 IP 반환)

 

'CS > 네트워크' 카테고리의 다른 글

[네트워크] HTTP/2의 등장 배경과 특징  (0) 2025.10.17
[네트워크] 웹캐시, 프록시 서버  (0) 2025.09.30
[네트워크] 사용자와 서버 간의 상호작용 쿠키  (2) 2025.09.18
[네트워크] HTTP 메시지 포맷  (0) 2025.09.02
[네트워크] HTTP 개요, 비지속 연결과 지속 연결  (2) 2025.08.28
'CS/네트워크' 카테고리의 다른 글
  • [네트워크] HTTP/2의 등장 배경과 특징
  • [네트워크] 웹캐시, 프록시 서버
  • [네트워크] 사용자와 서버 간의 상호작용 쿠키
  • [네트워크] HTTP 메시지 포맷
단군왕건영
단군왕건영
널리 세상을 이롭게 하고 싶은 개발자
  • 단군왕건영
    홍익인간 개발자
    단군왕건영
  • 전체
    오늘
    어제
    • 분류 전체보기 (81) N
      • TroubleShooting (14)
      • Backend (11) N
        • Java (2)
        • Spring (7) N
        • JPA (2)
      • DB (1)
      • Algorithm (7)
        • 백준 (4)
      • Frontend (0)
        • React (0)
      • Infra (3)
      • CS (37)
        • 컴퓨터구조 (25)
        • 네트워크 (12)
      • Git (3)
      • Mac (2)
      • 회고 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • GitHub
  • 공지사항

  • 인기 글

  • 태그

    백준
    컴퓨터구조
    네트워크
    java
    spring
    docker
    springboot
    Jenkins
    MariaDB
    컴퓨터 구조
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
단군왕건영
[네트워크] DNS의 개요와 구조, 동작원리
상단으로

티스토리툴바