TTL

TTL은 DNS 레코드 하나의 응답을 리졸버가 캐시해도 되는 시간을 초 단위로 지정한 값입니다. 변경이 사용자에게 반영되는 속도를 결정합니다.

작성

TTL(Time To Live)은 DNS 레코드 하나에 붙는 값으로, 그 응답을 받은 리졸버가 다시 묻지 않고 캐시에 보관해도 되는 시간을 초 단위로 지정합니다. TTL이 3600이면 한 번 조회한 리졸버는 최대 1시간 동안 같은 답을 그대로 재사용합니다. 따라서 TTL은 성능을 위한 값인 동시에, 레코드를 바꿨을 때 새 값이 사용자에게 도달하는 속도를 결정하는 값입니다.

누가 캐시하는가

TTL을 지키는 주체는 하나가 아닙니다.

계층캐시 주체특징
재귀 리졸버통신사 DNS, 사내 DNS, 공개 리졸버TTL을 대체로 정확히 지킴. 영향이 가장 큼
운영체제로컬 DNS 캐시짧게 유지. 재부팅이나 캐시 비우기로 해소
브라우저자체 캐시TTL과 무관하게 수십 초에서 몇 분 유지하는 경우가 있음
애플리케이션런타임 DNS 캐시일부 런타임은 TTL을 무시하고 프로세스가 살아 있는 동안 주소를 고정

권한 네임서버의 값을 바꿔도 위 캐시가 만료되기 전까지는 이전 값이 계속 쓰입니다. 이 시간차가 DNS 전파로 불리는 현상입니다.

값을 어떻게 정하는가

  • 자주 바뀌지 않는 레코드(회사 홈페이지 A 레코드, 도메인 인증용 TXT): 3600초에서 86400초. 질의가 줄어 안정적입니다.
  • 곧 바꿀 예정인 레코드: 300초에서 600초. 되돌리기가 빨라집니다.
  • MX 레코드: 메일은 재시도 구조가 있어 급할 이유가 적습니다. 3600초 이상을 권합니다.
  • 상태 확인으로 대상이 자동으로 바뀌는 레코드: 60초 안팎까지 낮추기도 하지만, 리졸버에 따라 최소값을 강제하는 곳이 있어 60초 미만은 의도대로 동작하지 않을 수 있습니다.

레코드 종류별 작성법은 DNS 레코드 종류에서 다룹니다.

변경 전에 TTL을 낮추는 방법

서버 IP나 메일 서비스를 옮기기로 정했다면 순서를 지키는 것만으로 중단 시간을 크게 줄일 수 있습니다.

  1. 변경 하루 이상 전에 TTL을 낮춘다

    옮길 레코드의 TTL만 300초로 바꿉니다. 값 자체는 그대로 둡니다.

  2. 기존 TTL만큼 기다린다

    예전 값이 86400초였다면 하루를 기다려야 모든 리졸버가 새 TTL을 알게 됩니다.

  3. 실제 값을 변경한다

    이 시점부터는 대부분의 리졸버가 5분 안에 새 값을 가져옵니다.

  4. 안정되면 TTL을 원래대로 올린다

    하루 정도 문제가 없으면 3600초 이상으로 되돌립니다.

실무에서 알아둘 것

  • 네임서버 자체를 바꿀 때는 레코드 TTL이 아니라 레지스트리가 위임 정보에 붙이는 TTL이 함께 걸립니다. 이 값은 확장자마다 정해져 있어 등록자가 낮출 수 없습니다. 절차는 네임서버 변경 방법을 참고하세요.
  • 전환 기간에는 기존 서버를 바로 내리지 말고, TTL이 넘긴 뒤에도 얼마간 함께 열어 둡니다. 자세한 순서는 무중단 이전 가이드에 있습니다.
  • 현재 남은 캐시 시간은 dig의 응답에서 확인할 수 있습니다. 같은 질의를 반복하면 숫자가 줄어드는 것이 캐시된 값이라는 뜻입니다.
dig +noall +answer example.co.kr A

자주 묻는 질문

당분간 바꿀 일이 없는 레코드는 3600초에서 86400초 사이면 충분합니다. 며칠 안에 바꿀 예정이라면 300초까지 낮춰 두었다가 변경이 끝난 뒤 원래 값으로 되돌리는 방식이 안전합니다.

리졸버가 캐시를 자주 버리므로 권한 네임서버로 오는 질의가 늘고, 네임서버가 응답하지 않을 때 장애가 더 빨리 드러납니다. 상용 DNS 호스팅에서 300초 정도는 부담되는 수준이 아니지만, 상시로 낮게 두기보다 변경 기간에만 낮추는 편이 낫습니다.

낮춘 TTL 자체가 퍼지는 데도 기존 TTL만큼 시간이 걸리기 때문입니다. 예전 값이 86400초였다면 모든 리졸버가 새 TTL을 인식하기까지 최대 하루가 필요합니다. 그래서 TTL은 실제 변경 하루 이상 앞서 낮춰 둡니다.

관련 가이드