RabbitMQ 기반 알림 기능 구현 (작성중)

김민우·2025년 2월 21일
0

잡동사니

목록 보기
27/28

  • 메시지 큐: RabbitMQ
  • 이메일 서비스: JavaMailSender

알림 데이터는 별도 스키마에 저장

대댓글, 좋아요, 공지사항시 사용자에게 알림이 전송됩니다. 해당 이벤트가 발생한 경우, 특정 사용자에게 알림을 전송하는 로직을 Spring Event Handler를 통해 구현했습니다.

Spring Event Handler 를 사용한 이유는 아래와 같습니다.

  • 결합도 감소
  • 트랜잭션 커밋 후 리스너 동작 보장
  • 재시도/에러 핸들링 제공
@Component
@RequiredArgsConstructor
public class CommentLikeNotificationEventListener {
    private final CommentRepository commentRepository;
    private final MemberRepository memberRepository;
    private final NotificationProducer notificationProducer;

    @TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT)
    public void handleLikeNotificationEvent(final CommentLikeNotificationEvent event) {
        final Member receiver = findMemberById(event.receiverId());
        if (!receiver.hasEmail()) {
            return;
        }
        
        final Comment comment = findCommentById(event.commentId());
        final Member sender = findMemberById(event.senderId());
        notificationProducer.sendCommentLikeNotification(
                CommentLikeNotificationCreateRequest.of(sender, receiver, comment)
        );
    }

    private Comment findCommentById(final Long commentId) {
        return commentRepository.findById(commentId)
                .orElseThrow(() -> new NotFoundCommentException(commentId));
    }

    private Member findMemberById(final Long memberId) {
        return memberRepository.findById(memberId)
                .orElseThrow(() -> NotFoundMemberException.createWhenInvalidMemberId(memberId));
    }
}

0개의 댓글