Skip to content

SSE 아바타 목록 조회 시 전체 엔티티 대신 프로젝션 사용 - #52

Merged
jyx-07 merged 1 commit into
developfrom
update/optimize-avatar-sse-query-projection
Aug 4, 2026
Merged

SSE 아바타 목록 조회 시 전체 엔티티 대신 프로젝션 사용#52
jyx-07 merged 1 commit into
developfrom
update/optimize-avatar-sse-query-projection

Conversation

@jyx-07

@jyx-07 jyx-07 commented Aug 3, 2026

Copy link
Copy Markdown
Contributor

✨ 작업 내용

SSE 아바타 목록 변경 이벤트(avatar-list-changed)를 브로드캐스트할 때마다 AvatarRepository.findAllByOrderByIdAsc()가 15개 컬럼을 가진 AvatarEntity 전체(TEXT 컬럼인 promptText 포함)를 로딩하고 있었는데, 실제로는 SSE 응답 DTO(AvatarChangeResDto)가 쓰는 8개 필드만 필요했습니다. Spring Data JPA의 interface 기반 projection(AvatarSummaryProjection)을 도입해 필요한 컬럼만 SELECT하도록 변경했습니다.


🔍 리뷰 시 참고사항

  • 아바타 생성/수정/삭제 등 목록 변경 이벤트가 발생할 때마다(최대 100개 SSE 커넥션 대상으로) 전체 조회가 반복 실행되는 구조라, 아바타 수가 늘어날수록 이벤트당 비용이 커지는 지점이었습니다. 우선 조회 쿼리 자체를 가볍게 만드는 것으로 개선했습니다.
  • AvatarChangeResDto(SSE로 클라이언트에 내려가는 응답 스펙)는 변경하지 않았습니다. 내부적으로 로딩하는 데이터만 프로젝션으로 축소한 것이라 API 응답 포맷은 기존과 동일하며 프론트엔드 쪽 변경 사항은 없습니다.
  • DeleteAllAvatarsServiceImpl도 같은 리포지토리 메서드를 사용하고 있어(이미지 URL 수집 목적) 함께 영향을 받는데, 필요한 imageUrl 필드는 프로젝션에 포함돼 있어 정상 동작합니다.
  • 기존 SubscribeAvatarChangesServiceImplTest는 반환 타입이 AvatarEntity에서 AvatarSummaryProjection으로 바뀐 것에 맞춰 mock 데이터를 인터페이스 구현체로 수정했습니다.

✅ 체크리스트

  • 문서(README, .env.example 등) 변경이 필요한 경우 작성 또는 수정했나요?
  • 작업한 코드가 정상적으로 동작하는 것을 직접 확인했나요?
  • 필요한 경우 테스트 코드를 작성하거나 수정했나요?
  • Merge 대상 브랜치를 올바르게 설정했나요?
  • PR에 관련 없는 작업이 포함되지 않았나요?
  • 적절한 라벨과 리뷰어를 설정했나요?

@jyx-07 jyx-07 added ♻️ Refactor 코드 리팩토링 ⚡️performance 성능 개선 labels Aug 3, 2026
@jyx-07 jyx-07 self-assigned this Aug 3, 2026
@jyx-07
jyx-07 requested a review from cfcromn August 3, 2026 05:32
@jyx-07
jyx-07 merged commit 8304f4a into develop Aug 4, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

⚡️performance 성능 개선 ♻️ Refactor 코드 리팩토링

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants