Skip to content

feat: 비밀번호 재설정 SMTP 메일 발송 연결 - #106

Merged
hywznn merged 3 commits into
mainfrom
feat/55-password-reset-email
Aug 7, 2026
Merged

feat: 비밀번호 재설정 SMTP 메일 발송 연결#106
hywznn merged 3 commits into
mainfrom
feat/55-password-reset-email

Conversation

@hywznn

@hywznn hywznn commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

왜 필요한가요?

PR #100으로 비밀번호 재설정 token 발급·검증은 구현됐지만, 기본 NoOp Adapter가 메일을 실제로 전달하지 않아 사용자가 재설정 링크를 받을 수 없었습니다.

Closes #55

무엇이 바뀌나요?

  • PasswordResetNotificationPort의 SMTP Adapter를 추가했습니다.
  • none | smtp 설정으로 NoOp과 SMTP 구현을 선택합니다.
  • 실제 메일에 Client 재설정 URL, 일회용 token, UTC 만료시각을 포함합니다.
  • 발신자·URL·제목의 필수값과 줄바꿈 주입 가능성을 검증합니다.
  • 기존 비동기 Dispatcher를 유지하여 SMTP 지연·실패가 API의 동일한 202 Accepted 응답을 깨지 않게 합니다.
  • Spring Mail SMTP 설정과 timeout 환경변수를 Compose·배포 Runbook에 문서화했습니다.
  • 기본 Provider는 none이므로 메일 설정이 없는 local/test 환경의 동작은 그대로 유지됩니다.

API·DB 영향

  • 기존 API를 그대로 사용합니다.
    • POST /api/v1/auth/password-reset-requests
    • POST /api/v1/auth/password-resets
  • DB·Flyway 변경 없음
  • Worker·Document·V28 작업과 변경 영역이 겹치지 않음

보안

  • 원본 token은 DB에 저장하지 않고 메일 본문에만 사용합니다.
  • 이메일·원본 token·SMTP 비밀번호를 일반 로그에 기록하지 않습니다.
  • SMTP credential은 환경변수/Secret으로만 주입합니다.
  • Provider 예외 메시지를 외부 응답이나 로그에 그대로 노출하지 않습니다.

검증

  • SMTP 메일 수신자·발신자·링크 token·만료시각 단위 테스트
  • 불완전하거나 안전하지 않은 메일 설정 거부 테스트
  • smtp 설정에서 SMTP Adapter가 선택되는 Spring Context 테스트
  • 기존 비밀번호 재설정 Provider 실패 시 202 유지 테스트
  • ./gradlew clean test — BUILD SUCCESSFUL
  • docker compose -f compose.demo.yml config --quiet
  • 실제 SMTP 계정으로 메일 수신 → 링크 → 새 비밀번호 로그인 E2E

연동 시 필요한 값

  • PASSWORD_RESET_NOTIFICATION_PROVIDER=smtp
  • PASSWORD_RESET_CLIENT_URL
  • PASSWORD_RESET_MAIL_FROM
  • SPRING_MAIL_HOST, SPRING_MAIL_PORT
  • SPRING_MAIL_USERNAME, SPRING_MAIL_PASSWORD

실제 SMTP 계정과 Client의 /reset-password?token=... 처리 연결 후 마지막 E2E를 수행합니다.

hywznn and others added 3 commits August 7, 2026 13:24
기본 NoOp과 실제 SMTP Adapter를 설정으로 전환할 수 있게 구성했습니다. 재설정 링크와 만료시각을 메일로 전달하고 안전하지 않은 설정을 차단하며, 발송 내용과 Provider 선택을 테스트합니다.
로컬 Compose와 배포 Secret에서 실제 메일 Provider를 활성화하는 환경변수, timeout, 재설정 메일 수신 Smoke 절차를 정리했습니다. 기본 설정은 메일을 보내지 않는 none으로 유지합니다.
@hywznn

hywznn commented Aug 7, 2026

Copy link
Copy Markdown
Contributor Author

client 연결 확정은 아마 해주실겁니다 그때 fix할게요

@hywznn
hywznn marked this pull request as ready for review August 7, 2026 05:08
@hywznn
hywznn requested review from BcKmini, chaeliki and krestar August 7, 2026 05:09

@krestar krestar left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

요구사항에 맞게 잘 작성된 것 같고, Teams 상에서 공유된 정상 작동 검증이랑 CI 통과까지 확인했습니다!

@BcKmini

BcKmini commented Aug 7, 2026

Copy link
Copy Markdown
Member

@hywznn

fowoco/client#278

BcKmini

This comment was marked as off-topic.

@hywznn
hywznn merged commit 3d1adfd into main Aug 7, 2026
4 checks passed
@hywznn
hywznn deleted the feat/55-password-reset-email branch August 7, 2026 05:50
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.

[Auth] 비밀번호 재설정·가입 약관 동의 이력 구현

3 participants