← 인프라·격리

메일 후보 넷을 비교하다 폐지 공지 한 줄에 비교표를 버렸다

개인 도메인 메일을 무료로 구성할 후보 넷을 비교하던 중 발신 대행 폐지 고지가 나와 후보 셋의 전제가 사라졌고, 수신 레코드가 하나뿐이라 남은 선택이 양자택일이 된 기록

목차
  1. 문제
  2. 비교표는 후보 넷으로 시작했다
  3. 폐지 고지가 비교표를 폐기했다
  4. 레코드가 하나면 선택은 양자택일이 된다
  5. 이틀 뒤에 발신이 붙었다
  6. 정책 레코드는 완화 단계로 남겼다
  7. 결론
  8. 한계·재검토 트리거

개인 도메인 메일을 무료로 구성할 후보 넷을 놓고 비교표를 만들었다.
표를 다 채우기 전에 메일 제공자의 폐지 고지 한 줄이 나왔고, 후보 셋이 딛고 서 있던 전제가 통째로 사라졌다.
그 뒤 결정은 양자택일 하나로 좁혀졌다.

문제

조사부터 했다.
구 대표 주소가 공개 표면에 얼마나 남아 있는지 전수로 훑었다.
살아 있는 평문 노출은 홈 화면의 구조화 데이터(JSON-LD) 한 곳뿐이었고, 나머지 세 곳의 메일 링크는 Cloudflare의 이메일 난독화가 이미 가리고 있었다.
고쳐야 할 소스 지점은 여섯 개였다. 세 수치 모두 2026-08-08 전수 조사 시점의 값이다.
규모만 보면 반나절 작업이다.

그런데 여섯 지점을 고치려면 먼저 정해야 하는 것이 있었다.
바꿔 넣을 주소가 어떤 구조 위에 올라가는가.
도메인으로 메일을 받고 보내는 방법은 여러 가지이고, 무료 조건을 걸어도 하나로 좁혀지지 않는다.
노출 정리는 그 구조가 정해져야 시작되는 후행 작업이었다.

비교표는 후보 넷으로 시작했다

무료 구성을 전제로 후보를 훑었고, 기각 사유가 기록으로 남은 것이 넷이다.
넷은 같은 일을 하지 않는다. 어떤 것은 발신만 대행하고 어떤 것은 수신과 발신을 다 가진 메일박스다.
이 차이가 나중에 결정을 가르는데, 표를 만들던 시점의 기준은 무료로 되는가 하나였다.
아래 표의 기각 사유 중 둘은 그 기준에서 나오지 않았다.

후보맡는 범위기각 사유
Brevo 무료발신 대행전수조사 단계에서 먼저 탈락. 이후 비교는 나머지 셋으로 좁혀졌다
SMTP2GO + Gmail 발신 대행발신 대행 + 기존 계정을 프론트로폐지 고지의 직접 대상이 됐다
Zoho Forever Free수신과 발신을 모두 가진 메일박스수신 레코드를 차지해 채택안과 상호배타
유료 서비스수신과 발신추가 비용을 쓰지 않는 것이 조사의 전제였다

폐지 고지가 비교표를 폐기했다

조사 도중에 나온 것이 Google의 공식 고지였다.
2027년 1월에 서드파티 서버를 경유하는 Gmail 발신 대행(send-as)을 폐지한다는 내용이다.
폐지 시점은 고지가 명시한 값이고 당대 기록에서 그대로 옮겼다.

그 고지가 릴레이 후보들이 딛고 서 있던 전제를 무효로 만들었다.
"Gmail을 프론트에 두고 커스텀 도메인으로 발신한다"는 구성 자체가 그 기능 위에 서 있었기 때문이다.
릴레이를 어느 것으로 고를지 따지고 있었는데, 릴레이가 물어다 준 발신 권한을 받아 줄 프론트가 시한부였다.
어느 릴레이가 더 나은가는 이때부터 답할 가치가 없는 질문이 됐다.

고지는 후보를 훑는 전수조사에서 딸려 나왔고, 비교표에는 그 줄이 들어갈 열이 없었다.
노출 규모도 결정에 아무 영향을 주지 못했다.
평문이 한 곳이든 훨씬 많든 고쳐 넣을 주소의 구조가 정해지지 않으면 손을 댈 수 없고, 구조를 결정한 것은 그 구조의 수명이었다.
외부 의존성의 수명은 비교표를 통째로 폐기할 수 있는 조건이다.

레코드가 하나면 선택은 양자택일이 된다

도메인이 메일을 어디서 받을지는 MX(메일 수신 서버를 지정하는 DNS 레코드) 하나가 정하고, 둘을 동시에 가리키게 만드는 방법은 없다.
그래서 수신 라우팅 서비스와 메일박스 서비스는 서로를 밀어냈다.
둘 다 써 보고 나중에 고르는 경로가 애초에 없다.
이 제약이 후보 표를 다시 읽게 만들었다.
발신만 대행하는 후보와 수신까지 가져가는 후보를 한 표에 나란히 놓고 있었는데, 하나뿐인 MX를 요구하는 것은 뒤쪽뿐이다.

여기서 비교는 소용이 없었고 질문이 하나로 바뀌었다.
이 주소는 무엇을 하는 주소인가.
답은 외부에서 연락을 받는 대표 주소였고, 그러면 수신이 본체다.
채택안은 수신만 도메인화하는 쪽으로 정해졌다.
수신을 Cloudflare Email Routing으로 옮기고 발신은 당분간 Gmail에 남긴다.
근거는 셋이다. 목적이 수신이라 본체를 먼저 세운다는 것, 이 라우팅이 무료이고 무제한이고 기한이 없다는 것, 그리고 발신 대행 폐지의 영향을 받지 않는다는 것.

이틀 뒤에 발신이 붙었다

결정 이틀 뒤에 도메인 발신이 구축됐다.
겉보기에는 "발신은 당분간 두겠다"는 결정을 뒤집은 것처럼 보인다.
뒤집힌 것은 없었다.

SMTP2GO 릴레이는 MX를 요구하지 않았다.
필요한 것은 CNAME(다른 이름을 가리키는 DNS 레코드) 세 종뿐이었고, 그 레코드들은 수신 경로와 다른 레코드에 붙는다.
제약 자원을 건드리지 않으니 양자택일의 대상이 아니었다.
양자택일은 자원이 하나일 때만 성립한다.

덤이 하나 더 붙었다.
return-path 용도의 CNAME이 봉투 도메인을 따로 만들어 주면서 SPF(발신 서버를 허가 목록으로 선언하는 레코드) 처리가 자동으로 됐다.
도메인에 하나만 존재하는 SPF 레코드를 손으로 편집하는 것이 이 구성에서 가장 위험한 작업이다.
그 편집을 아예 하지 않고 넘어갔다.

정책 레코드는 완화 단계로 남겼다

발신이 서고 나면 DMARC(발신 인증 실패 시 수신 측 처리를 지시하는 레코드)를 조일 순서다.
조이지 않았다.
도메인의 DNS 설정을 열어 보니 Resend가 두 번째 발신 경로로 이미 들어와 있었고, 다른 개인 프로젝트가 그 경로로 알림을 내보내고 있었다.
정책을 검증 없이 격리 단계로 올리면 그 알림이 먼저 격리된다.
정책 레코드는 두 경로의 인증 통과가 확인될 때까지 조이지 않기로 했다. 조이는 것은 검증이 끝난 뒤이고 그 전에는 완화 상태로 둔다.

결론

후보를 잘못 골랐다기보다 후보를 재는 축이 하나 모자랐다.
무료로 되는가는 후보 안쪽을 보는 잣대이고, 그것만으로는 후보가 딛고 선 바닥이 언제까지 있는지가 보이지 않는다. 그 잣대만 들고 있으면 이미 무너진 전제 위에서 계속 비교표를 다듬게 된다.
폐지 고지는 수명을 먼저 재봤다면 표에 열을 붙이기 전에 잡혔을 정보다.

지금 이 구성도 시한부다. 전환할 때 바꿀 것은 수신 레코드 하나뿐이고, 제약 자원을 하나로 좁혀 두고 내린 결정이 거기서 값을 돌려준다.
정책 레코드를 조이는 일도 두 경로의 인증을 확인한 뒤로 미뤄 뒀다.

한계·재검토 트리거

2026-09 기준 / 재검토 트리거: 발신 대행 폐지 시점이 제공자 공지에서 바뀌거나, 두 번째 발신 경로의 인증 통과를 확인해 정책 레코드를 격리 단계로 올리면 이 글의 판정을 다시 연다.