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 방지(이메일 본문과 링크 처리 시)