LETO

리졸버

리졸버는 사용자를 대신해 DNS를 조회하고 그 답을 캐시해 두는 서버입니다. 변경이 언제 보이는지는 대부분 리졸버가 결정합니다.

작성

리졸버(resolver)는 사용자를 대신해 DNS 조회를 수행하고 그 결과를 일정 시간 캐시에 보관하는 서버입니다. 브라우저가 직접 전 세계 네임서버를 찾아다니는 것이 아니라, 리졸버에게 이름 하나를 묻고 최종 답만 받습니다. 도메인 설정을 바꿨을 때 "나는 바뀌었는데 다른 사람은 아직 안 바뀐다"는 상황이 생기는 이유도 리졸버마다 캐시 상태가 다르기 때문입니다.

스텁 리졸버와 재귀 리졸버

구분스텁 리졸버재귀 리졸버
위치PC, 스마트폰, 서버의 운영체제통신사 DNS, 사내 DNS, 공개 리졸버
하는 일질의를 재귀 리졸버에 넘기고 답을 받음루트부터 차례로 물어 최종 답을 만듦
캐시짧게 유지TTL 기준으로 유지. 영향 범위가 넓음
설정 위치네트워크 설정의 DNS 서버 주소운영 주체가 관리

PC에 입력하는 DNS 서버 주소는 "어느 재귀 리졸버에 물을지"를 지정하는 값입니다. 권한 네임서버를 지정하는 것이 아니므로, 도메인의 네임서버를 바꾸는 일과는 관계가 없습니다.

루트에서 시작하는 반복 질의

재귀 리졸버는 캐시에 답이 없으면 위에서부터 차례로 묻습니다. shop.example.co.kr을 조회하는 경우입니다.

  1. 루트 네임서버에 묻습니다. 루트는 .kr 네임서버 목록을 알려 줍니다.
  2. .kr 네임서버에 묻습니다. co.kr을 거쳐 example.co.kr의 네임서버 목록을 알려 줍니다.
  3. example.co.kr의 권한 네임서버에 묻습니다. 여기서 실제 A 레코드 값을 받습니다.
  4. 받은 값을 사용자에게 돌려주고, 동시에 각 단계의 응답을 TTL만큼 캐시에 보관합니다.

각 단계의 서버는 답 대신 "다음에 여기로 물어보라"는 안내를 줍니다. 이 방식을 반복 질의(iterative query)라고 하고, 전체를 대신 돌아 주는 쪽이 재귀(recursive) 리졸버입니다. 두 번째 조회부터는 캐시가 채워져 있어 마지막 단계만 수행하거나 아예 질의 없이 끝납니다.

캐시와 TTL

리졸버는 각 응답에 붙은 TTL만큼 그 값을 재사용합니다. 레코드를 고쳐도 이미 캐시된 리졸버는 남은 시간이 지나기 전까지 이전 값을 계속 답하며, 이 시간차가 DNS 전파로 불립니다. 값이 없다는 응답(NXDOMAIN)도 캐시 대상이라, 레코드를 만들기 전에 미리 조회해 두면 "없음"이 잠시 캐시될 수 있습니다. 그래서 변경 작업은 값을 먼저 넣고 확인하는 순서가 편합니다.

실무에서 알아둘 것

  • 지금의 정답을 확인하려면 캐시를 거치지 않고 권한 네임서버에 직접 물어봅니다. 조회 도구와 읽는 법은 DNS 조회 도구에 있습니다.
  • 사내 리졸버는 내부용 존을 따로 두는 경우가 많아, 외부에서는 정상인데 사무실에서만 옛 주소로 연결되는 일이 생깁니다. 반영이 안 될 때 점검 순서는 DNS 변경이 반영되지 않을 때를 참고하세요.
  • 네임서버 자체를 바꾸면 위임 정보의 캐시까지 걸려 반영이 더 오래 걸립니다. 절차는 네임서버 변경 방법에 정리되어 있습니다.

자주 묻는 질문

그 리졸버가 아직 이전 값을 캐시하지 않았다면 새 값을 바로 보게 됩니다. 다만 이는 내 PC에서만 빨라지는 것이고, 다른 사용자가 쓰는 리졸버의 캐시는 그대로 남아 있습니다. 전체 반영 시간을 줄이려면 변경 전에 TTL을 낮추는 방법밖에 없습니다.

각자 쓰는 리졸버의 캐시 상태가 다르기 때문입니다. 이전 값을 아직 들고 있는 리졸버는 만료될 때까지 같은 답을 반복합니다. 권한 네임서버에 직접 물어 보면 지금의 정답을 확인할 수 있습니다.

사내 리졸버의 캐시가 남아 있거나, 같은 이름을 내부용으로 따로 정의해 두었을 가능성이 큽니다. 전자는 캐시를 비우면 해소되고, 후자는 내부 존의 레코드를 같이 고쳐야 합니다. 네트워크 담당자에게 두 가지를 함께 확인해 달라고 요청하는 편이 빠릅니다.

관련 가이드