도메인 Lookup의 이해

김형섭 (Matthew)·2023년 6월 7일
2

네트워크의 원리

목록 보기
4/6

도메인

인터넷에서 도메인이 없다면 전부 숫자를 외워야 합니다.
IP주소를 써야 하기 때문이죠.

그래서 IP주소 대신 사람이 이해할 수 있는 이름이 필요합니다.
그것이 바로 도메인 입니다.

14.169.188.13 같은 것은 외우기도, 이해하기도 어렵지만
imweb.me 는 참 쉽죠. 이것이 도메인의 역할 입니다.

그렇다면 도메인으로 IP주소로 찾을 방법이 필요하겠지요?

Domain Name Server (DNS)

어떤 도메인의 IP주소를 찾아주는 서비스 입니다.
결국, 전화번호부 같은 겁니다.

김아무개 전화번호는?
아임웹의 IP주소는?

DNS 서버는 누구나 운영 가능

누구나 만들거나 설치해서 운영할 수 있습니다.
꼭 필요하다면 말이죠.

RootDNS 와 최신 정보를 주고 받으며 데이터의 동기화를 유지합니다.
하지만, 요즘은 AWSRoute53 이나 Cloudflare 를 이용 합니다.

그렇다면,
DNS 서버가 모든 도메인의 정보를 가지고 있어야 할까요?

그렇지는 않습니다.

도메인 레지스트리

도메인에는 TLD라고 부르는 영역이 있습니다. (Top-level domain)

.com 은 국제적인 범용 TLD 입니다. (gTLD 라고도 합니다.)
.us 는 미국의 TLD 입니다.
.kr, .co.kr 은 한국의 TLD 입니다.

TLD 별로 각각의 DB가 있고 그 TLD를 관장하는 국가또는 단체에서 관리합니다.
이것을 도메인 레지스트리라고 합니다.

보통, 여러분이 도메인을 등록 할때 여러가지 정보를 적습니다.

  • 소유자명, 주소, 이메일주소... 등의 소유권 정보
  • NameServer 정보 1,2,3,4.... 등의 네임서버 정보

이렇게 입력한 도메인의 메타데이터는 DNS서버가 아니라 도메인 레지스트리 DB에 저장됩니다.

whois 를 통해 도메인의 정보를 요청하면

  • 먼저 도메인 레지스트리에게 이 도메인의 NS서버정보를 요청하고
  • 받아온 NS서버에 도메인의 IP를 알려달라고 보내서
  • 최종적으로 imweb.me의 IP주소를 얻는 방식 입니다.

하지만, 이 DB가 물리적으로 먼 곳에 있으면 지역에 따라 응답이 매우 느릴 수 있습니다.
따라서 레지스트리의 DB는 전세계의 엣지(edge) 서버에 복사되어 관리됩니다.

도메인의 NS정보를 변경 하면, 반영되는데 하루 정도 걸리는데,
이것은 도메인 레지스트리의 DB는 바로 업데이트 되지만,
이를 전 세계의 엣지 서버에 동기화 하는데 시간이 걸리기 때문 입니다.

브라우저에서 imweb.me 를 찾아가는 과정

  1. 브라우저에 imweb.me 를 요청 합니다.
  2. 내 PC의 /etc/hosts (윈도우는 C:\Windows\System32\drivers\etc\hosts) 파일에 이 도메인의 IP주소가 있는 지 체크합니다. → 있으면 IP 리턴 하고 종료
  3. 없으면, DNS에게 인터넷으로 요청 합니다.
    1. 내 PC의 /etc/resolv.conf 에 정의된 nameserver IP주소 를 가져옵니다.
    2. 이 IP주소로 dig 처럼 imweb.me 의 IP주소를 요청 합니다.
  4. DNS 서버는 요청받은 imweb.me 의 IP를 모를수도 있습니다. 이때는,
    1. imweb.me 에서 TLD를 꺼냅니다. → TLD는 .me 입니다.
    2. .me 를 관리하는 레지스트리에게 imweb.me 도메인의 NS서버 정보를 요청 합니다.
      (여러분이 도메인 등록시 입력한 NS서버 정보 1,2,3,4)
    3. 받아온 NS서버 여러개 중 하나를 골라, imweb.me의 IP주소를 요청 합니다.
      (이 도메인 소유자가 적어준 NS서버 이므로, IP주소는 그곳에 있습니다. 우리로 치면 AWS Route53 이 됩니다.)
    4. 이 정보를 내부에 캐시 하고 유저에게 IP주소를 리턴 합니다.
  5. IP주소를 받아오면, 이제 브라우저는 그 IP주소로 데이터를 보냅니다. → 성공!

(길게 적었지만, 이 모든 과정은 대부분 0.5초 안에 끝납니다.)

여기저기 쓰이는 캐시(Cache)

캐시는 첫 응답을 보관했다가, 두번째는 보관한거 바로 꺼내 쓰는 개념 입니다.

누군가 계좌번호 알려달라 했을때 처음에는 찾아서 주다가 나중에는 아예 미리 써놓은 종이를 주는 것 같이 말이죠.

IP를 찾는 과정에서도 두번째 요청부터는 여러곳에서 캐시된 데이터가 사용 됩니다.
그렇지 않으면 인터넷이 엄청 느릴테니까요.

  1. 크롬 자체에서도 한번 DNS를 조회한 도메인은 내부에 캐시 합니다.
    1. 크롬을 완전히 껐다 켜야 캐시가 초기화 됩니다.
  2. OS에서도 한번 요청한 도메인은 로컬에 캐시합니다.
    1. OS 별로 DNS 캐시 초기화를 하는 명령어가 존재합니다. → 방법은 검색 해보세요!
  3. 내 근처의 가까운 DNS가 어디인지도 캐시하고
    1. DNS 내부의 캐시를 내가 제거할 수 는 없으나,
    2. 문제가 있다면, 내가 DNS서버를 다른곳으로 사용하면 됩니다.

위처럼 여기저기 서로 캐시하기 때문에 DNS 조회 결과의 모호함이 가중 됩니다.
이것이 이 글의 목적입니다.

결국, DNS 룩업의 과정을 잘 이해 해야하는 이유 입니다.
어디서 캐시됐는지 알아야 대처를 할 수 있기 때문이죠.

마무리

아임웹은 모든 고객이 자신만의 도메인을 사용할 수 있습니다.
이로 인해 DNS 트러블 슈팅에 상당한 노하우를 가지고 있죠.

이제, 누구나 브랜드를 가져야 합니다.
귀찮은건 아임웹이 다 도와드릴께요.
https://www.imweb.me

오늘도 유익한 내용 되셨기를 기대하겠습니다.
감사합니다.

매튜 드림

profile
CTO at Imweb, 20년차 개발 장인, 전) 플레이오토 CTO/창업자

0개의 댓글