지인에게 전화를 걸 때, 가까운 사이거나 자주 통화하는 경우라면 번호를 외워서 걸 수도 있다.
하지만 대부분은 연락처 목록에서 통화할 사람의 이름을 검색한 뒤, 통화 버튼을 누르는 방식을 사용한다.
그런데 만약 전화번호 저장 기능이 없어서 매번 번호를 직접 입력해야만 전화를 걸 수 있다고 상상해 보자.
지인이 10명 정도라면 그나마 번호를 외울 수 있을지도 모르지만,
지인의 수가 더 많아진다면 모든 번호를 기억하기 어려울 것이다.
수많은 웹사이트의 IP 주소 역시 모두 외울 수 없기 때문에
우리가 쉽게 웹사이트에 접근할 수 있도록 도와주는 시스템이 있는데 그것을 DNS라고 한다.
DNS란?
DNS는 Domain Name System의 약자로 도메인과 ip 주소를 관리하는 시스템을 의미한다.
그래서 DNS에서는 도메인을 ip 주소로 변환해 주거나 반대로 ip 주소를 도메인으로 변환해 주는 역할을 한다.
우리가 브라우저 주소창에 특정 도메인을 입력하고 엔터를 치게 되면
가장 먼저 이 DNS를 통해 해당 도메인과 일치하는 ip 주소를 가져오게 되는데
이 과정 속에도 몇 가지 단계가 존재한다.
DNS 서버 종류
도메인에 따라 본격적으로 DNS 서버에서 ip를 반환하기 전,
먼저 로컬 DNS 캐시에서 해당 도메인에 대한 ip가 저장되어 있는지 살펴본다.
이 과정에서 저장되어 있다면 바로 해당 ip 주소로 접근하게 된다.
ip 주소가 없다면 다른 DNS 서버로 접근하게 되는데, 가장 먼저 접근하는 곳이 루트 DNS 서버다.
루트 서버는 ICANN (Internet Corporation for Assigned Names and Numbers)에서 관리하고 있는데,
전 세계에 13개의 루트 서버가 있다.
각 루트 서버는 복제되어 운영되기 때문에 실제 서버는 1,000 개 가까이 있다고 한다.
이 루트 서버에서 각 계층 서버에 순차적으로 도메인을 확인해 ip 주소를 찾는 과정을 거치게 된다.
루트 서버의 다음 계층은 TLD(Top-Level Domain) 서버인데, 해당 서버는 국가 최상위 도메인 (ex, .kr, .jp 등)과
일반적으로 사용되는 일반 최상위 도메인 (ex, .com, .net 등)을 관리하는데
만약 찾는 도메인이 www.google.com이라면 .com을 관리하는 TLD 서버에서 ip 주소를 찾게 된다.
TLD 서버는 그다음으로 책임(Authoritative) 서버에 쿼리를 보내는데,
실제로 도메인 이름의 ip 주소를 매핑해 가지고 있는 서버가 이 책임 서버다.
해당 서버에서 찾게 된 ip 주소를 다시 역순으로 루트 서버까지 전달해 보내게 된다.
왜 이렇게 복잡하게 하나?
URL 구조를 보면, DNS 서버에 여러 계층을 거쳐 도메인 정보를 찾는 방식으로 동작한다.
그렇다면 왜 이렇게 간단해 보이는 URL을 찾는 데 여러 단계를 거쳐야 할까?
만약 도메인을 하나의 서버에서 관리한다고 가정해 보자.
이 경우, 특정 IP를 찾는 데 상당한 시간이 걸릴 수 있고, 관리도 매우 복잡해질 것이다.
게다가 서버에 장애라도 발생하면 전체 시스템에 심각한 문제가 생길 위험이 있다.
이러한 문제를 해결하기 위해 DNS는 여러 계층으로 나눠 각 계층이 담당하는 역할을 분리하는 구조를 채택한 것이다.
그럼에도 불구하고 "한 서버에서 찾는 게 더 빠르지 않을까?"라는 의문이 들 수 있다.
이 질문에 답하기 위해 도서관을 예로 들어보자.
도서관에서 '김치찌개'에 관한 책을 찾는다고 상상해 보자.
우선 음식 관련 파트로 이동한 뒤, 한식 파트로 이동하고, 그 안에서 '김치찌개' 책을 찾아볼 것이다.
만약 도서관이 이렇게 파트별로 나눠져 있지 않다면,
원하는 책을 찾기 위해 도서관 전체를 뒤지는 데 많은 시간이 소요될 것이다.
이처럼, 하나의 서버에서 모든 도메인을 관리하는 방식보다는 여러 계층으로 나눠
각 부분을 분담하게 하면 더 효율적이고 빠르게 원하는 정보를 얻을 수 있다.
DNS 서버가 계층적으로 설계된 이유도 바로 여기에 있다.
포스팅 작성에 참고한 감사한 글들
'CS > Web' 카테고리의 다른 글
CORS 에러 : CORS 에러요? 코스요리는 좋아합니다만? (5) | 2024.12.02 |
---|---|
브라우저의 동작 방법 : 주소창에 구글 주소를 입력 했을 때 (0) | 2024.11.16 |
CSR vs SSR (feat. NEXT.js의 등장) (0) | 2023.07.07 |