홈 › 실무 확장 › 19 / 22

메일·알림 발송

SMTP 흐름, MIME·한글 제목·첨부, 실패 분류·재시도, 중복 방지, 알림 폭주 억제
섹션 7진행 0 / 22

메일·알림 발송 — SMTP 소켓 구현과 실패 처리, 알림 폭주 억제

정산 리포트 메일, 장애 알림 메신저 웹훅처럼 사내 시스템이 흔히 보내는 메일·알림을, jar 없이 소켓으로 SMTP 를 직접 구현해 원리를 익히고 실패 처리·중복 방지·폭주 억제까지 정리합니다.

1. 왜 배우는가

사내 업무 시스템은 정산 리포트, 승인 요청, 장애 알림처럼 메일을 자주 보냅니다. 대부분 Spring JavaMailSender 로 몇 줄이면 끝나지만, 발송이 실패했을 때 재시도할지 포기할지, 같은 메일을 두 번 보내지 않을지는 애플리케이션이 직접 챙겨야 합니다. 라이브러리는 SMTP 프로토콜을 감춰 주지만 실패 처리 정책까지 대신해 주지는 않습니다.

배치가 실패해서 재실행되면 이미 보낸 메일을 또 보내는 사고가 흔합니다. 장애가 나면 같은 알림이 1분마다 수백 통 쏟아져 담당자가 메신저를 꺼버리는 일도 흔합니다. 이런 문제는 SMTP 자체보다 "메일을 어떻게 안전하게 반복 호출하는가"의 문제입니다.

이 레슨은 SMTP 대화를 소켓으로 직접 구현해 EHLO·MAIL FROM·RCPT TO·DATA 흐름과 응답 코드의 의미를 체감합니다. 이어서 재시도, 멱등키, 알림 폭주 억제를 코드로 만들어 보고 Spring JavaMailSender 대응표로 정리합니다. 코드는 java-src/extension/19_mail 에 있고 Main·SmtpClient·FakeSmtpServer 세 파일로 구성됩니다.