LETO

MX 레코드

MX 레코드는 도메인으로 오는 메일을 어느 서버가 받을지 지정하는 DNS 레코드입니다. 우선순위 숫자와 메일 서버 이름을 함께 적습니다.

작성

MX 레코드(Mail Exchanger record)는 어떤 도메인으로 오는 메일을 어느 서버가 받을지 지정하는 DNS 레코드입니다. 다른 메일 서버가 hello@example.co.kr 로 메일을 보낼 때 가장 먼저 하는 일이 example.co.kr의 MX 레코드 조회이고, 그 답에 적힌 서버 이름으로 접속해 메일을 전달합니다. 웹사이트 주소를 가리키는 A 레코드와는 완전히 별개여서, 홈페이지와 메일을 서로 다른 업체에서 운영할 수 있습니다.

우선순위 숫자

MX 레코드는 값이 두 부분입니다. 앞의 숫자를 preference 또는 우선순위라고 하고, 뒤가 메일 서버의 호스트 이름입니다.

이름우선순위메일 서버
example.co.kr1mx1.mailservice.example
example.co.kr5mx2.mailservice.example
example.co.kr10mx-backup.mailservice.example

보내는 서버는 숫자가 작은 쪽부터 시도합니다. 1번이 응답하지 않으면 5번, 그다음 10번으로 내려갑니다. 숫자가 같으면 무작위로 골라 분산합니다. 관례적으로 1, 5, 10처럼 간격을 두어 나중에 중간 값을 끼워 넣을 여지를 남깁니다. 메일 서비스 제공자가 알려 준 숫자와 서버 이름을 그대로 옮겨 적어야 하고, 임의로 순서를 바꾸면 의도와 다른 서버가 주 수신 서버가 됩니다.

여러 개를 두는 이유

MX를 두 개 이상 두는 것은 성능보다 가용성을 위한 장치입니다. 주 서버가 점검이나 장애로 응답하지 않아도 보조 서버가 메일을 받아 두었다가 주 서버가 살아나면 전달합니다. 사실 메일은 재시도 구조가 있어서 MX가 하나뿐이라도 발신 서버가 보통 며칠간 주기적으로 재시도하므로 곧바로 유실되지는 않습니다. 다만 그동안 수신이 지연되고, 재시도 기한을 넘기면 반송됩니다.

메일 서비스를 쓰는 경우 제공자가 이미 여러 개의 MX를 안내합니다. 안내받은 목록을 빠짐없이 넣어야 하며, 주 서버 하나만 넣고 나머지를 생략하면 장애 시 대비가 사라집니다.

CNAME을 가리키면 안 된다

MX 레코드의 값에는 최종적으로 주소를 가진 호스트 이름을 적어야 합니다. 그 이름이 다시 CNAME으로 다른 이름을 가리키고 있으면 표준 위반이고, 엄격하게 구현된 발신 서버는 배달을 포기하거나 경고를 남깁니다. 또한 도메인 자체에 MX와 CNAME을 함께 둘 수도 없습니다. 루트 이름에 CNAME이 있으면 그 이름의 다른 레코드는 존재할 수 없다는 DNS 규칙 때문입니다.

이 때문에 메일 제공자는 보통 CNAME이 아닌 실제 호스트 이름을 MX 값으로 안내합니다. 제공자 안내 화면에 CNAME으로 보이는 값이 있다면 그것은 DKIM이나 소유 확인용 레코드일 가능성이 높으니 종류를 다시 확인하세요.

MX가 없거나 틀렸을 때의 증상

  • 보낸 사람에게 "사서함을 찾을 수 없다", "호스트를 찾을 수 없다"는 반송 메일이 돌아옵니다.
  • 내부에서 보낸 메일은 도착하는데 외부에서 보낸 메일만 안 옵니다. 내부 서버가 MX를 거치지 않고 직접 배달하기 때문입니다.
  • MX를 바꾼 직후 일부 발신자의 메일만 예전 서버로 갑니다. 레코드의 TTL만큼 예전 값이 캐시에 남아 있어 생기는 현상입니다.

설정 방법은 MX 레코드 설정, 증상별 점검 순서는 메일이 오지 않을 때에서 다룹니다. 수신 자체와 별개로 발신 인증을 맞추려면 SPF, DKIM, DMARC 설정도 함께 보세요.

자주 묻는 질문

이미 예전 서버에 배달된 메일은 그대로 그 서버에 남습니다. MX를 바꾸는 순간부터 새로 오는 메일만 새 서버로 향하므로, 캐시가 만료될 때까지는 양쪽으로 나뉘어 들어옵니다. 그래서 전환 기간에는 예전 서버의 수신함도 며칠 더 열어 둡니다.

받지 못하는 것이 보통입니다. MX가 없으면 보내는 쪽이 같은 이름의 A 레코드를 메일 서버로 간주하는 구현이 있어 엉뚱한 웹 서버로 배달을 시도하고, 그 서버가 25번 포트를 열지 않았다면 발신자에게 반송 메일이 갑니다.

네, 숫자가 작은 서버를 먼저 시도합니다. 0과 10이 있으면 0이 주 서버이고, 10은 0이 응답하지 않을 때만 쓰입니다. 숫자 자체의 크기는 의미가 없고 서로의 대소 관계만 봅니다.

관련 가이드