-
Notifications
You must be signed in to change notification settings - Fork 4
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Ping 통신을 위한 데이터 타입 변경 #774
base: develop-be
Are you sure you want to change the base?
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
메리 리팩터링 진행하시느라 고생 많으셨습니다!
몇 가지 질문과 컨벤션 관련 수정 사항이 있어 해당 부분 코멘트로 남겨두었습니다.
그런데, type 별 handler에 대한 테스트 코드는 없는데 괜찮을까요?
코멘트 확인 겸 제가 추가한 코드에 대한 확인을 위해 rc로 일단 처리해 두도록 하겠습니다!
public Set<WebSocketSession> getSessionsByChatRoomId(final Long chatRoomId) { | ||
final WebSocketSessions webSocketSessions = chatRoomSessions.get(chatRoomId); | ||
|
||
return webSocketSessions.getSessions(); | ||
public WebSocketSessions findSessionsByChatRoomId(final Long chatRoomId) { | ||
return chatRoomSessions.get(chatRoomId); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
질문
인메모리기에 db와 동일하게 get
대신 find
로 변경해 주신 게 맞을까요??
public record PingDataDto(long chatRoomId, long lastMessageId) { | ||
|
||
private static final String CHAT_ROOM_ID_KEY = "chatRoomId"; | ||
private static final String LAST_MESSAGE_ID = "lastMessageId"; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
질문
변수명이 json의 키 명과 동일하다면 Object.convertValue()
를 통해 자동으로 역직렬화가 수행되지 않나요?
해당 방식을 사용하게 된 이유가 궁금합니다!
return sendMessageDtos; | ||
} | ||
|
||
private void updateReadMessageLog( |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
필수
해당 메서드가 createTextMessage
아래로 내려가야겠네요!
return objectMapper.convertValue(attributes, SessionAttributeDto.class); | ||
} | ||
|
||
private CreateMessageDto createMessageDto(final ChatMessageDataDto messageData, final Long userId) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
필수
createMessage
아래로 위치해야겠네요!
return readMessageDtos.stream() | ||
.map(readMessageDto -> MessageDto.of(readMessageDto, isMyMessage(sessionAttributeDto, | ||
readMessageDto.writerId() | ||
))).toList(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
선택
아래처럼 수정하면 가독성이 더 좋아질 것 같습니다!
return readMessageDtos.stream() | |
.map(readMessageDto -> MessageDto.of(readMessageDto, isMyMessage(sessionAttributeDto, | |
readMessageDto.writerId() | |
))).toList(); | |
return readMessageDtos.stream() | |
.map(readMessageDto -> MessageDto.of( | |
readMessageDto, | |
isMyMessage(sessionAttributeDto, readMessageDto.writerId()) | |
)).toList(); |
지난번에 말씀드린 대로 type의 대소문자를 무관하게 하도록 하는 로직 추가해 두었습니다. |
📄 작업 내용 요약
Ping 통신을 위한 데이터 타입을 변경했습니다.
data에 해당하는 값에 ping, message를 구분하는 type을 추가했습니다.
브랜치를 변경해 새로운 PR을 생성했습니다.
이번 리팩터링은 변경 사항이 조금 있는 편이었습니다.
먼저 ping과 message를 핸들링하는 클래스를 분리했습니다.
리뷰 주셨던 것처럼
WebSocketHandler
에서 너무 많은 역할을 하고 있다고 생각해서 각각을 핸들링하는 클래스를 분리하고 Composite 클래스에서 타입에 맞춰 provider를 반환하도록 구현했습니다.MessageTypeHandler
와PingTypeHandler
에서 사용하는 Map타입의 data를 dto로 변환해 사용하도록 변경했습니다.Message와 Ping 타입에 따라 data 구조가 달라서 타입에 따라 request에 어떤 값이 넘어오는지 확인해야 하는 불편함이 있었습니다.
따라서 DTO로 변환해 사용하도록 변경했습니다.
논의하고 싶은 내용
현재 웹소켓 관련해 전반적인 클래스와 dto명을 이해하기 쉽게 변경하는 작업을 하면 좋을 것 같습니다.
작업하던 중 클래스명만으로 어떤 데이터가 넘어오는지 추측하기가 어렵더라구요ㅠㅠ
혹시 관련해 제이미도 불편함이 있었는지 궁금합니다.
이건 회의에서 이야기해보면 좋을 것 같아요!
지난 리뷰 코멘트
지난 리뷰에 남긴 코멘트도 한번 확인해주세요!
🙋🏻 리뷰 시 주의 깊게 확인해야 하는 코드
📎 Issue 번호