Gmail과 Naver Mail이 이메일 속도에서 차이가 나는 이유는?
개발자 취업준비 오픈카톡방에 속해있다.
발표가 나면 굉장히 빠르게 '오 OO 발표났어요!'라고 소식이 공유된다. 만약 이 발표가 이메일을 통할 경우 꼭 나오는 말이 '어... 전 아직 안왔어요' 였다. 그 이유가 궁금했다. (시간차가 짧으면 ISP 차이라고 생각했을텐데 시간차가 수 분이 나는 경우도 있어서 궁금했다)
나는 이 현상의 원인을 '서버 위치'라고 생각했다.
이 가정의 발단은 '메일을 늦게 받는 분이 대게 GMail을 사용한다는 것'이다.
우선 Email을 보내면 어떤 일이 일어나는지 살펴보자.
우리는 이메일을 쓸 때 UserName @ HostName. TLD 이런 식으로 쓴다. 예를 들면 abcd@gmail.com abcd@naver.com 이런 식이다.
이메일을 쓴 후 Send 버튼을 누르면 SMTP(Simple Mail Transfer Protocol)를 통해 메일이 전송된다. SMTP는 메일을 보낼 때 사용하는 프로토콜이다.
그런데 애석하게도 SMTP는 HostName을 해석할 수 있는 능력이 없다. 즉 abcd@gmail.com이라는 주소를 보고 '어디로 보내야하는 지 모른다.'
그래서 SMTP는 DNS 서버에 도움을 요청한다 .(DNS Lookup)
"나 google.com으로 메일을 보내고 싶은데 ㅠㅠ 어디로 보내야 해? DNS 서버야 도와줘!"
DNS 서버가 해당 도메인의 IP 주소를 찾아서 return 한다. 위의 예시에서는 google.com의 MX(Mail Exchange) record의 주소를 return 한다. 이 주소는 nslookup -query=mx google.com 을 통해 알 수 있다. 일반적인 구글 웹사이트의 IP가 아니라 Mail Exchanger의 주소를 찾는 것이기 때문에 IP나 DNS NS가 다를 수도 있다.
메일 받는 담당자는 따로 있다는 의미다.
DNS는 이 IP 정보를 SMTP에 돌려준다. 그러면 abcd@gmail.com 은 abcd @ XXX.XXX.XXX.XXX(hostname이 IP주소로 바뀐다.) 이 되고 SMTP는 메일을 송신한다.
송신할 때는 TCP Connection 과정을 거치기 때문에 다른 패킷을 송신할 때와 동일하다.
이제 가설을 검증해보자.
가설 : 구글의 메일 서버가 국내 메일서버보다 지리적으로 멀리있기 때문에 메일도 늦게온다.
이를 증명하기 위해 google의 메일 서버에 Ping을 보냈다.
대강 57ms가 걸린다. 네이버는 어떨까?
네이버의 Mail Exchanger는 내가 접근할 수 없다...
시간이 아무리 흘러도 변화가 없고 100% Packet Loss다. 보통 이런 경우는 Security 이슈이다. AWS로 따지면 Security Group의 문제다. Ping Flood DDos Attack을 막기 위해 Port 80을 제외한 곳으로부터의 접근을 원천 차단하는 경우가 있다.
이대로 포기할 수는 없으므로 Mail Exchanger가 아니라 웹으로 접근가능한 google.com과 naver.com의 속도 차이를 보자.
google.com의 경우 무슨 이유인지 몰라도 Mail Exchanger의 절반보다 살짝 오래 걸렸다. 약 36ms.
그리고... Naver는 아예 ping 자체가 불가능하다. Naver뿐만 아니라 Daum, Kakao, 배민 다 마찬가지다. 그렇다고 이대로 포기할 수는 없다!!
dig 도메인 주소 +nssearch
를 활용한다.
naver는 총 3, 5, 8ms 정도가 걸렸다.
google은 56, 81, 90, 153ms 가 걸렸다.
엄청난 속도차이가 난다.
물론 그 단위가 ms이기 때문에 체감상 거의 차이가 없다고 볼 수 있지만, 만
약 메일을 보내야할 대상자가 많다면 그 차이는 더 벌어질 것이고 유의미한 UX 차이를 발생시킬 수 있다. 왜냐하면 중간 경로에 오래 있을수록 Loss가 발생할 확률이 높기 때문이다. Loss가 발생하면 TCP 환경에서는 패킷을 재전송한다. 이 모든게 Overhead로 작용하고 이 Overhead가 매번 중첩되면 굉장히 커질 수 있기 때문이다. 그 외에도 다양한 요인이 작용할 수 있다.(그 어떤 이유라도 패킷이 이동 공간에 오래있는 건 좋은 일이 아니다)
뭔가 아쉬운 느낌이 든다. 마지막으로 가벼운 실험을 한번 더 해보고 마무리하려한다. 실제로 느린지 테스트해보고 싶었다.
Gmail -> Naver 는 41초 정도 걸린다.
Naver -> Gmail은 약 5초 정도 걸린다.
Gmail -> Gmail은 약 1초 정도 걸린다.
Naver -> Naver는 약 1초 정도 걸린다.
Gmail -> Naver만 이렇게 오래 걸리는 까닭이 굉장히 궁금하다...