
이미지 출처:https://journeyofthegeek.com/2019/11/14/dns-in-microsoft-azure-part-1/
DNS(Domain Name System)는 인터넷에서 도메인 이름을 IP 주소로 변환해주는 시스템임. 인터넷 상에서 통신이 이루어지려면 IP 주소(예: 192.168.0.1)가 필요하지만, 사용자가 직접 IP 주소를 기억하고 입력하는 것은 비효율적이기 때문에 DNS가 도메인 이름(예: www.google.com)을 IP 주소로 변환해줌. DNS는 인터넷의 "전화번호부" 역할을 한다고 볼 수 있음.
도메인 이름: 사용자가 웹사이트에 접속할 때 입력하는 주소임. 예를 들어, www.google.com과 같은 형식의 주소가 도메인 이름임.
IP 주소: 네트워크 상에서 장치를 식별하는 고유한 번호임. 웹 서버나 다른 네트워크 장치들이 서로 통신하기 위해 IP 주소를 사용함
DNS의 역할은 사람이 이해하기 쉬운 도메인 이름을 컴퓨터가 이해할 수 있는 IP 주소로 변환해주는 것임. 이 과정을 통해 사용자는 도메인 이름만 기억하면 웹사이트에 접속할 수 있음.
DNS는 계층적 구조로 이루어져 있으며, 크게 4개의 주요 계층으로 나뉨:
루트 DNS 서버: 인터넷의 최상위 DNS 서버임. 전 세계에 여러 개의 루트 서버가 분산되어 있음.
TLD(Top Level Domain) 서버: .com, .net, .org와 같은 최상위 도메인을 관리하는 서버임.
권한 있는 DNS 서버: 특정 도메인 이름을 관리하는 서버로, 최종적으로 해당 도메인에 대한 IP 주소를 반환함.
로컬 DNS 서버: ISP나 회사에서 제공하는 DNS 서버로, 사용자가 자주 방문하는 사이트의 정보를 캐싱하여 빠르게 응답할 수 있음.
DNS가 작동하는 과정은 도메인 이름을 입력했을 때 일어나는 여러 단계를 포함함. 아래는 DNS의 작동 원리 단계별 설명임:
사용자가 브라우저 주소창에 www.google.com을 입력하면, 브라우저는 해당 도메인 이름을 해석하기 위해 로컬 DNS 서버에 질의함.
로컬 DNS 서버(일반적으로 사용자가 속한 네트워크의 ISP 또는 회사에서 제공하는 서버)는 우선 해당 도메인 이름에 대한 IP 주소를 캐시에서 찾음. 만약 캐시에 존재한다면 즉시 IP 주소를 반환하여, 시간을 절약함.
로컬 DNS 서버에 캐시가 없다면, 로컬 DNS 서버는 루트 DNS 서버로 질의를 보냄. 루트 서버는 도메인의 TLD(Top Level Domain, 최상위 도메인) 정보를 반환함. 예를 들어, www.example.com에 대해 루트 서버는 .com을 관리하는 TLD 서버의 정보를 반환함.
로컬 DNS 서버는 TLD 서버에 질의를 보내고, TLD 서버는 google.com에 대한 권한 있는 DNS 서버의 주소를 반환함.
로컬 DNS 서버는 권한 있는 DNS 서버에 www.google.com의 IP 주소를 요청함. 이 서버는 해당 도메인 이름에 대한 정확한 IP 주소를 알고 있으며, 이를 로컬 DNS 서버에 반환함.
로컬 DNS 서버는 얻은 IP 주소를 사용자의 브라우저에 전달하고, 동시에 해당 정보를 캐시에 저장하여 다음 번에 같은 도메인에 접속할 때 더 빠르게 응답할 수 있게 함.
브라우저는 로컬 DNS 서버로부터 받은 IP 주소를 사용하여 해당 웹 서버에 HTTP 또는 HTTPS 요청을 보냄. 이후 웹 서버는 요청된 웹 페이지를 반환함.
DNS는 속도를 높이기 위해 캐싱 메커니즘을 사용함. 즉, 한 번 조회된 DNS 정보는 일정 기간 동안 저장되어, 다시 같은 도메인 이름을 요청할 때 재사용됨. 이 캐시 정보는 클라이언트 컴퓨터, 로컬 DNS 서버, 브라우저 등에 저장될 수 있음. 캐싱은 네트워크 트래픽을 줄이고, 웹 페이지 로드 속도를 높여줌.
캐시의 저장 기간은 TTL(Time To Live) 값에 의해 결정됨. 이 값은 DNS 응답에 포함되며, TTL이 지나면 해당 캐시는 만료됨.
DNS는 다음과 같은 주요 구성 요소로 이루어짐:
도메인 이름: 사용자가 접속할 웹사이트 주소. 계층적 구조를 가짐. 예를 들어, www.google.com에서 www는 서브도메인, example은 도메인, .com은 최상위 도메임(TLD).
DNS 레코드: 도메인과 관련된 정보를 담고 있는 레코드. 다양한 유형이 있으며, 각기 다른 역할을 함.
A 레코드: 도메인 이름을 IPv4 주소로 매핑함.
AAAA 레코드: 도메인 이름을 IPv6 주소로 매핑함.
MX 레코드: 메일 서버 주소를 정의함.
CNAME 레코드: 도메인 이름의 별칭을 정의함.
TXT 레코드: 도메인과 관련된 텍스트 정보를 저장함.
사용 편의성: 사용자는 IP 주소 대신 기억하기 쉬운 도메인 이름을 사용할 수 있음.
확장성: DNS는 계층적 구조 덕분에 전 세계적으로 확장 가능함.
신뢰성: 여러 DNS 서버에 정보가 분산되어 있어, 한 서버가 중단되더라도 다른 서버에서 정보를 얻을 수 있음.
보안 문제: DNS 스푸핑(DNS Spoofing)이나 DNS 캐시 포이즈닝(Caching Poisoning) 같은 공격을 통해 잘못된 IP 주소를 반환할 수 있음.
성능 저하: 다수의 DNS 조회가 필요한 경우, 네트워크 성능이 떨어질 수 있음. 이를 개선하기 위해 캐싱과 같은 기술을 사용함.
DNS는 도메인 이름을 IP 주소로 변환해주는 필수적인 시스템으로, 사용자가 쉽게 인터넷을 탐색할 수 있도록 도와줌. DNS의 계층적 구조와 캐싱 메커니즘 덕분에 성능과 확장성이 보장되며, 인터넷의 중요한 인프라로서 기능함.