Files
sodalive-backend-spring-boot/docs/20260227_최근종료라이브최적화.md

1.7 KiB

최근 종료 라이브(getLatestFinishedLive) 최적화

  • getLatestFinishedLive 조회를 DB 단계에서 차단 관계(left join)로 필터링하도록 변경
  • 조회 결과를 GetLatestFinishedLiveResponse로 QueryProjection 하여 서비스 단 추가 map 제거
  • 회원 차단(memberBlock) / 차단해제(memberUnBlock) 시 최근 종료 라이브 캐시 무효화 적용
  • 정적 진단 및 테스트/빌드 검증 수행
  • 검증 기록 작성

검증 기록

1차 구현

  • 무엇을: getLatestFinishedLive를 서비스 후처리(filter/map)에서 제거하고, LiveRoomRepository에서 leftJoin(blockMember) + blockMember.id.isNull 조건으로 차단 관계를 DB 단계에서 제외하도록 변경했다. 또한 GetLatestFinishedLiveResponse@QueryProjection 생성자를 추가해 쿼리 결과를 응답 DTO로 바로 생성했다. 마지막으로 memberBlock/memberUnBlock에서 getLatestFinishedLive:{memberId} 캐시를 즉시 evict 하도록 반영했다.
  • 왜: 기존 로직은 조회 후 애플리케이션 레벨에서 차단 여부를 반복 조회하고 별도 map을 수행해 비용이 컸고, 차단/차단해제 직후 최근 종료 라이브 캐시가 TTL 만료 전까지 stale 상태가 될 수 있어 DB 레벨 필터링 및 이벤트성 캐시 무효화가 필요했다.
  • 어떻게:
    • lsp_diagnostics (대상: GetLatestFinishedLiveResponse.kt, LiveRoomRepository.kt, LiveRoomService.kt, MemberService.kt) 실행 결과: 환경상 Kotlin LSP 미구성으로 진단 불가
    • ./gradlew test && ./gradlew build 실행 결과: 성공 (BUILD SUCCESSFUL)
    • ./gradlew tasks --all 실행 결과: 성공 (BUILD SUCCESSFUL)