NestJS 강의를 들으면서 MongoDB로 클러스터를 띄워 작업하던 중 Error: querySrv ETIMEOUT 오류가 발생했다.

이전에도 같은 오류가 발생한 적이 있었는데, 그때는 클러스터를 완전히 삭제하고 다시 생성하니 오류가 해결되었는데 이번에는 클러스터를 삭제해도 문제가 해결되지 않았다.
그리고 MongoDB Compass와 MongoDB for VS Code Extension에서는 정상적으로 연결이 되는데 NestJS 서버를 구동시킬때 mongoose로 연결할 때만 작동이 되지 않았다.
MongoDB Atlas에서 Network Access 설정을 0.0.0.0/0으로 하여 모든 IP에 대해 접근을 허용했는데도 여전히 오류가 발생했다.
그래서 구글링을 해보니, 이 오류는 DNS 조회 중 타임아웃이 발생했음을 나타낸다고 한다.
다행히 스택 오버플로우에서 나와 같은 오류 메시지는 아니지만 Error: querySrv ENODATA 오류 해결 글을 찾았는데 여기서 나온 방법으로 해결할 수 있을 것 같았다.

🙋♂️ 번역) "어떤 이유에서인지 DNS 서버가 SRV 레코드를 반환하지 않았습니다. DNS 서버를 해당 레코드를 반환하는 서버로 변경한 것이 문제를 해결했습니다. (저는 문제를 해결하기 위해 https://use.opendns.com/을 사용했습니다.)"

🙋♂️ 번역) "이 답변이 채택된 답변이 되어야 합니다. 저는 업무 때문에 이동이 잦고, 사용한 Wi-Fi 네트워크 중 약 5-10%에서 이 문제가 발생합니다. DNS 공급자를 8.8.8.8(구글)로 변경하니 연결할 수 있었습니다. CloudFlare나 기타 다른 DNS 공급자도 사용할 수 있을 거라고 생각되지만, 제가 테스트해보지는 않았습니다."

🙋♂️ 번역) "저도 스타벅스에서 작업할 때 같은 문제가 발생했는데, 집에 가자마자 바로 연결되었습니다. 다른 Wi-Fi 연결을 시도해 보세요."
생각해보니 이전에 동일한 오류가 발생했던 때와 지금 모두 외부에서 핫스팟 환경에서 작업 중이었다.
그리고 스타벅스 Wifi에서도 같은 오류가 자주 발생하는 모양이다.

그래서 핫스팟의 DNS 서버를 8.8.8.8(구글 DNS)로 설정해 주었다.
그 결과 드디어 VSCode에서 mongoose로 MongoDB에 연결할 때 오류가 발생하지 않았다!!
이유는 아마도 핫스팟 네트워크의 DNS 서버가 특정 도메인 조회를 원활하게 처리하지 못했던 것 같다.
MongoDB Atlas의 경우 mongodb+srv 접두어를 사용할 때 DNS 조회가 필요한데, Atlas 클러스터는 SRV 레코드를 이용해 여러 서버의 IP 주소를 반환한다.
그런데 핫스팟 네트워크의 DNS가 이를 제대로 처리하지 못해서 querySrv ETIMEOUT 오류가 발생했던 것으로 보인다.
고칠땐 별 것 아니었지만 찾느라 오래 고생해서 다들 나처럼 고생을 하지 않길 바란다..