Computer Science/Network

[Network] DNS(Domain Name System) 이해하기

HJChung 2021. 1. 16. 22:25

IP에 대한 것은 (아직 부족하지만) [Network]Router, IP, NAT, Port에 정리해 둔 적이 있다.

즉 IP는 두 대의 컴퓨터 각자의 '주소'를 통해 서로를 찾고 인터넷을 통해 '통신'을 하며 정보를 주고 받는다고 하자. 이때 '주소'에 해당하는게IP address.

그리고 host는 인터넷에 연결된 각각의 기기를 말한다.

 

그런데 어떤 컴퓨터에 통신을 위해 요청을 보낸다고 하자. 이때 IP가 뭔지 기억하기란? 굉장히 번거롭다. 93.184.216.34 이런걸 다 외운다고? 그럴 순 없지

 

그래서 필요한 것이 DNS(Domain Name System)이다. DNS는 우리가 흔히 보는 도메인 이름(예를 들어 www.google.com과 같은)을 IP주소로 변환하는 역할을 한다.

DNS의 원리

첫번째 프로젝트였던 SAFU 웹사이트를 제공하는 서버의 IP는 93.184.216.34이다. 하지만 나는 유저가 IP가 아닌 www.safu.com 이라는 도메인으로 접속이 가능하도록 만들고 싶다.

어떻게 하면 될까? safu.com이라는 주소가 93.184.216.34을 가리키도록 해야한다.

Domain Name System Server에 safu.com 은 93.184.216.34 이다 라고 기록하도록 요청을 보내야 하는 것이다.

=> 그러면 DNS Server는 safu.com 은 93.184.216.34라고 기억한다.

   => 그러면 유저(User with Web Browser)가 safu.com로 접속하려하면

       => 유저의 컴퓨터는 먼저 hosts 파일에서 safu.com이 어떤 IP인지 찾아본다. 없으면, DNS Server에 접속해 safu.com의 IP가 뭔지 요청하고

            => DNS Server는 93.184.216.34을 응답하고

                => 유저는 93.184.216.34로 접속할 수 있다. 

그런데 유저는 DNS Server 의 IP를 어떻게 알고 safu.com의 IP가 뭔지 물어볼 수 있는 것일까?

유저는 인터넷을 Internet Service Porovide(ISP)라고 하는 통신사(예를 들어 KT, SK...)를 통해 사용하고 있고, 이 통신사가 DNS Server의 IP를 자동으로 세팅해준다.

도메인 이름의 구성과 체계

DNS가 어떻게 동작하는지 알려면 도메인 이름의 구성과 체계에 대해서 알아야 한다.

인터넷 도메인의 시작점이 되는 root와 그 바로 아래 단계는 최상위( top level; 1단계) 도메인이라고 한다. 최상위 도메인은 국가명을 나타내는 국가 최상위 도메인과 일반적으로 사용되는 일반 최상위 도메인으로 구분된다.

나만의 도메인을 마련할 경우 최상위 도메인 중에 하나를 선택하고, 원하는 도메인명을 지정하여 등록하면 된다. (도메인 등록에 대한 내용은 뒤에 정리해 두었다. )

도메인 이름은 단계마다 각각의 부분을 담당하는 NameServer들이 있다. 그리고 상위 level을 담당하는 NameServer들은 직속 하위 level을 담당하는 Server들의 IP 목록을 가지고 있어야 한다.

이렇게 바로 직속 하위 NameServer의 정보만 알고 있기 때문에 root에서 부터 계층적으로 sub까지 알아가야 하므로 Root NameServer의 IP는 기본으로 알고 있어야 한다.

도메인 이름 등록과 사용 원리

첫번째 프로젝트였던 SAFU 웹사이트를 제공하는 서버의 IP는 93.184.216.34이다. 하지만 나는 유저가 IP가 아닌www.safu.com 이라는 도메인으로 접속이 가능하도록 만들고 싶다. 93.184.216.34의 도메인 명이 safu.com이라고 등록은 어떻게 하면 될까?

- Registrant(등록자): 93.184.216.34은 safu.com이야 라고 등록하려는 서버

- ICANN(비영리 단체): 전세계의 IP 주소를 관리하고 root name server들에 대한 관리자.

- Registry(등록소): .com, .net, .kr 와 같은 최상위 도메인을 관리하는 곳

- Registrar(등록대행자): 해당하는 도메인명 등록을 Registrant 대신 대행해주는 업체나 기관

 

과정이 조금 복잡해서, 아래 그림에 순서를 부여해서 적어두었다.

그럼 이렇게 등록된 도메인을 사용하려면 어떻게 해야할까?

이는 중간에 계층간 Nameserver에 물어보는 몇 과정이 추가 되었을 뿐이지 위에서 <DNS의 원리>에서 살펴본 바와 같다.

유저는 인터넷을 Internet Service Porovide(ISP)라고 하는통신사(예를 들어 KT, SK...)를 통해 사용하고 있고, 이 통신사가 DNS Server의 IP를 자동으로 세팅해준다.

그리고 이런 전세계의 DNS Server는 root name server의 주소가 무엇인지를 알고있다.

 

그 다음은 아래의 순서와 같다.

그런데 도메인에 해당하는 IP를 매번이렇게 물어물어서 알아내는 것은 매우 비효율적이다.

그래서 DNS Server는 다음에 누군가 safu.com을 탐색할 때 좀 더 빠르게 응답할 수 있도록 사용자가 지정하는 일정 기간 동안 safu.com의 IP주소를 캐싱한다.

AWS의 DNS 서비스 - Route53

Route53은 AWS에서 제공하는 클라우드 기반의 DNS 서비스로,

1. 등록 대행자

2. NameServer을 임대해주는 것이 핵심 기능이다.

Route53을 사용해 본 것은 [Route 53] Route53의 도메인과 DNS 연결에 정리해 두었다.

Route53을 사용한 DNS등록 및 사용 과정을 다시 도식화 하면 아래와 같다.

DNS record와 CNAME

DNS record란 DNS서버에 저장하는 도메인 이름에 대한 정보 한 건을 말한다.

CNAME이란 일종의 별명을 지어주는 것으로 도메인에 대한 또다른 도메인을 지정하는 것이다. 예를 들어,safu.com의별명으로www.safu.com을지어준다. 아래 그림을 보면

- 도메인이 등록 되었을 때, example.com.으로 접근했을 때 A record에 의해서 192.0.1.1이 열린다.

- www.example.com.으로 접근 했을 때는 CNAME record에 의해서 example.com.으로 연결되고, A record에 의해서 192.0.1.1이 열린다.

이런 식이 된다!

관련 포스트

[Route 53] Route53의 도메인과 DNS 연결

[ACM] 도메인 주소 생성 및 AWS Certification

reference

생활코딩 WEB2 - Domain Name System

아마존 웹 서비스 6장. DNS를 손쉽게 연결하고 관리하기