DNS(Domain Name System)

Mandy·2023년 2월 5일
0
post-thumbnail

DNS(Domain Name System)란?

인터넷 주소창에 naver.com을 입력해서 네이버 화면으로 진입해본 경험이 있는가?


혹은 한글로 “네이버”를 입력해서 해당 브라우저의 검색엔진이 검색한 결과를 보고 네이버 화면으로 진입해본적이 있는가?

사람에 따라 다르지만, 나는 보통 naver.com 으로 입력하여 네이버 화면으로 진입하곤 한다.(브라우저의 주소창 자동 완성으로 인해 이미 naver에 자주 방문했다면 n만 쳐도 naver.com이 나오기 때문에 더욱 편리하다.)

또한, 후자의 방식은

  1. “네이버” 입력 후 검색

  2. 검색 결과를 확인하고 네이버 주소 클릭하여 진입

이라는 두개의 단계를 거쳐야 하기 때문에 번거로웠기 때문이다.



그런데 여기서 궁금증이 생긴다.

  1. 어째서 naver.com 만 입력했는데 www.naver.com으로 이동되는 것일까?
  2. naver.com을 어떻게 인식하고 네이버 화면으로 이동시키는 것일까?



    1번의 경우는 www를 도메인 주소에 포함시켜 검색한 경험이 있다면 생길 수 있는 의문이다.
  • 이 부분은 아래 도메인이란? 부분을 이해한 후 다시 확인해보는것을 권장한다.

이 경우는 naver.com이라는 도메인을 구매하여 사용하는 경우 www.naver.com은 naver.com의 하위(서브) 도메인이 되기 때문에 네이버에서 naver.com 입력 시 네이버 홈 화면으로 이동될 수 있도록 설정한 것이면서 naver.com의 하위(서브) 도메인인 www.naver.com 입력 시에도 네이버 홈 화면으로 이동되도록 설정한 것이라고 볼 수 있다.

즉, 네이버 혹은 DNS 제공 업체 측에서 www.naver.com으로 진입하든 naver.com으로 진입하든 네이버 홈 화면으로 들어올수 있도록 설정해둔 것이다.

이 때 www.naver.com 과 같은 표기를 **Fully Qualified Domain Name(FQDN) 정규화된 도메인 이름** 이라고 한다.

2번의 경우가 오늘 알아볼 DNS에 대한 것이다.

사람은 naver.com이 네이버 홈 화면을 의미한다는 것을 안다.

하지만, 서버 입장에서는 naver.com이 어디냐고 다짜고짜 물으면

“그게 뭡니까, 휴먼.”

하면서 우리가 원하는 결과를 보여주지 않을 것이다.

우선, 우리가 입력하는 naver.com와 같은 것을 “도메인 이름(도메인 네임)”이라고 부른다.

흔히들 “인터넷 주소”, “사이트 주소”, “사이트 url” 등으로 알고 있는 것이다.

원래라면 ip주소를 입력해서 접속해야 하지만

위와 같이 우리가 진입을 원하는 불특정 다수 사이트의 실제 ip 주소를 외운다는 것은 불가능에 가깝다.

그렇기 때문에 도메인 이름을 이용하여 사이트에 진입하는 것이다.

여기서 DNS(Domain Name System)에 의해 우리가 일반적으로 입력하는 도메인 이름이 ip주소로 변환되어 실제 사이트를 찾은 뒤 사이트로 진입할 수 있도록 하는 과정이 수행된다.

한마디로 DNS는 우리가 ip 주소를 외우는 일을 하지 않아도 우리가 입력한 사이트 주소에 해당하는 ip 주소를 찾은 뒤 우리에게 원하는 사이트로의 진입을 도와주는 체계이다.

본격적으로 DNS를 알아보기 전에 앞서 언급한 “도메인”과 “호스팅” 이라는 개념에 대해 알아보자.


도메인이란?

도메인 ⊂ URL


위의 사진은 URL이 도메인을 포함한 경로임을 보여주기 위해 URL에 해당되는 부분까지 표시하였는데, 헷갈리지 않도록 빨간색 사각형 안쪽 영역이 도메인이라는 사실만 알면 된다.

도메인이란, 도메인 이름(도메인 네임)을 포함하며 RootDomain과 Top-LevelDomain(TLD), Subdomain이 포함된 .으로 구분된 일련의 레이블이며 웹 사이트 또는 인터넷 리소스에 대한 고유 식별자라고 할 수 있다.

여기서 레이블이란 .으로 구분 지어지는 각각의 영역을 지칭한다.

여기서는 일단, 도메인과 도메인 이름(도메인 네임)이 동일한 것이 아니라는 사실을 기억해두자.

도메인 부분을 앞에서부터 차근차근 살펴보자!

Sub domain:

서브 도메인이란 초반에 언급한 부분 에 나오는 용어인데, 해당 부분에서 언급한 바와 같이 루트 도메인이 같고 루트 도메인을 기준으로 점 앞에 부분을 말한다.

서브 도메인을 활용하면 blog.naver.com 이나 cafe.naver.com 과 같이 루트 도메인에서 파생된 사이트의 섹션을 나누기도 유용하다.

서브 도메인을 사용하면 하나의 루트 도메인으로 여러개의 ip를 가리키게 할 수 있다는 장점이 있기 때문에 도메인 구입 비용 절감에도 효과적이다.

즉, 서브 도메인은 도메인 등록 기관에 등록되어 있는 하나의 루트 도메인을 목적에 따라 여러개로 분할하고 싶을 때 사용한다.


Root domain:

루트 도메인은 도메인 이름(도메인 네임)과 Top-LevelDomain(TLD)가 포함된 것으로 서브 도메인이 없는 도메인을 의미한다.


Top-Level Domain:

TLD는 도메인의 가장 마지막 레이블이며, 그 목적이나 종류 또는 등록자가 소속되어 있는 국가를 나타낸다.

TLD의 예시로는 “com”, “net”, “org”, “gov”, “edu”, “io”가 있다.

TLD 는 국가 최상위 도메인(ccTLD, country code Top Level Domain)와 일반 최상위 도메인(gTLD, genertic Top Level Domain)으로 나뉜다.

TLD를 유심히 살펴보면 방문할 사이트의 특성을 대략적으로 유추해볼 수 있는데, .kr로 끝날 경우에 대한민국에서 관리되는 기관의 사이트일 것이고, .com 으로 끝날 경우에는 commercial을 의미하므로 일반 상업 목적 사이트일 가능성이 크다.

TLD의 경우 국제 인터넷 주소 관리 기구인 ICANN에 의해 운영 주체에 따라 아래와 같이 구분된다.

그림 속 내용을 모두 기억할 필요는 없으나, 한번 쭉 읽어보면서 도메인 수가 늘어남에 따라 익숙한 .com 외에 .xyz와 같은 새로운 TLD들이 등장한다는 것을 알아두면 좋다.


호스팅이란?

서버의 전체 혹은 일부를 이용할 수 있도록 임대해주는 서비스이다.

우리가 어플리케이션을 개발하고 운영과 유지보수까지 한다고 가정해보자. 그럴때마다 우리는 클라이언트에 데이터를 보내줄 서버가 필요한데, 이 서버는 만들기만 한다고 잘 돌아가는게 아니기 때문에 24시간 내내 가동시키고 관리하며, 불시에 발생할 수 있는 외부의 위협이나 사고에 대비하는 노력을 기울여야만 한다.

(서버를 내가 관리한다는 것.jpg)

그렇기에 개인적으로 서버를 관리하는것이 아닌 전문 업체의 호스팅 서비스를 받는것이 일반적이다.

호스팅에서 대표적으로 3가지를 알아보고자 한다.

  1. 웹 호스팅

    웹 호스팅은 하나의 서버를 여럿이 함께 사용하는 형태의 호스팅이다. 넷플릭스 아이디 하나로 가족끼리 공유해서 보는 것과 같은 이치라고 볼 수 있다. 하나의 서버를 나눠쓰기에 비용적으로 유리하지만 하나를 나눠쓰다보니 하드웨어적으로는 제한적이다.

  2. 서버 호스팅

    서버 호스팅은 하나의 서버를 한 사용자가 사용하는 형태의 호스팅이다. 혼자서 하드웨어 공간을 활용할 수 있고 쾌적한 전송 환경, 운영 관리에 대한 이점도 있다. 그렇지만 비용이 높아서 큰 규모의 기업이 주로 사용한다.

  3. 클라우드 호스팅

    클라우드 호스팅은 서버 호스팅을 가상화 한 형태로 가상의 서버를 한 사용자가 사용하는 형태의 호스팅이다. 필요 시마다 서버 자원을 늘리거나 축소할 수 있는 장점이 있지만 문제가 발생할 때 연쇄적일 수 있다는 위험이 있다.


브라우저에서 사이트를 진입하기 위해 도메인을 입력하면,
  1. 브라우저가 DNS 서버에 도메인 정보를 보내면 우리의 도메인이 IP 주소로 변환된 후
  2. 브라우저는 알아낸 IP주소를 이용해서 사이트에 대한 HTML을 호스팅 서버에 요청하고
  3. 호스팅 서버가 HTML을 반환하면서 브라우저 렌더링이 시작된다.

위의 과정을 거쳐 우리 눈에 사이트 화면이 보이고 사이트로의 진입이 성공하게 되는 것이다.


DNS의 구성 요소

DNS의 구성요소는 다음과 같다.

  • 도메인 네임 공간(Domain Name Space)

도메인 네임을 중복되지 않게 생성하여 사용하도록 정의된 구성 체계이다.

도메인 네임을 ip주소나 기타 정보와 매핑하여 사용자가 ip주소 대신 도메인 네임을 사용해서 사이트에 진입할 수 있도록 하는 중요한 역할을 한다.

최상위에 루트 DNS 서버가 존재하고 그 하위로 연결된 모든 노드가 연속해서 이어진 계층 구조로 되어있다.


  • 리소스 레코드(Resource Record)

IP 주소 또는 메일 서버와 같은 특정 도메인에 대한 정보를 포함하는 DNS 데이터베이스의 정보 단위이며, 도메인 네임 공간의 도메인에 대한 정보를 저장하고 관리하는데 사용한다.

리소스 레코드는 레코드 유형, 레코드 이름, TTL (Time-To-Live)값과 데이터 등으로 구성된다.

www.example.com를 IPv4 주소 192.168.1.80와 A 레코드 유형으로 설정할 경우 www.example.com. IN A 192.168.1.80 라는 리소스 레코드가 형성된다.

레코드가 IP주소에 매핑할 호스트 이름(=도메인 이름) + 인터넷 클래스 레코드임을 알리는 IN + 레코드 유형 + IP주소 인것이다.

이 레코드는 DNS Name Server에 저장되며, 이를 이용하면 리졸버(Resolver)가 호스트 이름(=도메인 이름)을 IP주소로 변환하는데 사용할 수 있게 된다.

리소스 레코드의 유형으로는 A(Address)레코드, AAAA레코드(IPv6), MX(Mail Exchange) 레코드 등이 있는데 이와 관련한 자세한 내용은 참고한 자료 링크를 통해 확인해보기 바란다.


  • 네임서버(Name Server = DNS Server)

도메인 이름을 IP 주소로 변환하여 사용자가 IP 주소 대신 쉽게 기억할 수 있는 도메인 이름을 사용하여 인터넷의 웹 사이트 및 기타 리소스에 액세스할 수 있도록 한다.

네임 서버에는 다음과 같은 4개의 서버 유형이 포함된다. 아래의 서버들은 DNS의 동작 과정 부분에서 다시 한번 언급할테니 기본적인 개념만 가볍게 알고 넘어가자.

  1. Root DNS server

DNS 계층 구조의 기반을 형성하는 최상위 서버로 국제 인터넷 주소 관리 기구인 ICANN에서 직접 관리하는 최고 존엄의 서버이다.

ICAN이 아니라 ICANN(Internet Corporation for Assigned Names and Numbers)이다.

TLD DNS server의 IP 주소를 저장하고 안내하는 역할을 한다.

  1. Top-Level Domain (TLD) DNS server

도메인 등록 기관이 관리하는 서버로, Authoritative DNS 서버의 주소를 저장하고 안내하는 역할을 한다.

  1. Authoritative DNS server (Second-Level Domain(SLD) DNS server)

실제 개인 도메인과 IP 주소의 관계가 기록,저장, 변경되는 서버이다. 이러한 역할로 인해 Authoritative라는 이름이 된 것이다.

도메인 이름에 대한 최종 소스이며, 웹 사이트를 호스팅하는 웹 서버의 IP 주소를 포함하여 도메인에 대한 정보를 저장한다.

도메인의 IP 주소가 시간이 지남에 따라 변경되더라도 클라이언트가 도메인 이름에 대한 올바른 IP 주소를 받도록 한다.

  1. Recursive DNS server

DNS 서버는 도메인 네임 스페이스를 위한 권한 있는 DNS 서버와 권한이 없는 DNS 서버로 구분된다.

위 1,2,3은 권한 있는 DNS 서버이다.

네임 스페이스를 위한 권한 있는 DNS 서버는 IP 주소와 도메인 이름을 매핑한다.

네임 스페이스를 위한 권한 없는 DNS 서버는 질의를 통해 IP 주소를 알아내거나 캐시한다.

즉, Recursive DNS server는 클라이언트와 DNS 시스템의 나머지 부분 사이에서 중개자 역할을 하며 클라이언트로부터 쿼리를 수신하고 필요에 따라 다른 DNS 서버에 연결하여 해당 쿼리에 대한 답변을 찾는 역할을 한다.

  • 리졸버(Resolver)

(광고가 아니라 리졸버가 중개자 역할을 한다는 의미로 첨부한 짤)

리졸버는 웹 브라우저와 같은 DNS 클라이언트의 요청을 네임 서버로 전달하고 네임 서버로부터 정보(도메인 이름과 IP 주소)를 받아 클라이언트에게 제공하는 기능을 수행한다.

이 과정에서 리졸버는 하나의 네임 서버에게 DNS 요청을 전달하고 해당 서버에 정보가 없으면 다른 네임 서버에게 요청을 보내 정보를 받아온다.

이같은 방식으로 수많은 네임서버에 접근하여 사용자로부터 요청 받은 도메인의 IP 정보를 조회하는 기능을 수행하는 것이다.

한마디로 리졸버는 클라이언트과 네임서버 사이에서 중개자 역할을 한다.


DNS의 동작 과정

DNS를 이해하는데 필요한 개념들과 구성 요소를 모두 알아봤으니 동작 과정은 이해하기 쉽다!

우선, 동작 과정을 설명하기에 앞서 Local DNS Server라는 것을 짤막하게 설명하려 한다.

우리가 웹사이트나 다른 네트워크의 리소스에 접근해야 할 때, 인터넷에 직접적으로 요청하는것이 아니라 가장 먼저 동일한 LAN 내에 있는 DNS 서버인 Local DNS Server에 요청을 보낸다.

여기서 Local DNS Server라 함은 LAN선으로 인터넷을 사용할 수 있게 공급해주는 통신사의 DNS Server가 된다.

각 통신사마다 DNS 서버의 IP 주소가 존재하고 우리가 이용하는 통신사에 따라 해당 DNS Server로 요청을 보내는 것이다.

그리고 이 Local DNS Server는 도메인의 IP주소를 찾는 과정에서 Recursive DNS Server를 이용하게 되는데 이것은 DNS 계층 구조에서 답을 재귀적으로 찾아 쿼리를 해결하는 역할을 하는 일종의 DNS 서버라고 기억하면 된다. (재귀 함수의 그 재귀가 맞다.)


DNS의 동작 과정을 알아보자.

  1. Resolver는 중개자 같은 역할을 한다고 했다. 그러므로 Resolver가 Local DNS Server에 클라이언트가 요청한 도메인에 대한 정보가 이미 있는지 캐시 정보를 확인한다.
  2. 캐시 정보가 존재할 경우 Local DNS Server에 캐시로 저장되어 있는 해당 도메인의 IP 주소를 요청한다.
  3. Local DNS Server는 저장했던 도메인 IP 주소를 Resolver에게 알려준다.
  4. Resolver는 받은 정보를 최종적으로 클라이언트에게 전달하고 클라이언트는 이 정보로 브라우저 렌더링을 시작한다.

위와 같은 경우는 이미 해당 도메인에 접근한 적이 있으며, 캐시된 정보가 있기 때문에 가능하였지만 처음 접근하는 도메인의 경우는 아래와 같이 동작한다.

  1. Resolver가 Local DNS Server에 클라이언트가 요청한 도메인에 대한 정보가 이미 있는지 캐시 정보를 확인한다.
  2. 캐시된 정보가 없다는 걸 알고, Resolver는 Local DNS Server에게 도메인 이름을 포함한 DNS 쿼리를 보내고 응답을 받을때 까지 기다린다.
  3. Local DNS Server는 Recursive DNS Server를 이용하여 Root DNS Server에 먼저 도메인을 제시한다. Root DNS Server는 확인 중인 도메인 이름의 TLD(.com, .org 등등)에 해당하는TLD DNS Server의 IP 주소를 반환한다.
  4. 그다음으로 Local DNS Server는 Recursive DNS Server를 이용하여 TLD DNS Server에 도메인을 제시한다. TLD DNS Server는 확인 중인 도메인에 대한 Authoritative DNS server의 IP 주소를 반환한다.
  5. 그다음으로 Local DNS Server는 Recursive DNS Server를 이용하여 Authoritative DNS server에 도메인을 제시한다. Authoritative DNS server는 확인 중인 도메인에 필요한 IP 주소를 반환한다.
  6. Local DNS Server는 캐시에 IP 주소를 저장하고 Resolver에게 전달해준다.
  7. Resolver는 클라이언트에 해당 IP 주소를 전달해주고 클라이언트는 이 IP주소를 이용하여 브라우저 렌더링을 시작할 수 있게 된다.

DNS 레코드 타입이나 DNS 쿼리 등의 용어에 대해 설명하자면 내용이 길어질 것 같아 언급하지 않았는데 해당 부분은 참고한 자료 사이트를 읽어보는 것을 추천한다.

우리가 알게된 DNS의 전체 프로세스는 몇 밀리초 밖에 걸리지 않는다고한다.

브라우저가 렌더링되는 속도를 생각해보면 렌더링 이전에 완료되는 작업이여야 하므로 엄청나게 빠를수밖에 없다는 납득을 하게 된다.

이번에 DNS에 대해 알아보면서 DNS가 굉장히 편리한 시스템이며 동작 방식도 심플하다는 것을 알게되었다. DNS로 인해 우리의 인터넷 사용이 매우 편리해졌다는 사실이 와닿는 시간이였으면 좋겠다.

-끝


  • 참고한 자료

https://한국인터넷정보센터.한국/jsp/resources/dns/dnsInfo.jsp

https://aws.amazon.com/ko/route53/what-is-dns/

https://velog.io/@leehyunho2001/DNS에-대한-개념-익히기

https://hanamon.kr/dns란-도메인-네임-시스템-개념부터-작동-방식까지/

https://joonius.tistory.com/19

https://www.opentutorials.org/course/228/1450

https://library.gabia.com/contents/domain/688/

https://chat.openai.com/chat

https://sudo-minz.tistory.com/13

https://help.worksmobile.com/kr/administrator/registration/verify-domain/what-is-dns-record/

https://inpa.tistory.com/entry/WEB-🌐-DNS-레코드-종류-★-알기-쉽게-정리

https://www.websiterating.com/ko/web-hosting/glossary/what-is-subdomain/

https://etloveguitar.tistory.com/m/112

https://library.gabia.com/contents/domain/713/

https://library.gabia.com/contents/domain/4137/

https://itwiki.kr/w/DNS

https://hwan-shell.tistory.com/320

profile
즐코 행코 하세용

0개의 댓글