이번에 학교 중앙 동아리 홈페이지 프로젝트를 시작하며, 학교측에 우리의 서비스와 학교측 도메인 주소(OO.ac.kr)를 연결하기 위해 요청하는 작업이 필요했다. 그런데 요청서 양식에 고정 IP 대역을 요구하는 것이었다. 그래서 '읭? 우리는 AWS에 서비스를 배포할 것인데 IP 대역을 어떻게 고정시키지?' 해서 궁금해서 담당부서에 문의를 해보았다. 다행히 '그러한 경우에는 그냥 고정 IP 주시면 저희 DNS에 등록해줍니다.'라고 하셨다.
아는만큼 보인다고, DNS에 대해 최근에 복습한 것이 떠오르면서 단번에 직원분의 답변이 이해가 갔다. 요즘 노션에 썩히고 있던 내 TIL 노트들을 하나씩 블로그로 꺼내는 작업을 진행하고 있는데, 이참에 DNS 개념에 대해서 정리해보고자 한다.
DNS란 한마디로 도메인에 해당하는 IP 주소를 기록해놓은 계층적 시스템이라 할 수 있다.
휴대폰에 ‘울엄마’라고 등록한 엄마한테 전화를 걸 때, 휴대폰은 전화번호부에 등록된 ‘울엄마’를 찾고 거기에 등록된 전화번호를 찾아서 전화를 건다. 여기서 중요한 건 결국 ‘전화번호’로 전화를 거는 것이다. 이와 마찬가지로 ‘google.com’에 접속하려면 그에 대응하는 ‘IP 주소’를 찾아야 한다. 따라서 이 매칭 정보를 제공해주는 시스템이 필요하며 그 시스템이 DNS이다.
DNS(Domain Name System)는 도메인과 관련한 시스템으로써 인터넷에 참여하는 모든 리소스의 계층적 네이밍 시스템으로, IP 주소와 도메인 이름을 결정하는 서비스를 응용 프로세스에 제공한다.
인터넷 상에서 컴퓨터나 네트워크 리소스를 식별하는데 사용되는 이름으로, 사람이 알아볼 수 있는 문자열로 구성된다.
www.naver.com
‘www’는 host name(호스트 네임)에 해당하고 ‘naver.com’은 domain(도메인)에 해당한다.
FQDN(Fully Qualified Domain Name)
http://api.www.example.com.이 이에 해당한다.
주어진 도메인에 해당하는 정보를 요청하는 쿼리(질의)를 ‘DNS Query’라고 한다. 이때, Name Server(NS)는 Zone File 기반으로 DNS 쿼리에 대해 응답하는 서버로, 계층적으로 구성된 네트워크에 분산되어 있으며 이곳에서 도메인 정보들이 저장되고 조회된다.
DNS Resolver로서 사용자와 NS 사이에 위치한 서버이며, 사용자의 클라이언트가 가장 먼저 질의를 요청하는 대상이다. 로컬 DNS 서버까지의 질의는 재귀적으로 수행하고, 이후에는 반복적 질의(루트 네임 서버, TLD 네임서버, …)를 통해 클라이언트에 응답하는 역할을 한다.
리졸버(resolver)
클라이언트의 요청에 따라 데이터를 반환하는 기술
보통 ISP(KT, SKT, LG U+ 등)마다 지정된 곳이 있으며, 사용자의 편의에 의해 변경될 수 있다.
그렇다면 DNS는 왜 계층적인 구조를 지니고 있는 것일까? 그 이유는 수억 개의 도메인을 여러 곳에서 관리하여 요청을 분산하기 위해서이다. NS 서버도 결국 서버이기 때문에 한정된 컴퓨팅 자원으로 이루어져있다.
따라서 DNS는 여러 요청을 분산하여 서버의 부담을 덜 수 있는 계층 구조를 택한 것이다. 이때, 계층은 최상위 도메인부터 차례대로 구성되어 있으며, 실제 레코드는 가장 마지막 계층에서 보관하고 처리하게 된다.
[출처: 생활코딩]
DNS 계층 구조의 최상위 레벨로, 다음 단계인 TLDs(Top Level Domain)의 Zone File을 가진 NS 서버의 주소 정보를 가지고 있다. 루트 DNS 서버는 전 세계에 13개가 존재하며, 복사된 미러 서버가 존재한다. DNS Root의 주소는 각 DNS Resolver에 하드 코딩되어 있으며, 이 파일을 Root Hints File이라 부른다.
root domain:
com.의.에 해당하며, 루트 DNS 서버가 담당
ICANN(Internet Corporation for Assigned Names and Numbers)에 의해 관리된다.
Root Hints File 확인
curl https://www.internic.net/domain/named.root명령어 사용하여 확인 가능하다.
TLD(top-level domain)을 관리하는 네임 서버로, DNS 계층 구조의 두 번째 레벨에 위치한다. 서브 도메인에 대한 네임서버 나 도메인의 권한 있는 네임서버 정보를 반환한다. com, org, net, edu와 같은 상위 레벨 도메인과 kr, uk, fr, ca, jp 같은 국가 도메인을 포함한다.ex) com, .us, .in, .gov, .org 등
ICANN의 지사인 IANA가 관리한다.
실제 도메인의 레코드를 가지고 있는 서버로, 최종적으로 맵핑된 주소를 확보할 수 있다.
www.naver.com 에 접속하는 과정 중 도메인에 대응하는 IP 주소를 찾는 과정을 살펴보자.
한 마디로 ‘빠르고, 가볍기 때문’이라고 할 수 있다.
DNS 서버가 해당 패킷을 받았을 때 어떤식으로 처리할 지를 나타내는 지침
| 종류 | 설명 | 비유 | 비고 |
|---|---|---|---|
| A | 도메인을 서버의 IPv4로 직접 연결하며, 직통 연결이기 때문에 접속이 빠름 | A모형의 연결 다리로 도메인과 ip를 직접 연결하는 레코드 | 도메인과 IP 간 일대다/다대일 매칭도 가능 |
| CNAME (Canonical Name record, 표준적인 네임 레코드) | 하나의 도메인 네임을 다른 이름으로 매핑시키는 DNS의 리소스 레코드의 일종 | Name server를 C(See)하는 레코드 | 무조건 다른 도메인 네임을 가리켜야 하며, 직접 IP 주소를 가리켜서는 안됨 |
| NS | 특정 호스트의 IP 주소를 찾을 수 있는 네임 서버 | ||
| MX | 해당 도메인과 연동되어 있는 메일 서버 |
참고자료
유튜브 AWS 강의실: DNS(Domain Name Service) 정리
DNS가 뭔가요? + 도메인, A Record, CName
[10분 테코톡] 조이,엔초의 DNS와 ARP
루트 네임 서버 - 위키백과, 우리 모두의 백과사전
인파님의 블로그: DNS 레코드 종류 ★ 완벽 정리