<aside>
💡 우리팀은 채팅 서비스의 통신 방식을 [Polling
, Websocket
] 후보로 생각을 했었다.
이 두개의 통신 방식에 대해서는 많은 레퍼런스가 존재하기에 Websocket
이용해 통신을 하는
방법이 성능적으로 우수하다는 것을 알 수 있었다.
서비스의 Scope
를 작게 기획하여 두개의 기술을 모두 접목해 이 둘의 차이점을 알아보려고 한다.
</aside>
<aside> 💡 Polling
</aside>
클라이언트가 n초 간격으로 request
를 서버로 계속 날려서 response
를 전달받는 방식이다.
장점 / 단점
<aside> 💡 Websocket
</aside>
웹소켓은 HTML5
표준 기술로, 사용자의 브라우저와 서버 사이의 동적인 양방향 연결 채널을 구성한다.
Websocket API
를 통해 서버로 메세지를 보내고, 요청 없이 응답을 받아오는 것이 가능하다.
장점 / 단점
JMeter
를 이용해 사용자를 추가해 비교하는 방식으로 진행<aside> 💡 Polling
</aside>
@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();
}