Skip to content
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

Open
wants to merge 24 commits into
base: develop-be
Choose a base branch
from

Conversation

swonny
Copy link
Collaborator

@swonny swonny commented Apr 15, 2024

📄 작업 내용 요약

Ping 통신을 위한 데이터 타입을 변경했습니다.
data에 해당하는 값에 ping, message를 구분하는 type을 추가했습니다.

브랜치를 변경해 새로운 PR을 생성했습니다.

이번 리팩터링은 변경 사항이 조금 있는 편이었습니다.

  1. 먼저 ping과 message를 핸들링하는 클래스를 분리했습니다.
    리뷰 주셨던 것처럼 WebSocketHandler에서 너무 많은 역할을 하고 있다고 생각해서 각각을 핸들링하는 클래스를 분리하고 Composite 클래스에서 타입에 맞춰 provider를 반환하도록 구현했습니다.

  2. MessageTypeHandlerPingTypeHandler에서 사용하는 Map타입의 data를 dto로 변환해 사용하도록 변경했습니다.
    Message와 Ping 타입에 따라 data 구조가 달라서 타입에 따라 request에 어떤 값이 넘어오는지 확인해야 하는 불편함이 있었습니다.
    따라서 DTO로 변환해 사용하도록 변경했습니다.

논의하고 싶은 내용

현재 웹소켓 관련해 전반적인 클래스와 dto명을 이해하기 쉽게 변경하는 작업을 하면 좋을 것 같습니다.
작업하던 중 클래스명만으로 어떤 데이터가 넘어오는지 추측하기가 어렵더라구요ㅠㅠ
혹시 관련해 제이미도 불편함이 있었는지 궁금합니다.
이건 회의에서 이야기해보면 좋을 것 같아요!

지난 리뷰 코멘트

지난 리뷰에 남긴 코멘트도 한번 확인해주세요!

🙋🏻 리뷰 시 주의 깊게 확인해야 하는 코드

📎 Issue 번호

@swonny swonny added refactor 기존 기능에 변경이 없는 구현 변경 시 backend 백엔드와 관련된 이슈나 PR에 사용 labels Apr 15, 2024
@swonny swonny requested a review from JJ503 April 15, 2024 16:37
@swonny swonny self-assigned this Apr 15, 2024
Copy link
Member

@JJ503 JJ503 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

메리 리팩터링 진행하시느라 고생 많으셨습니다!
몇 가지 질문과 컨벤션 관련 수정 사항이 있어 해당 부분 코멘트로 남겨두었습니다.
그런데, type 별 handler에 대한 테스트 코드는 없는데 괜찮을까요?

코멘트 확인 겸 제가 추가한 코드에 대한 확인을 위해 rc로 일단 처리해 두도록 하겠습니다!

Comment on lines -25 to 26
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);
}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

질문

인메모리기에 db와 동일하게 get대신 find로 변경해 주신 게 맞을까요??

Comment on lines +5 to +8
public record PingDataDto(long chatRoomId, long lastMessageId) {

private static final String CHAT_ROOM_ID_KEY = "chatRoomId";
private static final String LAST_MESSAGE_ID = "lastMessageId";
Copy link
Member

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(
Copy link
Member

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) {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

필수

createMessage 아래로 위치해야겠네요!

Comment on lines +75 to +78
return readMessageDtos.stream()
.map(readMessageDto -> MessageDto.of(readMessageDto, isMyMessage(sessionAttributeDto,
readMessageDto.writerId()
))).toList();
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

선택

아래처럼 수정하면 가독성이 더 좋아질 것 같습니다!

Suggested change
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();

@JJ503
Copy link
Member

JJ503 commented Apr 16, 2024

지난번에 말씀드린 대로 type의 대소문자를 무관하게 하도록 하는 로직 추가해 두었습니다.
이 과정에서 매핑을 위해 value를 선언한 부분은 제거했으며, 예외에 대한 커스텀 예외를 생성해 globalExceptionHandler에 예외 처리 추가해 두었습니다!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
backend 백엔드와 관련된 이슈나 PR에 사용 refactor 기존 기능에 변경이 없는 구현 변경 시
Projects
Status: No status
Development

Successfully merging this pull request may close these issues.

2 participants