요약
- 1995년 9월 RFC 1846은 이메일을 전혀 받지 않는 전용 호스트를 다뤘다. SMTP 서버가 없으면 발신 시스템은 연결 실패를 잠정적인 문제로 보고 잘못 보낸 메일을 며칠 동안 재시도할 수 있었다. 실험적 응답 코드 521은 MX 중계기나 작은 거절 전용 서버가 영구적인 답을 주도록 했다.
- 제안자들은 일부 기존 클라이언트가 521 직후 연결이 끊기면 다시 대기열에 넣고, 서버가 QUIT까지 기다리면 보낸 사람에게 메일을 돌려준다고 적었다. 2015년 RFC 7504는 메일을 절대 받지 않는 호스트의 연결 시작 응답으로 521을 정식화하고, 수신하지 않는 도메인을 미리 아는 중계기용 556을 추가했다.
아무도 받지 않는 편지에 친절하게 다시 방문했다
메일은 상대 서버가 잠시 멈췄을 때 포기하지 않는 편이 좋다. 몇 시간 뒤 서버가 돌아오면 보관해 둔 메시지를 전달할 수 있기 때문이다. 그러나 상대가 애초에 메일을 받는 기계가 아니라면 그런 인내는 헛수고가 된다. Alain Durand와 Francis Dupont는 1995년 실험적 RFC에서 인터넷에 DNS나 NTP 같은 특정 기능만 맡은 호스트가 늘고 있다고 설명했다. 그곳에는 메일 서비스가 없어도 사람이 그 호스트 이름을 수신 주소에 적을 수 있다.
발신 SMTP 프로그램은 접속할 서버가 없을 때 ‘지금은 안 된다’는 사실만 안다. 내일 메일 서버가 새로 켜질 수 있으므로 실패를 잠시의 문제로 처리하고, 편지를 보관해 다시 시도한다. RFC는 그렇게 주소가 잘못된 메일이 며칠 동안 대기하다가 이해하기 어려운 오류와 함께 돌아올 수 있다고 했다. 수신 호스트에는 우편함도 대기열도 없었다. 반복 연결과 저장 비용은 멀리 있는 발신 시스템이 내고, 사람은 실패를 늦게 통보받았다.
1982년 SMTP 규격은 송신자가 수신자와 연결을 열고 명령과 응답을 교환하는 구조를 세웠다. 응답 숫자는 다음 행동을 결정하는 단서였다. 1995년 제안이 필요로 한 것도 새로운 우편함이 아니라 단호한 단서였다. 이 호스트는 지금 고장 난 게 아니라 영원히 메일을 받지 않는다. 제안된 숫자 521은 그 결정을 네트워크에 전하는 짧은 문장이었다.
거절을 말할 장소는 두 곳이었다. 해당 호스트의 MX 중계기가 수신자를 확인하는 단계에서 521을 반환할 수 있다. 아니면 메일을 받지 않는 호스트가 모든 메일 요청을 거절하기만 하는 아주 작은 SMTP 서버를 가동할 수 있다. 첫 방법은 이미 메일 경로에 있는 중계기가 대신 말한다. 두 번째는 목적지 스스로 말한다. 어느 쪽이든 ‘언젠가 고쳐질 장애’와 ‘서비스가 아예 없음’을 구분할 책임자가 필요했다.
MX를 쓴다면 모든 길에서 같은 말을 해야 한다. RFC 1846은 한 우선순위의 중계기가 수신 거절을 맡으면 우선순위가 더 낮은 중계기도 그렇게 해야 한다고 했다. 첫 번째 문은 영원히 안 받는다고 하고 두 번째 문은 아무 답을 하지 않으면 발신자는 또 다른 길을 찾아 시도한다. 하나의 목적지에 여러 입구를 내놓은 운영자가 그 입구의 규칙을 맞춰야 하는 이유다.
거절하고 바로 끊자, 클라이언트가 또 왔다
최소 서버는 연결되자마자 521 응답과 공식 호스트명 또는 IP 주소를 보낼 수 있었다. 그런 뒤 바로 연결을 닫거나, 계속 명령을 받아 QUIT 이외의 명령에 521로 답하고 상대가 끝낼 때까지 기다릴 수 있었다. 이 인사말을 보내는 호스트는 어떤 도메인의 MX로도 등록되어서는 안 됐다. 메일을 전혀 받지 않는다고 말하면서 수신 서버로 광고할 수는 없다.
두 종료 방식은 같은 거절을 전하는 듯했다. 실제 프로그램은 달랐다. RFC 저자들은 일부 SMTP 클라이언트가 521을 받은 직후 연결이 닫히면 이를 일시적인 실패로 해석해 메일을 다시 대기열에 넣었다고 기록했다. 작은 서버가 연결을 유지하면 그 클라이언트들은 QUIT을 보내고 메일을 원래 보낸 사람에게 돌려줬다. 숫자는 같았지만 대화가 끝나는 순서에 따라 결과가 바뀌었다. 명세에 거절이 써 있다는 것과 이미 설치된 프로그램이 거절을 받아들인다는 것은 다른 일이다.
그래서 메일을 한 통도 받지 않을 기계가 최소한의 메일 서비스를 운영할 이유가 생겼다. 접속 가능한 상태를 유지하고 자신이 누구인지 밝히고 고정된 거절을 말하며 필요하면 상대가 작별할 때까지 기다린다. 이 기계의 메일함은 여전히 없다. 대신 다른 기계가 존재하지 않는 우편함을 위해 며칠간 편지를 지키는 일을 줄인다.
1995년 문서는 인터넷 표준이 아닌 실험적 제안이었고 구현 경험을 보내 달라고 했다. ‘일부’ 클라이언트가 빠른 종료 뒤 다시 시도했다는 설명은 상호운용성 관찰이다. 그해에 영향을 받은 제품이나 지연된 메일의 총수를 세지는 않았다. 실제 규모를 알려면 당시 발신 대기열 기록이나 구현 조사가 있어야 한다. 다만 서버에서 521을 보냈다는 기록만으로 재시도가 끝났다고 할 수 없다는 점은 분명하다.
2015년에는 연결 전에 거절할 수도 있었다
2015년 RFC 7504는 521을 SMTP의 정식 응답에 넣었다. 이 문서는 521이 널리 쓰였지만 기본 규격에는 아직 공식적으로 포함되지 않았다고 적었다. 새 규정은 연결 시작 시 어떤 상황에서도 메일을 받지 않는 호스트를 나타내도록 범위를 잡았다. 특정 발신자나 주소를 거절하는 등 더 넓은 용도로 쓰일 수 있는 554와 구별했다. 1995년 실험은 이렇게 정리됐다.
같은 해 RFC 7505는 DNS에 null MX를 정의했다. 도메인이 메일을 받지 않는다는 신호다. 발신자는 MX가 없으면 A 또는 AAAA 주소를 대신 찾아 접속을 시도할 수 있다. 웹사이트나 다른 서비스를 제공하는 호스트가 메일 목적지로 오인되는 것이다. null MX는 연결을 열기 전에 도메인의 수신 정책을 알려 준다. 이를 위해 거절 전용 SMTP 서버를 띄울 필요는 없다.
RFC 7504는 556도 도입했다. 중간 메일 시스템이 null MX 같은 근거로 전달 주소의 도메인이 메일을 받지 않는다고 이미 알면, 대상 호스트에 연결하지 않고 이전 시스템에 거절을 돌려줄 수 있다. 521은 호스트의 문 앞에서 듣는 말이다. 556은 중계기가 그 문까지 가지 않고 도메인 규칙을 알고 전달하는 말이다. 어느 단계에서 누가 알고 있었는지가 코드에 남는다.
1995년에는 ‘아무것도 하지 않는’ 대신 아주 작은 거절 서버가 불필요한 대기열을 멈출 수 있었다. 2015년에는 DNS도 미리 불필요한 방문을 막는 길이 됐다. 양쪽의 핵심은 속도가 아니라 결정권자의 명확한 답이었다. 목적지가 침묵하면 보내는 쪽이 계속 추측하며 일한다. 믿을 만한 ‘안 받습니다’가 도착하면 그 일은 끝난다.
회원 브리핑
프로필 심층 컨텍스트
올바른 멤버십 등급으로 로그인하면 전체 브리핑과 출처 노트를 볼 수 있습니다.
전략 서클 전용
전략 서클
모든 독자에게 공개됩니다. 가입 후 로그인하면 프로필 브리핑를 열람할 수 있습니다.
전략 서클 가입Leadership Alliance 전용
Leadership Alliance
자격을 갖춘 IP 자산 소유자 및 운영진을 위한 콘텐츠입니다. 로그인하면 Leadership Alliance 브리핑을 열람할 수 있습니다.
Leadership Alliance 가입하기





