적용 기술 및 목적
- Spring ApplicationEventPublisher +
@TransactionalEventListener
를 통해 비동기적이고 안정적인 이메일 발송 처리
- 워크스페이스 생성 트랜잭션이 정상적으로 커밋된 후에만 메일 발송이 일어나도록 구현
- 메일 발송 실패 시에도 워크스페이스 생성 자체는 롤백되지 않도록 설계
구조 설명
1. 도메인 이벤트 발행 (WorkspaceService
)

- 워크스페이스 생성이 완료된 후, 해당 ID를 담은 이벤트 객체를 발행
2. 이벤트 핸들러 구현: WorkspaceInvitationEventHandler

@TransactionalEventListener(phase = AFTER_COMMIT)
사용으로 DB 트랜잭션 커밋 이후 실행 보장
- 초대 대상자 조회 → 초대한 사람 정보 확인 → 워크스페이스 정보 조회 → JWT 초대 링크 생성 → HTML 메일 전송
흐름 요약:
WorkspaceInvitation
테이블에서 초대 대상자 조회
WorkspaceMember
에서 초대한 사람의 닉네임 조회
Workspace
에서 이름과 슬러그 조회
- 초대 링크:
http://localhost:3000/accept?token=...
- HTML 메일로 수신자에게 발송