Network 관련해서 공부를 하며 인터넷을 사용하던 도중에 문득 궁금증이 생겼다.
브라우저에 주소를 입력하는 것만으로 어떻게 서버로부터 자원을 요청할까?
이때 사용되는 핵심 시스템이 DNS 이다
사실 예전부터 DNS 라는 명칭은 몇번씩 들어왔다.
도메인이라는 것이 생소한 개념도 아닐 뿐더러, 유약하게나마 서버를 구축하면서 자주 접한 단어이기도하다. (심지어 DNS를 사용하기도 하였다)
다만, 이번 장에서는 DNS 의 원리에 대해서 한번 살펴보고자 한다.
google 메인 페이지를 불러오기 위해서는 어떤 것이 필요할까?
우선 네트워크 상에서 자원을 요청할 대상(호스트)의 IP Address 를 알아야 한다. 가령 google의 IP Address 가 172.xxx.xxx.xxx 라면 해당 주소를 통해 웹페이지 자원을 요청할 수 있따.
그러나 172.xxx.xxx.xxx 등의 IP 를 한 두개야 외우겠지만 당장의 우리가 사용하는 모든 사이트의 IP 주소를 외운다는 건 불가능에 가깝다.
반대로 이 IP Address 가 google.com, naver.com, velog.io 등등의 우리가 이해하기 쉬운 단어(회사의 이름, 임의의 규칙) 와 1대1(엄밀히 이야기하면 domain 1개 : server 1개이상) 매칭이 된다면 어떨까?
그것을 가능케 해주는 것이 DNS 에서의 Name Server(NS) 이다.
www.google.com 의 주소를 살펴보자
우선 . 을 기준으로 3가지 부분으로 나눠볼 수 있다.
www : 해당주소의 서버가 어떤 자원을 다루는지에 대한 명세(domain, mail, ns 등등이 올 수 있다)
google : 서비스의 이름(회사명, 서비스명 등등의 기억하기 쉬운 이름)
com : TLD(Top Level Domain) 으로 해당 주소를 관리하는 기관(국가, 운영기관)를 알 수 있다.
주소의 구조를 나누어서 살펴본 이유는 각각의 부분마다 IP 를 저장하는 서버가 존재하기 때문이다.
크게
로 나뉜다.
자세히 살펴보면
Root DNS Server 는 com DNS Server 의 IP 를 저장하고 있다.
가령 Root DNS Server 에 www.google.com 의 IP 를 주세요! 라고 한다면 RDS 는 "com 한테 가서 한번 물어볼래? 라고 우회를 해 줄 것이다"
com DNS Server 는 비슷한 방식으로 "IP는 google 을 관리하는 DNS Server 가 가지고 있어" 라고 하며 GDS 의 주소를 줄것이고,
최종적으로 google 을 관리하는 DNS Server 에서 www.google.com 의 IP 주소를 제공하면 클라이언트는 해당 주소로 가서 서버 자원을 요청할 것이다. 여기서 www, mail, ns... 등등이 sub domain 으로 동작하는데 서비스 관리자의 의도에 맞게 커스터마이징이 가능하다.
Local DNS 는 ISP(Internet Service Provider), KT,SKT,LG U+ 의 대표적인 세가지 통신사에서 제공하는 DNS Cache Server 정도로 생각할 수 있다. 해당 NS에 목적 주소가 존재하면 반환해주고, 그렇지 않다면 위의 동작방식을 수행해 DNS ressolver 를 수행한다.
사실 이 부분이 자료를 찾아보며 줄곧 들었던 의문점 중 하나이다.
왜 이렇게 주소 질의 방식을 절차적인 구조로 나누어 놨을까?
무엇인가 명쾌한 해답을 얻을 수 있는 자료는 못찾았지만, 짐작하건데 대부분의 기술적 이슈에서 마주하는 상황과 연관이 있을거라고 생각한다.
바로 보안, 자원 이슈가 대표적인데
애시당초 DNS Server 를 따로 둔 이유도 모든 IP 주소를 Local Machine 에 저장하는건 상당히 비효율적인 것이고 해당 자원만을 관리하는 서버를 구축하여 저장함으로써 그 문제를 해결했다.
서버를 둔다는 것은 자원을 효율적으로 관리하는 행위임과 동시에 보안관리의 범위가 상당히 축소된다는 것을 의미한다.
절차적 구조를 이루지 않고 하나의 서버에서 전세계 모든 IP 주소를 관리한다고 하면, 해당 서버만 해킹하면 세상 모든 서비스의 주소를 해커 마음대로 우회하는 끔직한 사태가 일어날 수 있다.
이러한 상황을 미연에 방지하기 위해서 Root DNS Server(ICCAN 에서 관리)는 주소의 가장 큰 뿌리가 되는 TLD 서버의 주소를 관리하고 순차적으로 TLD DNS Server, 사설 DNS Server 순으로 주소를 분할 관리한다고 이해할 수 있다.
기업에서 사용하는 사설 NS(Name Server) 또한 같은 맥락으로 이해할 수 있겠다. 기업의 서비스는 단 1초라도 끊기면 안되고, 지연/보안 이슈에 상당히 민감하다. 따라서 자체적으로 NS 를 두고 관리를 하여 이슈에 대응한다.
사설 NS 를 둔다는 것은 확장성(도메인 이전)이 좋다는 장점도 있다. 위에서 언급했듯이 sub domain 의 존재함으로써 서비스의 확장을 도모할 수 있다는 점에서 NS를 직접 관리하는 것은 그 효용이 상당하다는 것을 의미한다.
https://developer.mozilla.org/en-US/docs/Learn/Getting_started_with_the_web/How_the_Web_works