Skip to content

refactor: 메일 제목·본문 생성을 발송 수단과 분리한다 - #155

Merged
ff1451 merged 1 commit into
mainfrom
refactor/mail-message-builder
Oct 18, 2026
Merged

ff1451 merged 1 commit into
mainfrom
refactor/mail-message-builder

Conversation

@ff1451

@ff1451 ff1451 commented Oct 16, 2026 •

Copy link
Copy Markdown
Contributor

요약

동작을 바꾸지 않는 리팩토링. SesMailSender와 SendmailMailSender가 같은 제목·텍스트 본문·HTML 템플릿 채우기 코드(메서드 2개, 템플릿 상수 2개)를 각자 복사해 갖고 있었고, 다른 것은 실제 발송 부분뿐이었다. 문구를 고치려면 두 곳을 똑같이 고쳐야 했다.

변경

  • MailMessage(subject, text, html) + MailMessages.passwordReset(...)/accountCreated(...) — 메일 내용을 한곳에서 만든다.
  • TemplateMailSender(추상) — MailSender의 두 메서드를 구현하고 deliver(받는 사람, MailMessage)만 하위 클래스에 맡긴다.
  • SesMailSender·SendmailMailSender는 deliver만 구현한다. LoggingMailSender(로그만 남김)는 그대로.

동작 동일성

  • 메일 문구: 두 발송기의 원래 문자열 리터럴 집합이 서로 같았고, MailMessages의 리터럴 집합과도 정확히 같음을 기계적으로 대조했다.
  • MailMessagesTest: 제목·텍스트 본문을 원래 문구로 고정하고, HTML 이스케이프(a<b&c → a&lt;b&amp;c)와 SES 요청(보내는 사람, 받는 사람, 제목, 본문) 구성을 확인한다.

테스트

  • 로컬 전체 ./gradlew test: 552건 중 551 통과, 1 스킵.

Summary by CodeRabbit

  • Email Updates
    • Password-reset and account-created emails are now available in both plain-text and HTML formats, so email clients can display the version best suited to their settings.
    • These messages continue to be delivered through the available email delivery options.

SES와 sendmail 발송기가 같은 제목·텍스트·HTML 템플릿 채우기 코드를 각자 복사해 갖고 있었다.

- MailMessages가 메일 내용(MailMessage)을 만들고, TemplateMailSender가 MailSender 메서드를 구현한다.
- SES·sendmail 발송기는 deliver(받는 사람, 내용)만 구현한다.
- 메일 문구는 글자 하나 바뀌지 않았다(두 발송기의 원래 문자열과 기계적으로 대조).
@coderabbitai

coderabbitai Bot commented Oct 16, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration
  • Configuration used: defaults
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 3cebe2d8-c2fa-400b-99b9-6f189616c0a3
📥 Commits

Reviewing files that changed from the base of the PR and between be02c09 and 7f55aa7.

📒 Files selected for processing: 6
  • src/main/java/com/bcsdlab/bcsdinternalapiv2/global/mail/MailMessage.java
  • src/main/java/com/bcsdlab/bcsdinternalapiv2/global/mail/MailMessages.java
  • src/main/java/com/bcsdlab/bcsdinternalapiv2/global/mail/SendmailMailSender.java
  • src/main/java/com/bcsdlab/bcsdinternalapiv2/global/mail/SesMailSender.java
  • src/main/java/com/bcsdlab/bcsdinternalapiv2/global/mail/TemplateMailSender.java
  • src/test/java/com/bcsdlab/bcsdinternalapiv2/global/mail/MailMessagesTest.java

Included review availability: This review used your included allowance. Your plan provides up to 1 included review per hour; 0 remain after this review.

📝 Walkthrough

Mail content is now built through shared message builders and passed to Sendmail or SES for delivery. Tests cover generated password-reset and account-created content, plus the SES request fields.

Changes: Shared mail delivery

Layer / File(s) Summary
Shared message construction
src/main/java/com/bcsdlab/bcsdinternalapiv2/global/mail/MailMessage.java, src/main/java/com/bcsdlab/bcsdinternalapiv2/global/mail/MailMessages.java, src/main/java/com/bcsdlab/bcsdinternalapiv2/global/mail/TemplateMailSender.java, src/test/java/com/bcsdlab/bcsdinternalapiv2/global/mail/MailMessagesTest.java
MailMessage holds a subject, text body, and HTML body. MailMessages builds password-reset and account-created messages, and TemplateMailSender delegates them to the transport implementation. Tests check the generated message content.
Transport delivery
src/main/java/com/bcsdlab/bcsdinternalapiv2/global/mail/SendmailMailSender.java, src/main/java/com/bcsdlab/bcsdinternalapiv2/global/mail/SesMailSender.java, src/test/java/com/bcsdlab/bcsdinternalapiv2/global/mail/MailMessagesTest.java
Sendmail and SES now extend TemplateMailSender and deliver the supplied message content through their respective transports. The SES test checks sender, recipient, subject, and reset-link text.

Priority: ⬇️ Low

Estimated code review effort: 3 (Moderate) | ~20 minutes

Change: Refactor

Merge Risk: ⚪ Minimal · up to 7f55a

This refactor shares mail content generation between the SES and sendmail senders, and it is not expected to change behavior. No merge-blocking risk was identified.

Pre-merge checks: Passed 4 · Failed 1

Failed Failed checks: 1 warning

Check name Status Explanation Resolution
Docstring Coverage Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 12 functions across 6 files. Write docstrings for the functions missing them to satisfy the coverage threshold.
Passed Passed checks: 4 passed
Check name Status Explanation
Description Check Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check Passed The title clearly describes the main refactor: separating mail subject and body generation from the delivery method.
Linked Issues check Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check Passed Check skipped because no linked issues were found for this pull request.
  • Fix all pre-merge checks with AI
✨ Finishing Touches: 💡 1
📝 Generate docstrings: 💡
  • Commit to this branch
  • Create a new PR
🧪 Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@ff1451
ff1451 merged commit 6b4e632 into main Oct 18, 2026
2 checks passed
@ff1451
ff1451 deleted the refactor/mail-message-builder branch October 18, 2026 13:51
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant