📋 구현 내용
코드리뷰 피드백 반영, SSE 다중 연결 기능 구현
피드백 반영
- 트랜잭션 어노테이션을 달지 않아도 기본적으로 호출하는 함수에게 전파가 되기 때문에 어노테이션 제거
SSE 다중 연결 구현
-
기존 SSE 연결 문제점
- 사용자 Pk와 SSE 연결 정보를 1대 1로 맵핑하여 한 사용자당 하나의 연결만 가능 (다중 탭을 활용한 작업이 불가)
- 모든 연결 정보를 저장하여 메시지를 모든 탭에 전송할 경우 파일 생성 완료 메시지 전송 시 모든 탭에서 같은 파일을 다운받는 문제 발생
-
구현 방식
- 다중 연결을 지원하기 위해 기존 SseRepository의 자료구조를 Map<MemberId, SseEmitter>에서 Map<MemberId, List>, Map<ExcelInfoId, SseEmitter> 로 변경
- 접속 시 MemberId를 Key로 가진 Map에 SSE 연결 정보를 리스트 형태로 저장
- 파일 생성 시 ExcelInfoId를 Key로 가진 Map에 SSE 연결 정보를 ExcelInfoId와 1대 1로 저장
- 파일 생성 진행률은 MemberId를 Key로 가진 Map을 통해 해당 사용자와 연결된 모든 탭에 메시지를 전송
- 파일 생성 완료 메시지는 ExcelInfoId를 Key로 가진 Map을 통해 하나의 탭에만 전송
추가 변경점
- Consumer와 MessageService 사이에 MessageHandler를 추가하여 메시지별로 다른 로직을 처리할 수 있도록 변경
🔍 테스트 케이스
📢 코멘트
- 없음
Edited by 곽태영