source: 그래도그림(페이스북) / https://www.facebook.com/tattooer.godeun/?fref=mentions&__tn__=K-R
이름만 들어도 멀리하고 싶은 DNS는 사실 일상에서 로컬 컴퓨터와 많이 교류하는 서버이다. 이전 포스팅 TCP/IP에서 간단히 설명했던 IP에 이어, 오늘은 우리가 늘 이용하는 도메인을 관리하는 DNS에 대해서 다루려 한다. 웹 호스팅, 주소 관리할 때 알아두면 좋은 친구 DNS에 대해서 알아보자.
"IP와 도메인"
누군가에게 전화를 걸려면 어떻게 해야할까? 핸드폰을 켜서 상대방의 전화번호를 눌러야 한다. 우리는 멀리 떨어진 상대와 커뮤니케이션 할 때 상대방의 주소, 전화번호를 알아야 한다. 그래야 찾아가서 대화를 하든 전화를 걸든 할 수 있다. 컴퓨터도 서로 통신을 하려면 각자 주소가 필요한데, 이렇게 네트워크 상에서 컴퓨터가 갖는 논리적 주소를 IP라고 한다. IP는 알다시피 0.0.0.0부터 255.255.255.255까지의 수로 구성되어 있다. 그러다보니 평소에 사용할 때 직관적이지 않고 외우기 힘들다는 단점이 있다.
source: meme generator
도메인(Domain)은 주소보다는 이름에 가깝다. 네트워크 상에서 컴퓨터가 서비스하는 호스트 주소를 이름으로 부르는 것이다. 예를 들어 구글 서버가 유튜브를 서비스하는 호스트 주소의 이름은 Youtube.com이다. 문자로 구성된 도메인의 경우 IP보다 의미를 알기 쉽고 사용하기도 편리하다.
친구와 내가 자주 가는 카페가 있다고 해보자. 자주 가는 카페를 가자고 약속할 때 매번 '00시 00구 00동 000-00번지'로 오라고 하지 않는다. 매번 그렇게 주소를 외우고 있다면 기억력이 아주 좋은 것이다. 하지만 우리는 별로 기억하고 싶지도 않고 길게 말하는 것도 귀찮으니 '00카페'로 오라고 한다. 자주 가는 카페처럼 자주 가는 사이트에 접속하고 싶다면 IP보다는 도메인이 더 직관적이고 편하다. 만약 우리가 매번 주소창에 youtube.com이 아니라 IP를 쳐서 들어가야 한다면 Youtube의 *DAU가 낮아졌을지도 모른다.
*DAU(Daily Active User): 일간 활성 사용자수.
"DNS는 왜 만들어졌는가"
DNS가 없었다면...
00카페라고 하면 우리는 자연스럽게 카페의 주소를 머릿속에서 자연스럽게 떠올릴 수 있다. 또는 주소록에 기록해놓고 필요할 때 확인한다. 컴퓨터에도 IP와 도메인 이름을 매핑(연결)시켜 놓은 주소록 파일이 있는데, 그것을 hosts 파일이라고 한다. 하지만 이렇게 관리하는 데에는 문제가 있었다. 도메인이나 IP가 바뀌면 hosts 파일과 그 주소가 달라 접속할 수 없다는 문제가 있었고, 전세계적으로 도메인이 생겨나면서 각자가 주소를 관리하기에 한계가 있었다. 많은 도메인을 체계적으로 관리할 필요가 생긴 것이다. 이런 배경으로 세상의 모든 도메인을 관리하는 서버인 DNS(Domain Name Server)가 탄생했다.
"DNS의 체계"
DNS가 하는 일은 도메인과 연결된 IP 주소를 알려주는 것이다. 하지만 DNS가 114처럼 물어보면 바로 알려주는 게 아니다. 전세계의 도메인을 관리하기 때문에 DNS도 많은 서버에서 데이터를 나눠 관리한다. 그래서 처음에 요청한 DNS에서 주소를 찾을 수 없으면 다른 DNS에 요청하고, DNS가 물어물어 IP주소를 찾은 다음 최종적으로 사용자 컴퓨터에 전달되는 것이다. 그제서야 우리는 전달받은 IP주소에 접속하여 서비스를 이용할 수 있다. 우리가 매번 주소창에 도메인을 치고 접속하는 동안 네트워크에서는 이 모든 일을 해낸다.
먼저 DNS 서버들이 어떻게 구성되어있는지 알기 위해 도메인 구조부터 살펴보자. 도메인에도 레벨이 있다.
Root, Top-Level-Domain, Second-Level-Domain, Third-Level-Domain이다. 도메인 계층은 뒤에서부터 시작된다.
오늘의 설명 재료인 youtube로 예를 들자면 맨 끝의 '.'이 Root 도메인이다. 모든 도메인의 Root가 같기 때문에 보통 생략된다. 낯설겠지만 맨 끝에 .을 붙이고 들어가도 정상적으로 접속할 수 있다. TLD는 그 다음인 com이고, SLD는 그 다음인 youtube, T(Third)LD는 www이다.
www.youtube.com.
GraphQL
복사
DNS 구조/ 초: 루트, 노: TLD, 빨: SLD / source: novell.com
1. Root DNS
루트 DNS는 루트 도메인을 관리하는 DNS다. 우리가 요청했던 DNS에서 IP주소를 찾지 못하면 DNS는 Root DNS에 쿼리한다.
2. Top-Level-Domain
최상위 도메인에는 여러 종류가 있다. 우리가 평소에 많이 접하는 도메인으로는 .com, .org, .net 등이 있다. 특별한 제한 없이 전세계적으로 많이 쓰이는 도메인들이다. 이런 도메인을 gTLD(generic TLD, 일반 최상위 도메인)라고 한다.
반면, 국내 정부 및 기관 사이트에 자주 보는 co.kr, or.kr과 같은 도메인들은 .kr 도메인의 하위 도메인이다. .kr은 *ccTLD(country code TLD, 국가코드 최상위 도메인) 중 하나이다.
*ccTLD: ISO 3166-1에 정해진 국가별 코드를 사용한 최상위 도메인
DNS 동작 방식에 대해 알려면 Root와 TLD만 알아도 충분하다. 그 외 설명을 덧붙이면, SLD는 youtube, naver, daum 등 가장 의미 있게 지정되는 이름이다. 보통 등록처나 서비스 제공자가 등록한 도메인 이름이 들어간다. 마지막 Third-Level-Domain은 도메인을 확장하는 영역이라고 생각하면 된다. 기존 도메인 앞에 www(world-wide-web)나 test.youtube.com 등 서브 도메인을 붙여 도메인을 확장한다.
DNS는 개발 환경에서도 자주 접하고 중요한 영역이라 비교적 자세하게 다뤘다. 얘기가 길어졌으니 제일 재밌는? 동작 방식은 다음 편에서 다룬다.