1. 정의

게시물이 새로 발행되면 메일을 구독하고 있는 사용자에게 메일이 전송되어야 한다.

2. 필요 기능

  • 이메일 구독 기능
  • 이메일 구독 취소 기능
  • 이메일 인증 기능
  • 이메일 전송 기능

3. 고려 사항

  • 이메일 도메인을 인증하여 스팸처리가 되지 않도록 해야 한다.
  • 대량 발송 시 속도를 고려해야 한다. (추후 Spring Mail + 메시지 큐(Redis/RabbitMQ) + 배치 처리)
  • 메일의 본문은 HTML이어야 한다.
  • 사용자는 메일에서 구독 취소를 할 수 있어야 한다.

4. 추가로 공부해야 할 것

왤케 많지

1. 이메일 기본 동작 원리

  • SMTP
  • POP3
  • IMAP
  • SMTP, POP3, IMAP 프로토콜 차이
  • 이메일 헤더 구조 (From, To, Subject, Content-Type 등)
  • MIME 타입(텍스트, HTML, 첨부파일, 인라인 이미지)
  • DKIM, SPF, DMARC 인증 개념
  • 메일 릴레이와 MX 레코드 동작 방식

2. Spring Boot에서 이메일 발송

  • spring-boot-starter-mail 의 역할
  • JavaMailSender / SimpleMailMessage / MimeMessageHelper 사용법
  • Text 메일 vs HTML 메일 발송 차이
  • 첨부파일, 인라인 이미지 첨부 방법
  • SMTP 서버(Gmail, Naver, AWS SES, SendGrid 등) 연결 설정 방법
  • application.yml에서 SMTP 속성 설정
  • 발송 시 Character Encoding 설정(UTF-8)

3. 이메일 발송 트리거 & 스케줄링

  • 게시물 발행 이벤트 리스너에서 이메일 발송
  • @Async 비동기 발송
  • Spring Batch / Quartz Scheduler로 예약 발송
  • 이벤트 기반 아키텍처 (ApplicationEventPublisher, Kafka, RabbitMQ 연동)

4. 대량 발송 처리

  • 큐 기반 비동기 처리(Redis, RabbitMQ, Kafka)
  • 배치 전송 시 레이트 리밋 고려(SES/SendGrid 전송 제한)
  • 대량 발송 시 커넥션 풀 설정
  • 병렬 처리 시 중복 발송 방지(아이템포턴시)

5. 구독/해지(Subscription) 관리

  • 구독자 엔티티 설계 (이메일, 상태, 토큰)
  • 더블 옵트인(Double Opt-in) 구현
  • 1클릭 해지 링크 구현 (서명 토큰 포함)
  • GDPR, 국내 정보통신망법 등 관련 법규 준수

6. 이메일 수신 이벤트 처리

  • 바운스(Bounce), 스팸 신고(Complaint) 처리
  • SMTP 공급자 웹훅 연동(AWS SES, SendGrid Webhook)
  • 수신 거부자 자동 제외 로직

7. 전달률 & 품질 관리

  • 스팸 필터 회피 기법 (메일 구조, 키워드, 이미지 비율)
  • 발송 도메인/서브도메인 분리 전략 (mail.example.com)

8. 모니터링 & 로깅

  • 메일 발송 성공/실패 로그 기록
  • 발송 통계(성공률, 바운스율, 오픈율, 클릭율)
  • Prometheus + Grafana로 발송량 모니터링
  • 슬랙/이메일 알림 연동

9. 보안 고려

  • SMTP 자격증명 안전하게 보관 (환경변수, Secret Manager)
  • HTTPS 기반 해지/확인 링크
  • 토큰 서명(JWT/HMAC)으로 링크 변조 방지
  • CSRF/XSS 방지(이메일 본문과 링크 처리 시)