왜 Kafka + SSE인가?

SNS 피드 시스템에서 좋아요/댓글 알림을 실시간으로 전달해야 했습니다.

방식 장점 단점
폴링 구현 간단 불필요한 요청, 지연
WebSocket 양방향 서버 리소스 큼, LB 복잡
SSE 단방향, HTTP 호환 단방향만 가능

알림은 서버→클라이언트 단방향이므로 SSE가 적합합니다. Kafka는 이벤트 내구성과 다중 컨슈머 지원을 위해 사용합니다.

흐름

[좋아요 이벤트] → Kafka 토픽 발행
                    ↓
              Kafka Consumer 수신
                    ↓
         SSE EmitterRepository에서 대상 유저 찾기
                    ↓
              SSE push → 브라우저 실시간 수신

핵심 코드

// Kafka Producer — 좋아요 시 이벤트 발행
alarmProducer.send(new AlarmEvent(
    AlarmType.NEW_LIKE_ON_POST, 
    new AlarmArgs(userId, postId), 
    postOwnerId
));

// SSE Emitter — 클라이언트 연결
@GetMapping("/subscribe")
public SseEmitter subscribe(@AuthenticationPrincipal User user) {
    SseEmitter emitter = new SseEmitter(60 * 1000L);
    emitterRepository.save(user.getId(), emitter);
    return emitter;
}

Live: sns.lemuel.co.kr