reference: "모두를 위한 리눅스 프로그래밍" / 아오키 미네로
네트워크상의 호스트는 IP 주소로 식별된다. 그러나 IP 주소는 수치에 불과하므로, 사람이 다루기 어렵다. 그래서 보통은 IP 주소 대신에 호스트명(Host name)을 사용한다.
ex) naver.com / google.com
인터넷 초기 시절에 사용된 것이 /etc/hosts이다. 이 파일에 다음과 같이 IP 주소와 호스트명을 기록하였다.
그러나 호스트가 늘어날 때마다 모든 호스트를 이 파일에 기록해야 하므로 현실적이지 않다.
그래서 탄생한 것이 DNS(Domain Name System)이다. DNS는 호스트명을 도메인(Domain)이라고 하는 영역에 나눠서 관리함으로써 호스트명의 관리를 전세계에 분산시켰다.
도메인이라는 것은 리눅스의 디렉터리처럼 이름을 트리 구조로 관리한다. 루트 디렉터리에 해당하는 도메인은 이름이 없는 루트 도메인이고, 그 밑에 com, org, kr과 같은 최상위 도메인이 있고, 이어서 그 밑에 계속해서 배치되는 구조이다. 각각의 도메인을 도메인 이름이라고 한다. 파일 시스템에서의 경로와 비슷하다.
example.com이라는 호스트의 IP 주소는 example.com 도메인의 관리자에게 물어보면 된다. 이때 물을 상대는 사람이 아니라 프로그램(서버 프로세스)이다. 이러한 서버를 DNS 서버라고 한다.
1) example.com의 DNS 서버는 com 도메인의 DNS 서버에게 물으면 된다. 도메인은 트리 구조로 되어있다. 밑의 도메인에 대해서는 그 위의 도메인 관리 DNS 서버에게 문의하면 된다.
2) com 도메인 서버는 루트 도메인의 DNS 서버에게 물으면 된다. 그리고 마지막으로 루트 도메인의 DNS 서버의 IP 주소는 모든 DNS 서버에 직접 등록되어 있어, 문의할 필요가 없다.
=> 이러한 방식으로 DNS가 호스트명을 IP 주소로 바꾸어준다.
source: https://aws.amazon.com/ko/route53/what-is-dns/
/etc/hosts가 더는 사용되지 않는 것은 아니다. 현재도 회사나 가정 내 네트워크처럼 소수 호스트의 이름을 붙이기 위한 용도로 /etc/hosts가 사용되고 있다. 필요에 따라 DNS와 별도로 사용되고 있다.
그래서 호스트명과 IP 주소를 교환해 주는 존재를 리졸버(resolver)라고 한다. 일반적으로 컴퓨터에게 세계에서 이름으로 그 실체를 얻어내는 것을 리졸브라고 한다. 리눅스에서는 IP 주소의 리졸버로 libc가 있어, 해당 설정은 /etc/nsswitch.conf에 기술된다.