트러블 슈팅
문제 사항
- 반복문안에 레포지토리(cardAdapter)가 있어서 쿼리문이 비효율적으로 많이 나가는 문제발생
for (Card card : cards) {
// assigneeId가 있는 카드의 경우
if (Objects.nonNull(card.getAssigneeId())) {
BoardUser boardUser = boardUserAdapter.getBoardByUserById(card.getAssigneeId());
cardGetAllResponseDtoList.add(CardGetAllResponseDto.of(card, card.getColumns(), boardUser.getUser().getNickName()));
} else {
// assigneeId가 없는 카드의 경우
cardGetAllResponseDtoList.add(CardGetAllResponseDto.of(card, card.getColumns(), null));
}
}
문제 사항
해결방법
--Map과 where in 을 사용하여 N+1 문제를 해결
//assigneeId 리스트 뽑아오기 및 assigneeId로 BoardUser 리스트 가져오기
List<Long> assigneeIds = cards.stream().filter(c -> c.getAssigneeId() != null)
.map(Card::getAssigneeId).toList();
List<BoardUser> boardUsers = boardUserAdapter.getBoardUsersByIds(assigneeIds);
Map<Long, BoardUser> boardUserMap = boardUsers.stream()
.collect(Collectors.toMap(bu -> bu.getUser().getId(),
bu -> bu));
for (Card card : cards) {
Long assigneeId = card.getAssigneeId();
String nickName = null;
if (boardUserMap.containsKey(assigneeId) && assigneeId != null) {
nickName = boardUserMap.get(assigneeId).getUser().getNickName();
}
cardGetAllResponseDtoList.add(CardGetAllResponseDto.of(card, card.getColumns(), nickName));
'TIL' 카테고리의 다른 글
AWS를 알아보자(1) (0) | 2024.07.20 |
---|---|
아웃소싱 프로젝트 KPT 회고 (0) | 2024.06.25 |
좀 더 협업에 가까이 가보자!! (0) | 2024.06.21 |
인텔리제이 버전 문제 해결 (0) | 2024.06.18 |
GIT 다시한번 이해하자!!!(2) (0) | 2024.06.14 |