얼마전에 외주작업을 진행하던 중 갑작스럽게 API 서버가 먹통이 되는 상황이 발생했다.
오전까지는 멀쩡히 동작했고, 따로 서버를 업데이트하거나 건드린 적이 없는데 암만 찾아봐도 원인을 알 수 없었다.
이것저것 테스트 해보면서 원인을 찾을 때 고객사 담당자로부터 연락을 받았다.
> 저희 직원 중 한 분이 랜딩페이지를 위해서 네임서버를 변경했는데, 혹시 이게 문제의 원인일 수도 있을까요?
이 짤 하나로 상황 설명이 가능할 정도였다. 당연히 내가 짠 소스코드나 AWS 인스턴스에 문제가 생겼을 거라고 생각했는데, DNS를 전혀 생각 안하고 있었다.
그래서 생각난 김에 DNS는 뭔지, 네임서버는 뭔지, 그리고 이들의 관계는 어떤건지 정리해보려고 한다.
우리가 원하는 웹 사이트를 접속할 때 어떤 방법을 쓸까? 보통은 아래와 같이 웹 사이트의 이름을 브라우저 검색창에 작성해서 사이트에 접속할 것이다.
https://www.naver.com
네이버 홈페이지
이름만큼 사람이 기억하기에 쉬운 것이 없다. 구글이나 네이버, 다음 등등 포털 사이트의 이름만 기억해두면 해당 서비스로 쉽게 접속할 수 있다.
그런데 컴퓨터의 입장에서 이런 웹 페이지 주소는 실제로 어떤 서버로 요청을 보내야 하는지 알 수가 없다. (네트워크 이론을 설명하는 건 아니라서 자세한 내용은 넘어간다)
컴퓨터의 입장에서는 어떤 서버로 요청을 보내려면 해당 서버의 고유한 주소를 알아야 하고, 그건 위와 같은 문자열이 아닌 숫자로 된 IP 주소다!
위에서 본 www.naver.com으로 시작하는 주소를 도메인이라고 부르고, 이는 IP 주소를 대신해 사람이 쉽게 사용할 수 있는 주소를 의미힌다.
이 도메인 주소는 절대적인 값이 아니다. 어디까지나 IP 주소가 절댓 주소값이고 도메인은 임시 주소값이며, www.naver.com 이라는 도메인이 연결된 웹 페이지가 네이버가 아니라 다음이 될 수도 있다.
물론 현실적으로 대형 포털사이트가 망해서 갑자기 도메인이 바뀔 일은 거의 없다
그래서 DNS가 하는 역할은 호스트의 도메인 이름을 IP 주소로 변환하거나, 반대의 경우를 수행하도록 개발된 시스템이다.
이 때 전 세계적으로 봤을 때 도메인이 너무나 많기 때문에, DNS는 서버 종류를 계층화해서 단계적으로 처리한다.
위와 같이 웹 사이트를 요청했을 때 총 3단계의 DNS를 거쳐 실제 웹 서버로 통신하는 것을 알 수 있다.
계층화된 DNS 서버는 각각의 역할이 있다.
내가 헷갈렸던 부분은 여기였다. DNS와 네임 서버의 차이는 대체 뭘까
결론부터 말하자면 DNS 서버를 네임 서버라고 부른다. 즉 네임 서버는 DNS라는 시스템 안에 포함된 하나의 역할이다.
그리고 보통 네임 서버라고 말하면 도메인/호스팅 업체의 네임 서버를 의미하기 때문에 위 사진에서 3번째 계층에 해당하는 곳이다.
서론에서 애기했던 문제가 발생한 것도 이 네임 서버 설정을 갑자기 변경했기 때문에, SSL 인증이 오류나고 IP와 도메인이 제대로 이어지지 못한 것이다.
원래는 기존 네임 서버에 등록된 IP 주소로 API 서버가 연동된건데, 네임 서버가 갑자기 바뀌다보니
이런 식으로 전혀 다른 IP 주소가 연결된 것이다!
그래서 결국 변경된 네임 서버에서 추가로 IP 주소를 연결하는 것으로 해결되었다.
DNS와 네임 서버에 대한 개념 정리만 잘 되었어도 먼저 살펴봤을텐데, 이 부분은 전혀 의심 안하고 서버가 다운되는걸까 하고 의심하기만 했다.
역시 기본이 가장 중요하다고 했던가, 네트워크나 인프라에 대한 개념 정리도 틈틈이 해둬야겠다.