본문 바로가기

개발 이야기/network

[네트워크 상식#2] 누구나 쉽게 DNS와 친해지기 (2편) | 동작 방식, 레코드

 

계속해서 친해지기 / source: 그래도그림(페이스북)

 

저번 포스팅에서는 DNS 체계까지 얘기했다. 이번에는 DNS 동작 방식과 레코드에 대해서 알아보자. 

 

 

 

 

[네트워크 상식#2] 누구나 쉽게 DNS와 친해지기 (1편)

이름만 들어도 멀리하고 싶은 DNS는 사실 일상에서 로컬 컴퓨터와 많이 교류하는 서버이다. 이전 포스팅 TCP/IP에서 간단히 설명했던 IP에 이어, 오늘은 우리가 늘 이용하는 도메인을 관리하는 DNS

another-light.tistory.com

 

 


 

 

"DNS 동작 방식"

 

퇴근하고 돌아온 나는 자연스럽게 노트북을 열고, 구글 주소창에 youtube.com을 입력한다. 엔터를 치는 순간, IP주소를 찾기 위해 DNS와 내 컴퓨터 사이의 통신이 시작된다. 아래는 cloudflare 문서에서 가져온 이미지인데 이해하기 쉽도록 이를 통해 설명하려 한다.

 

 

DNS 동작 방식에 대한 설명 / source: cloudflare

 

1. 내 컴퓨터에서 찾아보기

 

먼저 내 컴퓨터에 youtube.com을 입력하면, 내 컴퓨터에 있는 로컬 DNS(이미지에서는 DNS resolver)에서 hosts 파일에 해당 도메인의 IP주소가 있는지 찾아본다. 이미 주소를 알고 있으면서 매번 DNS에 물어보는 건 시간 낭비이다.

 

이미 로컬 DNS가 알고 있다면(캐시되어 있다면) IP주소를 바로 찾아준다. 이게 8번 과정이다. 이 과정을 Recursive *Query(재귀적 쿼리)라고 한다. 내 컴퓨터에서 도메인을 쿼리하면 내 컴퓨터에 있는 로컬 DNS가 응답하니 스스로 요청하고 응답한다하여 재귀적 쿼리라고 한다.

 

*query: 데이터 요청

 

 

2. Root DNS에 쿼리하기

 

로컬에 주소가 없으면 로컬 DNS는 다른 DNS에게 물어물어 도메인을 관리하는 네임서버를 찾아낸다. 먼저, 루트 DNS에 요청한다. Root 서버는 해당 도메인의 최상위 도메인을 어떤 DNS가 관리하는지 로컬 DNS에게 알려준다. youtube.com에서 com을 관리하는 DNS까지 알게되었다. 

 

 

3. TLD(Top-Level-Domain) DNS에 쿼리하기

 

이제 .com을 관리하는 TLD DNS에게 youtube.com에 대해 쿼리한다. TLD DNS는 youtube.com을 관리하는 네임 서버를 알려준다. 여기까지가 이미지상에서 4-5번 과정이다.

 

 

4. youtube.com을 관리하는 네임 서버에 최종적으로 IP주소 받기

 

최종최종최종이다. 로컬 DNS가 고생한 덕에 드디어 youtube.com을 관리하는 네임 서버를 찾아냈다. 로컬 DNS가 도메인을 쿼리하면 네임 서버는 IP 주소를 알려준다.

 

 

5. 받은 IP주소로 사이트 접속하기

 

로컬 DNS는 네임 서버에서 받은(이미지 7번 과정) IP주소를 내 컴퓨터에 넘겨준다. 내 컴퓨터는 받은 IP주소를 통해 서버와 통신할 수 있게 된다.

 

 


 

 

 

"레코드: A, CNAME"

 

DNS가 가지는 레코드 종류는 여러 개가 있다. 그 중에서 개발 시 가장 많이 보게 될 A 레코드, CNAME 레코드에 대해서 알아본다. 

 

 

1. A 레코드 

 

도메인 주소를 IP(*IPv4) 주소로 매핑한다. 위에서 우리가 살펴봤던 과정은 youtube.com의 A 레코드를 찾는 과정과 같다. 도메인 주소와 IP 주소가 바로 매핑되기 때문에 비교적 빠르게 IP 주소를 받을 수 있다. 단, IP 주소가 바뀌면 A 레코드에 변경 사항을 적시해줘야 한다.

 

*IP버전 중 IPv4 주소에 대해 매핑한다. IPv6는 IPv4 주소가 소진되면서 새롭게 나온 IP 버전이다. IPv6에 대해 매핑하는 레코드는 AAAA라고 따로 있다.

 

 

2. CNAME 레코드

 

CNAME에서 는 canonical의 약자이다. canonical 자체는 '정식의'라는 의미이다.

 

canonical은 DNS 말고도 웹사이트에서 검색 최적화를 위해 사용하는 개념이기도 하다. 중복 url을 막고 의미있는 url만 담기 위해 정식으로 사용할 canonical url을 지정한다. 예를 들어 'youtube.com?v=000'이 canonical url이면, 'youtube.com?v=000&t=384'은 canonical url에 대한 또 다른 url로 인식되고 'youtube.com?v=000'만 정식으로 크롤링된다. 

 

source: youtube

 

이처럼 CNAME은 정식 url에 대한 또 다른 도메인(별칭)을 지정할 때 쓴다. youtu.be를 youtube.com에 연결시키려 한다고 해보자. 그럼 youtube.com에 대한 CNAME 레코드로 youtu.be를 지정하면 된다.

 

 

 

"A, CNAME의 차이"

 

source: marinamele.com

 

A 레코드는 IP 주소를 빠르게 찾을 수 있다. 반면에 CNAME은 IP 주소를 찾는데 한 단계가 더 늘어난다. 위의 이미지를 보면, blog.example.com에 접속한다고 했을 때 example.com을 찾고 여기에 연결된 IP 주소를 한 번 더 찾아야 한다. 만약 example.com도 정식 도메인이 아니라 CNAME 레코드였다면 도메인을 찾는 과정은 또 늘어날 것이다.

 

반대로 IP 주소 변경이 많은 사이트라면 A 레코드로 매핑했을 때 매번 IP 주소를 변경해줘야 한다. 꽤나 번거로울 것이다. 대신 CNAME을 지정하면 IP 주소가 바뀔 때마다 정식 도메인의 IP 주소만 바꾸면 된다.

 

불법 사이트가 사이트 도메인을 여러 개 만들고 정식 도메인에 대해 CNAME을 지정한다 해보자. IP 주소가 차단되어도 정식 도메인에 대한 A 레코드의 IP 주소만 바꿔주면 다른 여러 도메인에 대해서도 적용되므로 IP 차단 우회가 쉬워진다. 그래서 불법사이트들은 IP 주소가 차단되어도 빠르게 복구할 수 있다. 

 

 


 

 

"DHCP, GSLB"

 

이것도 알면 좋을 것 같아 끼워 넣었다.

 

간단히 설명하면 GSLB(Global Server Load Balancer)는 DNS랑 같은 기능을 하지만 정상적인 서비스를 하는 IP만 반환한다. 도메인에 연결된 IP들에서 서비스가 제대로 되고 있는지 헬스체크를 하고 정상적인 IP만 반환해주는 DNS다. 

 

DHCP는 IP를 동적으로 할당할 때 사용하는 프로토콜이다. IP 주소, *서브넷 마스크, DNS 정보를 따로 입력할 필요 없이 자동으로 할당 받는다. 사무실의 와이파이에 연결된 내 IP를 확인할 때 전에 확인했던 IP와 달라졌다면 DHCP를 사용하고 있는 것이다. 

 

*서브넷 마스크: 클래스리스 IP 주소 방식에서 네트워크 부분과 호스트 부분을 구분하기 위해 쓴다. 255부분이 네트워크 부분이고, 0부분이 호스트 부분이다.