Skip to content

[Refactor/#45, Feat/#41] 불필요한 트랜잭션 제거, API 서버 SSE 다중 연결 처리 구현

곽영일 requested to merge refactor/#45 into dev

📋 구현 내용

코드리뷰 피드백 반영, 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를 추가하여 메시지별로 다른 로직을 처리할 수 있도록 변경

🔍 테스트 케이스

  • 다중 탭 테스트 성공 사진 첨부 다중_연결_테스트

📢 코멘트

  • 없음

@Aiden @Endo @woody

Edited by 곽태영

Merge request reports