
알림 데이터는 별도 스키마에 저장
대댓글, 좋아요, 공지사항시 사용자에게 알림이 전송됩니다. 해당 이벤트가 발생한 경우, 특정 사용자에게 알림을 전송하는 로직을 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));
    }
}