Skip to content

[ Feature ] - 월간 AI 리포트 생성 후 구독자 자동 이메일 PDF 발송 - #161

Open
bigwaveBigwave wants to merge 1 commit into
developfrom
feature/#149
Open

[ Feature ] - 월간 AI 리포트 생성 후 구독자 자동 이메일 PDF 발송#161
bigwaveBigwave wants to merge 1 commit into
developfrom
feature/#149

Conversation

@bigwaveBigwave

Copy link
Copy Markdown
Contributor

• ## 관련 이슈

작업 사항

  • 월간 AI 리포트 저장 완료 후 구독자에게 PDF를 자동 이메일로 발송하도록 구현했습니다.

  • 배치 실행 시점에 supportsFeature(userId, Feature.AI_REPORT)로 구독 권한을 확인합니다.

  • 가입 이메일이 없거나 구독 권한이 없는 사용자는 자동 발송을 생략합니다.

  • 저장된 리포트를 다시 조회한 뒤 기존 PDF 생성 및 이메일 발송 로직을 재사용합니다.

  • 자동 발송 실패가 리포트 저장 결과를 롤백하거나 다음 사용자 처리를 중단하지 않도록 예외를 격리했습니다.

  • 수동·자동 발송이 PDF, 제목, 본문 및 첨부파일 구성 로직을 공유하도록 공통화했습니다.

  • 자동 발송 실패 로그에 안전한 failureCode만 기록하고 이메일, 금융정보, SMTP 인증정보, 원본 예외 메시지 및 stack trace가 노출되지 않도록 했습니다.

  • 실제 Spring 트랜잭션 프록시를 사용하는 통합 테스트를 추가했습니다.

    • upsert() commit 완료 후 자동 발송 호출
    • 자동 발송 시 활성 트랜잭션 없음
    • commit 실패 시 자동 발송 미호출
  • 리포트 조회, PDF 생성 및 SMTP 발송 실패 로그의 보안 회귀 테스트를 추가했습니다.

  • 실제 메일 설정 파일이 Git에 포함되지 않도록 .gitignore 규칙을 추가했습니다.

참고 사항

  • 자동 이메일 수신 ON/OFF 설정, 발송 이력, 재시도 및 별도 스케줄러는 이번 범위에 포함하지 않았습니다.
  • 동일 연월의 월간 배치를 재실행하면 이메일이 중복 발송될 수 있습니다.
  • 이메일 발송은 동기 방식이므로 사용자 수와 SMTP 응답 시간에 따라 배치 실행 시간이 증가할 수 있습니다.
  • 실제 Gmail SMTP는 테스트에서 호출하지 않으며 mock으로 검증했습니다.
  • 로컬에서 실제 이메일 발송을 테스트하려면 SMTP 환경변수 설정이 필요합니다.
  • mail.properties.example에는 환경변수 이름만 포함하며 실제 Gmail 주소나 앱 비밀번호를 입력하면 안 됩니다.
  • 전체 테스트 619개 중 610개 성공, 조건부 테스트 9개 제외, 실패 및 오류 0개입니다.
  • :api:war 빌드 및 git diff --check를 통과했습니다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

✨ Feature 기능 개발

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[ Feature ] - 월간 AI 리포트 생성 후 구독자 자동 이메일 PDF 발송

2 participants