<aside> 💡 우리팀은 채팅 서비스의 통신 방식을 [Polling, Websocket] 후보로 생각을 했었다.

이 두개의 통신 방식에 대해서는 많은 레퍼런스가 존재하기에 Websocket 이용해 통신을 하는

방법이 성능적으로 우수하다는 것을 알 수 있었다.

서비스의 Scope 를 작게 기획하여 두개의 기술을 모두 접목해 이 둘의 차이점을 알아보려고 한다.

</aside>

<aside> 💡 Polling

</aside>

<aside> 💡 Websocket

</aside>

🤔 그렇다면 어느정도 성능이 우수할까 ⁇

성능 테스트는 JMeter를 이용해 사용자를 추가해 비교하는 방식으로 진행

<aside> 💡 Polling

</aside>

✅ 채팅방에 사용자가 들어가면 채팅을 매초 마다 조회하는 방식

polling.png

@Transactional(readOnly = true)
public ChatRoomDetailGetRes getDetailChatRoom(Long chatRoomId, User user) {
  isChatRoomMember(chatRoomId, user.getId());     // 채팅방에 존재하는 사용자 인지 Check
  ChatRoom chatRoom = findById(chatRoomId);

  List<ChatRes> chatList = chatRepository.findAllByChatRoom_Id(chatRoomId)  // 해당 채팅방 내에 있는 채팅을 모두 가져옴
      .orElseThrow(() -> new GlobalException(NOT_FOUND_CHAT))
      .stream()
      .map(ChatRes::to)
      .toList();

  return ChatRoomDetailGetRes.builder()
      .title(chatRoom.getTitle())
      .chatResList(chatList)
      .build();
}