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