
현재 구현은 랭킹 페이지의 각 항목에 대해 memberClient.getMemberInfo()를 개별적으로 호출하고 있습니다. 이는 페이지 크기(N)만큼 네트워크 API 호출을 발생시키는 N+1 문제를 야기합니다. 이로 인해 상당한 성능 저하가 발생하고 멤버 서비스에 불필요한 부하를 줄 수 있습니다.
페이지에 포함된 모든 멤버 정보를 한 번의 배치 요청으로 가져오도록 수정하는 것을 권장합니다.
제안:
rankPageQueryService로부터 PageResult<RankItemResult>를 가져옵니다.
- 결과 목록에서 모든
memberId를 수집합니다.
memberClient에 getMemberInfos(List<Long> memberIds)와 같은 배치 조회 메소드를 추가하고, 이를 호출하여 모든 MemberInfo를 한 번에 가져옵니다. (이를 위해서는 멤버 서비스에 새로운 API 엔드포인트가 필요할 수 있습니다.)
memberId를 키로 하는 Map<Long, MemberInfo>를 생성하여 조회를 용이하게 합니다.
RankItemResult를 순회하며 맵에서 MemberInfo를 조회하여 최종 PageResult<RankPageItemResponse>를 구성합니다.
이렇게 하면 네트워크 호출을 페이지당 한 번으로 줄일 수 있습니다.
Originally posted by @gemini-code-assist[bot] in #129 (comment)