[CS] DNS란?

이준기·2022년 7월 31일
0

DNS란?


모든 인터넷상의 페이지는 서버를 가지고 있는데, 그 서버는 각자 IP주소를 가지게 된다.

이때 항상 IP주소를 외우고 다닐수는 없기에, 도메인 이름을 통해서 인터넷 페이지를 접속할 수 있게 해주는데 이 도메인 이름을 IP주소로 변환시켜주는 서버로서 이때 행해지는 요청을 “쿼리"라고 한다.

DNS 라운드로빈


DNS 라운드로빈은 위 개념에서 도메인이름-IP주소가 1:1 매칭되지 않고, 실제 IP주소 여러개를 등록해 DNS 쿼리가 올때마다 그 주소를 한개씩 돌아가면서 혹은 랜덤으로 응답해주는 방식이다.

이론적으로는 다수의 사용자가 분산된 서버들의 여러 아이피로 나눠지게 되면서 서버의 부하가 분산될 수 있는 방식이다.

그러나 현실은 그렇지 않았습니다

DNS는 캐싱 주기 TTL(Time To Live)이 존재한다. 즉, 개인의 클라이언트는 DNS를 캐싱해서 들고있고 그 TTL동안은 도메인이름-IP 매핑 정보를 들고있게 된다. 게다가 클라이언트만 캐싱을 하는게 아니라 ISP(Internet Service Provider)역시 DNS 쿼리 정보를 캐싱해서 들고있게 된다. DNS구조상 DNS의 원본 네임서버까지 도달하지 않더라도 그 경로상 어딘가에서 결과를 찾으면(recursively) 돌려받게 된다.

게다가 DNS 라운드로빈은 서버의 Health Check등을 하게끔 설계되어있지 않기에, 그 서버가 살아있든 죽어있든 그냥 반환을 하게 된다. 이 단점을 극복하고자 AWS의 경우 Route53에서 자체적으로 Health Check 를 지원하는 형태로 서비스를 제공하고 있다고 한다...

그럼 어떻게 써야할까?

무지성 TTL낮추기

일단 무지성으로 TTL을 낮게 잡아서(약 30초대) 무조건 DNS에서 쿼리를 긁어서 접속하게끔 만들면 어느정도 위 혜택을 볼 수 있다. 물론 DNS도 UDP를 사용하는 엄연한 Application Layer의 패킷이기에 쿼리 시간이 어느정도 필요하고, 원본 네임서버가 아니라 캐싱된 ISP의 네임서버에서 결과를 찾을 경우 위 단락의 Health Check 기능등도 무용지물이기에 TTL에 대해서도 적절한 트레이드오프가 필요하다.

GSLB(Global Server Load Balancing)

애초에 실시간 분산은 LB가 맡게 하고 GSLB(Global Server Load Balancing)을 통해 DNS 라운드로빈은 LB의 아이피를 응답해주는 방식이라고 한다. HA(High Availability) 목적도 만족해준다고 한다.

Reference


https://github.com/JaeYeopHan/Interview_Question_for_Beginner/tree/master/Network

https://ckddn9496.tistory.com/33

profile
Hongik CE

0개의 댓글