이 글은 공부하고 배운 내용을 정리하는 공간입니다! 틀린 내용이 있다면 댓글로 이야기해주시면 감사드리겠습니다 :)
1. DNS란? 필요한 이유는?
DNS란 Domain Name System의 약자이며, 사용자가 웹 사이트 이용 시 IP 주소 대신 Domain 이름을 사용하여 접속할 수 있도록 도와주는 시스템을 이야기한다.
웹 브라우저는 IP(Internet Protocol;인터넷 프로토콜) 주소를 통해 상호작용하기 때문에, 특정 웹 페이지에 접근하기 위해서는 IP주소를 알아야 한다.
마치 누군가에게 전화를 하기 위해서는 전화번호를 알아야하는 것처럼 말이다.
여기서 걱정이 하나 들기 시작한다. IPv4는 192.168.1.1, IPv6는 2400:cb00:2048:1::c629:d7a2와 같은 형태를 띄고 있는데, 우리가 접속하려는 모든 웹 사이트의 복잡한 IP 주소를 외우고 있을 수 있을까?
음... 쉽지 않을 것이다.
DNS를 사용하면, www.naver.com과 같이 별칭을 만들어 전화번호부에 전화번호(IP)와 별칭(Domain name)을 매핑해놓으면,
도메인 이름을 통해 접속했을 때 DNS가 도메인 이름을 IP로 변환해주기 때문에, 복잡한 IP 주소를 외우지 않아도 원하는 서비스를 이용할 수 있다.
2. URL? Domain name?
그럼 우리가 주소창에 입력하는 URL과 Domain name은 어떤 차이가 있는 것일까?
URL은 https와 같은 protocol, /main과 같은 디렉토리가 모두 포함되어 있는 문자열이며,
Domain name은 gitget.com과 같은 문자열을 이야기한다.
여기에서 주목해볼만한 점은, Domain name gitget.com에서 제일 뒤에 Root가 생략되어 있다는 점이다.
만일 생략하지 않으면 Domain은 gitget.com.일 것이다.
3. DNS Server는 계층 구조로 이루어져 있다.
주소창에 www.naver.com과 같이 도메인을 입력했을 때, DNS Server로부터 도메인에 해당하는 IP 주소를 반환받는다.
그럼 이 DNS Server의 구조는 어떻게 되어 있을까?
만일 단일 서버라면 해당 서버에 장애가 발생했을 때, Domain과 IP를 매핑시키지 못하므로 Domain을 통합 모든 웹 사이트 접속이 막힐 것이다.
이를 방지하기 위해 DNS Server는 여러 개로 분산되어 있으며, 또한 계층적인 구조를 이루고 있다.
1. Root Name Server
Local DNS Server에서 DNS 쿼리 요청을 처음으로 보내는 서버이다.
해당 도메인의 확장자 (.com, .net, .org 등)에 따른 TLD NS의 주소를 응답한다.
2. TLD(Top-Level Domain) Name Server
최상위 도메인(.com, .net, .org 등)에 대한 DNS 정보를 관리한다.
3. Authoritative Name Server
도메인의 IP 주소를 응답해주는 최종 단계의 DNS 서버이다. 여기에서 얻은 IP 주소는 Local DNS Server를 거쳐 브라우저에 전달된다.
4. DNS Resolver, DNS Recursive server, Local DNS server
Local DNS Server라고 자주 부르지만, DNS Resolver, DNS Recursive server 등 다양한 이름으로 불린다.
요청받은 도메인에 매치되는 IP 주소를 찾기 위해 DNS 쿼리를 수행하는 개체이다.
DNS 쿼리의 첫 단계에 해당하며, DNS 캐시를 저장하는 곳이기도 하다.
4. DNS 작동 원리
1. 주소창에 www.naver.com 입력
2. 각종 캐시(브라우저, OS, 라우터)를 확인하며 DNS 기록이 저장되어 있는지 확인한다.
2-1. 만일 캐시에 기록이 존재한다면 IP 주소를 얻을 수 있으므로, 해당 IP 주소를 바로 반환한다.
3. 각종 캐시에 DNS 기록이 존재하지 않으면, ISP가 제공하는 Local DNS server에게 IP 주소를 요청한다.
ISP(Internet Service Provider)는 KT, SKT, LG U+와 같은 통신사를 이야기하며, 각자의 DNS Server를 가지고 있다.
이를 Local DNS Server / DNS Recursive Server / DNS Resolver라고 부른다.
4. 해당 Local DNS Server의 캐시를 확인하며 DNS 기록이 존재하는지 확인한다.
4-1. 만일 캐시에 기록이 존재한다면 IP 주소를 얻은 후, 바로 반환한다.
5 & 6. DNS 정보를 얻기 위해 Root Name Server에게 도메인의 IP 주소를 요청한다.
DNS Server들을 돌면서 IP 주소를 탐색할 때에는 상위 도메인에서부터 하위 도메인으로 하나씩 내려가며 탐색을 진행한다.
Root Name Server는 .com에 해당하는 TLD Name Server의 주소를 반환한다.
Root Name Server에게 먼저 요청하는 이유는 위에서 설명했다시피 DNS Server는 계층적 구조를 이루고 있는데,
모든 Computer들은 Root Name Server의 주소를 알고 있으며, Root Name Server를 통해 하위 도메인의 주소를 알 수 있기 때문이다.
7 & 8. .com 도메인을 담당하는 TLD Name Server에게 도메인의 IP 주소를 요청한다.
TLD Name Server는 naver.com를 담당하는 Authoritative Name Server의 주소를 반환한다.
9 & 10. Authoritative Name Server는 Domain의 IP 주소를 반환해주는 최종 단계의 DNS Server이다.
www.naver.com에 해당하는 IP 주소를 찾아 반환한다.
이는 Local DNS Server를 거쳐서 브라우저에게 전달되고, 브라우저는 해당 IP를 통해 웹 사이트에 접속한다.
5. A Record & CNAME 이란?
Gabia에서 도메인을 구매하거나, AWS Route 53을 통해 설정을 진행할 때에 A Record와 CNAME이라는 값을 많이 보게된다.
이 값들은 무엇을 의미하는 것일까?
1️⃣ A Record
도메인을 서버의 IP로 직접 연결하는 방식을 이야기한다.
이 방식은 IP로의 직통 연결이기 때문에 접속이 빠르다는 장점이 있다.
위의 이미지를 보면 도메인에 mo-rak.com으로 써져 있고, 값/위치에 IP가 작성되어 있는데, 이 말은 곧 mo-rak.com으로 접속하면 해당 IP로 바로 매핑이 된다는 뜻이다.
2️⃣ CNAME
CNAME 방식은 도메인 이름에 대해 별칭을 추가로 매핑해주는 방식을 이야기한다.
A Record 방식을 이용하면 될 것 같은데, 왜 굳이 CNAME이라는 방식을 사용하는 것일까?
IP가 유동적으로 변하는 서버이고 서브 도메인들이 여러 개 있는 경우, 서브 도메인을 CNAME을 통해 매핑을 해주면 도메인의 값이 변경되는 경우에도 유연하게 대처할 수 있다는 장점이 있다.
위의 이미지를 보면 이해가 더 잘될 것이다.
왼쪽에는 mo-rak.com과 www.mo-rak.com을 모두 A Record 형식으로 지정해놓았다. 이 경우에는 서버의 IP가 변경된 경우, 해당 값을 모두 일일이 바꿔줘야 한다.
반면 오른쪽의 경우에는 www.mo-rak.com을 mo-rak.com으로 연결되게끔 지정해놓았다. 이 덕분에 서버의 IP가 변경되어도 mo-rak.com에 해당하는 A Record의 값만 변경하면 되므로 변경에 유연하다는 장점이 있다.
5. 그 외의 궁금점 (작성 중)
1️⃣ Host name(호스트 네임)과 Domain name(도메인 네임)의 차이점은 무엇일까?
2️⃣ ISP가 제공하는 DNS Server를 부르는 이름이 매우 다양하다.
기본적으로 Local DNS Server에서부터 시작하여, DNS Resolver, DNS Recursive server라고 불리는데 왜 이렇게 이름이 다양할까?
3️⃣ DNS Query Request는 무엇일까?
참고 자료
DNS란? 꼭 알아야 하는 도메인 네임 시스템의 정의와 작동 방식 | NordVPN
DNS가 뭔가요? + 도메인, A Record, CName