Post

DNS

DNS

일반 사용자들이 웹 애플리케이션에 접속할때, 어떻게 접속할까? 도메인 주소를 입력해서 접속할 것이다. IP 형태로 데이터 패킷에 대한 요청과 응답이 이루어진다고 해도, 일반 사용자들이 그런 과정까지 알 필요는 없으니. 또한, IP가 바뀌는 상황이 발생한다면, 어떨까? 그러면 그 IP를 앤드포인트로 사용하는 웹 애플리케이션에서는 그에 따라 코드 수정이 이루어지고 설정도 바꾸어야 하는 등 많은 혼란이 있을 것이다. 이를 위해 도메인 주소로 접속하는 일은 필요하다고 할 수 있다.

그러나, 도메인 형태로 제3계층에서 통신이 이루어지지 않는다. 데이터 패킷은 IP 주소 단위로 요청과 응답이 이루어진다. 그렇다면, 많은 도메인 주소들은 어떻게 되어야 하나? 간단하다. 제3계층에서의 일이 가능해지기 위해서 도메인 주소에 대해 IP로 바뀌는 일이 필요하다. 이를 위해 DNS가 존재하는 것이다. 그렇다면 DNS 정의부터 알아보자.

DNS는 “Domain Name System”의 약어로, 인터넷에서 사용되는 컴퓨터 네트워크와 서비스의 주소를 관리하는 시스템이다.

이 시스템은 사용자가 읽기 쉬운 도메인 이름(예:www.example.com)을 컴퓨터 네트워크에서 사용되는 숫자로 된 IP 주소 형태로 변환하거나 그 반대의 역할을 수행함.

그래서 사용자가 도메인 주소를 이용해 서비스를 요청하면, 사용자가 접속하고자 하는 서비스 사이트에 접속하기 전에 DNS 서버에 먼저 접속하고자 하는 서비스 사이트에 대한 IP를 요청하고, DNS 서버에서 그 IP를 응답해준다. 그러면 사용자는 그 IP를 받아서 접속하고자 하는 서비스 사이트에 접속해서 통신이 이루어질 수 있는 것이다.

그러면 이러한 DNS의 구조는 어떻게 될까?

Desktop View

www.y09255.com이란 도메인 주소가 있다고 해보자. 그러면 위 도메인 주소에서 보이는 “.”은 각 계층의 경계가 표시되며, 뒤에서부터 앞으로 각 계층을 설명한다. 맨 뒤 생략된 루트(.)를 시작으로 Top-Level인 com, Second-Level인 naver, Third-Level인 www와 같이 뒤에서 앞으로 해석된다.

도메인 계층은 최대 128 계층까지 구성할 수 있으며, 계층별 길이는 최대 63바이트까지 사용할 수 있고, 도메인 계층을 구분하는 구분자 “.”을 포함한 전체 도메인 네임의 길이는 최대 255 바이트까지 사용할 수 있다. 문자는 알파벳, 숫자, “-“만 사용 가능하며, 대소문자 구분이 없다.

그러면 각 계층에 대해 알아볼까? 위 DNS 구조에서 알아본 것과 같이 계층은 루트, Top-Level, Second-Level, Third-Level로 되어있다. 각 계층에 대해서는 간략히 알아본다.

먼저 루트 도메인이다. 해당 도메인은 도메인을 구성하는 최상위 영역으로 DNS 서버가 사용자가 요청한 도메인 정보가 없을 경우, 먼저 해당 도메인으로 쿼리하게 된다.

루트 DNS는 전세계에 13개 있고, DNS 서버 설치시 루트 DNS IP 주소를 기록한 힌트 파일을 가지고 있어 별도로 설정할 필요가 없다. 그러나 참고삼아 기록해둔다. 다음과 같다.

Desktop View 참조 : 페이지 url

다음은 com에 해당하는 부분인 Top-Level Domain(TLD)에 해당하는 내용인데, 기관이나 국가에 따라 그 종류와 모습이 다양하다. 한국의 경우에는 Kr로, 일본의 경우에는 jp로, 기업체의 경우에는 com, 4년제 이상 교육기관의 경우 edu로 이루어지는 등 다양하지만, 이 포스팅에서는 자세히 다루지 않기로 한다. 그냥, 다양하게 존재한다 정도로 알고 넘어가기로 한다.

그러면, 구조에 대해 알아보았으니 동작 방식에 대해 알아보자.

Desktop View

먼저 사용자가 example.com 사이트를 입력해서 접속하려고 한다고 해보자. 그러면 해당 example.com 도메인 주소를 ip로 바꾸기 위해서 DNS 쿼리를 통해 IP 주소로 바꾸고자 할 것이다. 그러면 먼저 로컬 DNS 서버로 example.com에 대해 IP 주소를 요청하고, 로컬 DNS 서버에서는 DNS 캐시로 저장되어있는 정보들 중 해당 정보를 찾을 것이다. 그래서 만약, 캐시가 있을 경우에는 저장된 IP 주소를 반환해주지만, 만약 캐시에서 찾지 못할 경우에는? 5번부터 본격적인 DNS 동작이 이루어지게 된다.

먼저, 루트 DNS 서버에 쿼리해서 .com에 해당하는 정보를 가진, TLD 정보를 가진 도메인 주소를 쿼리한다. 이에 루트 DNS는 example.com의 TLD인 .com을 관리하는 네임 서버 정보를 DNS 서버에 응답한다.

이에 DNS 서버는 네임 서버에 example.com에 대한 정보를 다시 쿼리한다. 그러면 TLD 네임 서버는 example.com에 대한 정보를 가진 example.com 네임 서버 정보를 DNS 서버로 응답한다.

DNS는 example.com 네임 서버에 example.com에 대한 정보를 쿼리하고 이에 대해 example.com 네임 서버는 example.com에 대한 정보를 DNS 응답한다.

DNS는 example.com에 대한 정보를 로컬 캐시에 저장하고 사용자 호스트에 example.com에 대한 정보를 응답한다. 사용자는 DNS로부터 받은 example.com에 대한 정보를 이용해 사이트에 접속한다.

이 과정이 바로 DNS 동작 방식이라 할 수 있다. 좀 복잡할 수 있는데, 이런 느낌이라고 보면 될 거 같다.

“어떤 문서를 쓰고 싶은데, 어떤 부서에 물어보면 될까요?”

“아, 그 문서는 K 부서한테 물어보세요”

“안녕하세요~ 방금 A 부서한테 들었는데, 이 문서 쓰려면, K 부서한테 물어보면 된다고..”

“아 저희 부서가 아니라, D 부서한테 가보세요.”

이런 식으로 진행된다고 보면 이런 비유를 통해 DNS 동작 방식에 대해 보다 쉽게 이해할 수 있을 것이다.

​ 이러한 DNS 서버는 마스터와 슬레이브 서버로 나눌 수 있으며, 도메인 위임, TTL 등의 개념이 존재한다. 또한, 레코드라는 개념이 등장하는데. 이 레코드에 대해서는 개념만 설명하고 넘어가는 것으로 한다. 아무래도, 레코드에 대해 CNAME, A레코드 등 여러 종류의 레코드가 존재한다고 하고 그렇지만 이 하나하나의 레코드에 대해 직접 실습해보면서 어떻게 생겼고, 어떻게 동작하는지 등을 알지 못하기 때문에 이러한 실습은 향후 진행하기로 하며. 그때 그에 대한 개념도 정리하고자 한다. 그래서 그러한 실습을 진행하지 않는 이번 포스팅에서는 개념만 간단하게 언급하고 넘어가기로 한다. 레코드의 개념은 아래와 같다.

DNS에서 레코드(Record)는 도메인 이름과 연관된 다양한 유형의 정보를 나타내는 데이터 요소이다. DNS 레코드는 주로 도메인 이름을 IP 주소로 매핑하거나, 메일 서버 정보, 서비스 위치, 인증 등 다양한 목적으로 사용된다. 각각의 DNS 레코드 유형은 특정 유형의 정보를 나타낸다.

그리고 레코드를 공부하는 과정에서 SOA 레코드에 대한 개념이 책으로도 이해가 안되어 인터넷 검색을 했었는데, 그 과정에서 이해하기 쉽게 설명한 블로그가 있어서 링크로 남겨둔다. 페이지 url

이번 포스팅에서는 DNS에 대해 다루었다. 그러나 DNS의 일부만 다루었을 뿐, 공부하는 과정에서 DNS에 대해 못다룬 내용은 방대하다는 사실을 알게 되었다. 쿠버네티스에 있어서 이 DNS의 개념은 중요하다고 할 수 있는데, 향후 더 공부하여 다시 정리해볼 예정이다. 그러면 이번 포스팅은 이것으로 마무리하기로 한다.

This post is licensed under CC BY 4.0 by the author.