비효율적인 읽음 처리 개선하기
이전 코드
public void messageRead(Long roomId) {
ChatRoomJpaEntity chatRoomJpaEntity = chatRoomJpaRepository.findById(roomId).orElseThrow(() -> new EntityNotFoundException("room not found"));
Member member = memberRepository.findByEmail(SecurityContextHolder.getContext().getAuthentication().getName()).orElseThrow(() -> new EntityNotFoundException("member not found"));
List<ReadState> readStates = readStateJpaRepository.findByChatRoomJpaEntityIdAndMember(roomId,member);
for(ReadState readState : readStates){
readState.updateReadState(true);
}
}
하나하나 update 코드가 날아간다 😂
@Modifying(clearAutomatically = true)
@Query("UPDATE ReadState rs SET rs.isRead = true
WHERE rs.chatRoomJpaEntity.id = :roomId AND rs.member = :member
AND rs.isRead = false")
int updateAllAsReadByRoomIdAndMember(@Param("roomId") Long roomId, @Param("member") Member member);

(로컬 환경에서 테스트했기에 정확하지 않을 수 있음)
약 메시지 880개를 읽는 경우를 테스트 했다.
1260/58 : 약 22배 정도의 성능 향상을 보였다.
Last updated