
프론트엔드 시점에서 정리한 SSE 도입과 메시지 유실 해결 과정
두줄요약
AI 챗봇 SSE에서 완료 메시지가 유실된 원인을 채널 생성·삭제 시점의 경쟁 조건으로 분석했습니다. 채널 선등록과 replay 기반 구독으로 연결 순서와 무관하게 결과를 수신하도록 개선했습니다.
문제 상황
- AI 챗봇 결과 수신을 위한 SSE 연결에서 GENERATING 메시지 후 완료 메시지 미수신
- heartbeatTimeout 이후 활동 없음 오류와 재연결 발생
원인 분석
- API 테스트 도구로 동일 증상 재현, React·리스너·SSE 라이브러리 영향 배제
- SSE 구독 이전 AI 작업 완료 시 channelMap에 채널이 없어 완료 메시지 폐기
- 완료 처리의 remove로 늦게 연결한 구독자가 기존 채널을 찾지 못하는 경쟁 조건
해결 방법
- 작업 등록 시점에 replay().all() 채널을 channelMap에 선등록
- 완료 처리의 채널 조회를 remove에서 get으로 변경하고 완료 신호 뒤 구독 측에서 정리
- 구독자 수 조건으로 중복 GENERATING 메시지 방지, 늦은 구독자에게 누적 이벤트 재생
적용해볼 점
- SSE 장애 시 API 테스트 도구로 프론트엔드와 서버 문제 영역 우선 분리
- 비동기 이벤트 흐름에서 채널 생성·이벤트 발행·채널 삭제 순서 명시적 점검




