[Feat] 프로젝트 신청/승인/거절시의 알림 전송 로직 추가

💡 질문 / 논의 내용

프로젝트 신청/승인/거절시의 알림 전송 로직 추가

📝 추가 설명(선택)

Transaction Outbox 패턴을 통한 이벤트 기반 알림 전송 로직을 작성합니다.

  • 사용자가 cloud 리소스를 사용하기 위해, 프로젝트를 신청하고, 이를 승인/거절 시에 비지니스 로직에 이어서 Discord, Email 알림이 전송됩니다.- 이때, 트랜잭션과 외부 알림이 원자적으로 처리되지 않기 때문에 데이터 불일치 문제가 발생할 수 있습니다.
  • 또한, 서로 다른 비즈니스 로직 간의 강한 결합으로 알림이 추가되면 복잡도와 의존성이 커지는 구조를 개선합니다.
  1. Transactional Outbox Pattern 적용
  • 비즈니스 로직 트랜잭션 내에서 알림 메시지를 Outbox 테이블에 함께 저장
  • 트랜잭션 커밋 이후 별도의 스케줄러(Polling Publisher)가 Outbox를 읽어 알림 발행
  • 메시지가 정상 발행된 기록을 flagging 한 후, 하루 주기로 Batch 삭제 → 메시지 유실을 방지하며, 중복 전송은 허용하는 “At-Least-Once” 전달 보장 전략 채택
  1. Event 기반 구조로 의존성 완화
  • Spring의 ApplicationEventPublisher 와 @TransactionalEventListener 사용
  • ProjectServiceAdapter 는 단순히 도메인 이벤트만 발행

📚 참고 자료(선택)

Transaction Outbox 패턴을 통한 이벤트 기반 알림 전송