Mac에서 DNS 캐시 지우는 방법
Mac에서 DNS 캐시를 지우려면 응용 프로그램 › 유틸리티에서 터미널을 열고 다음을 실행합니다.
sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder
요청하면 Mac 로그인 암호를 입력합니다. 성공해도 아무것도 출력되지 않습니다. Mac을 재시동해도 캐시가 지워집니다. Apple의 DNS 캐시 문서는 Mac을 재시동하면 캐시된 정보를 갱신할 수 있다고 설명합니다.
이 Apple 문서는 보관된 문서라 더 이상 업데이트되지 않습니다. 가장 최근 항목은 OS X Yosemite 10.10.4 이상용 sudo killall -HUP mDNSResponder이고, dscacheutil -flushcache는 Snow Leopard용으로 나와 있는 명령입니다. Apple이 더 새로운 버전을 내놓지 않았기 때문에 위 명령줄은 둘 다 실행합니다. killall 부분은 Apple이 최신 릴리스용으로 안내하는 명령이고, dscacheutil -flushcache는 매뉴얼 페이지(man dscacheutil)에 따르면 디렉터리 서비스 캐시를 비우는 명령입니다. 같은 매뉴얼은 극단적인 경우에만 쓰라고 하는데, 오래된 DNS 응답이 바로 그런 경우입니다. Mole Mac에는 DNS 캐시 비우기 기능이 없으며, 이 작업은 터미널에서 합니다.
DNS 캐시란
앱이 example.com에 연결하려면 macOS는 먼저 그 이름을 IP 주소로 바꿔야 합니다. Mac에서는 이 조회를 mDNSResponder가 맡습니다. 매뉴얼 페이지(man mDNSResponder)는 이를 다른 프로세스를 대신해 DNS 질의를 수행하고 응답을 캐시해 두는 데몬이라고 설명합니다.
캐시 덕분에 같은 조회를 반복할 때마다 왕복 요청을 하지 않아도 됩니다. 각 응답은 도메인의 DNS 레코드가 허용하는 시간 동안 보관된 뒤 다시 가져옵니다. 대부분은 아무도 모르게 잘 작동합니다. 문제는 캐시된 응답이 만료되기 전에 낡아 버릴 때 생깁니다. 사이트가 새 서버로 옮겼거나, DNS 서버를 바꿨거나, 한 번 실패한 조회 결과가 계속 재사용되는 경우입니다.
killall -HUP mDNSResponder의 -HUP는 killall이 보낼 신호를 정합니다. 이 옵션이 없으면 killall은 TERM을 보냅니다(man killall). Apple은 HUP 형태를 DNS 캐시를 재설정하는 방법으로 안내하므로, 이 플래그를 빼거나 -9로 바꾸지 마세요.
DNS 캐시 비우기가 도움이 되는 경우
| 상황 | 비우기가 도움이 되는 이유 |
|---|---|
| 웹사이트나 서버가 옮겨 갔는데 Mac이 여전히 예전 주소로 접속함 | 캐시된 응답이 아직 만료되지 않음 |
| 네트워크 설정에서 DNS 서버를 바꿈 | 이전 서버에서 받은 응답이 아직 캐시에 남아 있음 |
/etc/hosts를 수정했는데 반영되지 않음 |
hosts 매뉴얼 페이지에 따르면 이 파일은 mDNSResponder가 읽는데, 이전 응답을 아직 들고 있을 수 있음 |
| 1분 전에 이름 확인에 실패한 사이트가 다른 기기에서는 열리는데 계속 실패함 | 실패한 조회 결과가 캐시되었을 수 있음 |
도움이 되지 않는 경우
캐시 비우기는 Mac 자체의 확인자 캐시만 지웁니다. 흔한 구성 중 몇 가지에서는 아무 의미가 없습니다.
- 프록시. 트래픽이 HTTP나 SOCKS 프록시를 거친다면 프록시가 이름을 직접 확인하는 경우가 많습니다. 현재 시스템 프록시 구성을 보여 주는
scutil --proxy로 확인하세요. - VPN. VPN은 자체 DNS 서버를 설치하거나 일부 도메인만 그 서버로 보낼 수 있습니다.
scutil --dns는 사용 중인 모든 확인자를 보여 주며, 도메인이 지정된 보조 확인자는 그 도메인에만 쓰입니다. 회사 도메인만 실패한다면 VPN의 DNS를 살펴봐야 합니다. - 브라우저 자체 캐시. 브라우저는 짧게 유지되는 자체 DNS 결과를 갖고 있고 열린 연결을 재사용하기도 합니다. 캐시를 비운 뒤에는 탭만 새로 고치지 말고 브라우저를 완전히 종료했다가 다시 여세요.
- 상위 캐시. 라우터와 DNS 제공업체도 응답을 캐시합니다. Mac의 캐시를 비운다고 그쪽이 새 레코드를 더 빨리 가져오지는 않습니다.
- 사이트가 실제로 다운되었거나 사용 중인 네트워크에서 차단된 경우. 다른 네트워크에 있는 다른 기기에서도 실패한다면 원인은 Mac의 DNS가 아닙니다.
페이지가 열리지 않는 것이 아니라 느린 것이라면 DNS 캐시가 병목인 경우는 드뭅니다. 더 그럴듯한 원인은 Mac WiFi가 가끔 끊길 때와 어떤 앱이 네트워크를 쓰는지 찾기에서 다룹니다.
Mac이 실제로 어떻게 확인하는지 보기
앱이 받는 응답을 보려면 시스템 확인자를 사용합니다.
dscacheutil -q host -a name example.com
dscacheutil 매뉴얼 페이지에 따르면 -q는 표준 호출로 질의를 실행하며, 캐시된 결과를 돌려주거나 실시간 데이터를 가져옵니다.
그다음 DNS 서버에 직접 물어봅니다.
dig example.com
dig는 macOS 확인자를 거치지 않습니다. 매뉴얼 페이지에 따르면 /etc/resolv.conf에 나열된 서버를 쓰는데, macOS의 이 파일에는 시스템의 대부분 프로세스가 쓰는 DNS 확인에는 이 파일을 참조하지 않는다는 안내가 적혀 있습니다. dig는 새 주소를, dscacheutil은 예전 주소를 돌려준다면 차이는 Mac의 캐시나 확인자 구성에 있고, 캐시를 비우면 해결될 것입니다. 둘 다 예전 주소를 돌려준다면 상위에서 아직 레코드가 바뀌지 않은 것입니다.
Mac이 어떤 DNS 서버를 쓰는지 보려면 다음을 실행합니다.
scutil --dns
직접 지정한 서버는 시스템 설정 › 네트워크에 있습니다. 네트워크 서비스를 선택하고 세부사항, DNS를 차례로 클릭합니다(Apple).
캐시를 탓하기 전에 /etc/hosts 확인하기
/etc/hosts는 여기에 적힌 이름에 대해 DNS보다 우선합니다. 개발 도구, 광고 차단기, 오래된 튜토리얼이 이 파일에 줄을 추가해 놓고 그대로 남겨 두기도 합니다. 내용을 보려면 다음을 실행합니다.
cat /etc/hosts
정상적인 파일에는 localhost에 관한 몇 줄과 #으로 시작하는 주석만 있습니다. 문제가 되는 도메인이 보인다면 그 줄 때문에 그렇게 확인되고 있는 것입니다. sudo로 실행한 편집기로 그 줄만 고치고, 원본 사본을 남겨 둔 다음 캐시를 비우세요. localhost 항목은 지우지 마세요.
결과 확인하기
- 캐시 비우기 명령을 실행합니다.
- 문제가 된 도메인으로
dscacheutil -q host -a name example.com을 다시 실행해 주소를 확인합니다. - 문제가 있던 브라우저나 앱을 종료했다가 다시 엽니다.
- 그래도 실패하면
dig,scutil --dns,scutil --proxy결과와 비교해 어느 계층이 응답하고 있는지 확인합니다.
하지 말아야 할 것
- DNS 캐시를 정기적으로, 또는 속도를 올리려고 비우지 마세요. 채워진 캐시가 조회를 빠르게 하고, 빈 캐시는 다음 몇 번의 조회를 느리게 합니다.
/etc/hosts를 삭제하거나 권한을 바꾸지 마세요.- VPN이나 관리 프로파일을 쓰는 회사나 학교 Mac에서 관리자에게 확인하지 않고 DNS 서버를 바꾸지 마세요. 내부 이름이 확인되지 않을 수 있습니다.
- "DNS를 테스트하려고" 프록시나 VPN 설정을 바꾸지 마세요. 먼저 어느 계층이 응답하는지 알아내세요.
자주 묻는 질문
Mac에서 DNS 캐시는 어떻게 지우나요?
터미널에서 sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder를 실행하고 암호를 입력합니다. Mac을 재시동해도 지워집니다.
최신 macOS에서 DNS를 비우는 명령은 무엇인가요?
Apple의 보관된 문서는 OS X 10.10.4 이상용으로 sudo killall -HUP mDNSResponder를 안내하며, Apple은 더 새로운 명령을 발표하지 않았습니다. 그 앞에 sudo dscacheutil -flushcache도 함께 실행하는 경우가 많은데, 이 명령은 캐시된 데이터만 지웁니다.
Mac에서 DNS를 비우면 브라우저 캐시도 지워지나요?
아닙니다. macOS 확인자 캐시만 지웁니다. 브라우저가 자체 DNS 결과나 열린 연결을 재사용하지 않도록 브라우저를 종료했다가 다시 여세요.
캐시를 비웠는데도 사이트가 왜 예전 주소로 가나요?
/etc/hosts, 프록시나 VPN을 확인하고, dig에 새 주소가 나오는지 보세요. 상위에서 DNS 레코드가 아직 바뀌지 않았다면 로컬에서 캐시를 비워도 소용이 없습니다.
Mole로 DNS 캐시를 비울 수 있나요?
아니요. Mole Mac에는 DNS 캐시 비우기 기능이 없습니다. 위의 터미널 명령을 실행하거나 Mac을 재시동하세요.