1.
프로필 조회시
a.
응답값에 userId를 포함 해야할지
b.
본인 프로필 조회 요청시 userId를 함께 요청할지
2.
채팅목록 조회시 프로필을 포함하여 같이 조회할 것이냐 따로 조회할것이냐
a.
조회시 메시지 조회, 프로필 조회Api로 따로 던지기 >> 2번 요청
b.
조회시 반환값을 같이 가져오기 queryDsl로 조회 >> 1번요청
정리
Polling 방식 채팅 구현 방식
현재 채팅방을 상세 조회하면 채팅방의 제목과 채팅 리스트가 추출이된다.
우리는 이와 더불어 채팅을 보낸 사용자의 이름과 프로필 이미지가 필요한 상태이다.
이 사용자의 이름과 프로필 이미지를 어떻게 가져올 것인가에 대한 논의!
첫번째 의견
기존 API를 보내면 채팅방의 제목과 채팅 리스트가 추출된다.
또한 채팅 리스트에는 채팅을 보낸 userId가 추출된다.
이 응답값의 userId를 활용해서 한번더 프로필 조회를 통해서 profileImage와 username을 가져온다.(프로필 채팅방에 들어갈때 조회)
// 메시지를 새로받아서 조회할때마다 데이터를 가져옴
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class ChatRoomDetailGetRes {
private String title;
private List<ChatRes> chatResList = new ArrayList<>();
}
-------------------------------------------------------------------------
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public static class ChatRes {
Long userId;
String message;
LocalDateTime messageTime;
}
Java
복사
두번째 의견
기존 응답값의 필드를 추가해서 응답을 가져오자
// 메시지를 새로받아서 조회할때마다 데이터를 가져옴
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class ChatRoomDetailGetRes {
private String title;
private List<ChatRes> chatResList = new ArrayList<>();
}
-------------------------------------------------------------------------
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public static class ChatRes {
Long userId;
String username;
String profileImage;
String message;
LocalDateTime messageTime;
}
Java
복사
롱 폴링 형식이 아닌 간단한 polling 형식으로 구현 (프론트에서 서버에 일정시간을 간격으로 두고 getApi요청)
위와 같이 새로운 메세지가 없는지 확인하기 위해 일정시간을 텀으로조회 쿼리를 날려야함.
(현재 채팅방 상세목록 가져오기 api만 보내는 중)
>> 실시간성 떨어짐
QueryDsl과 JPA JMeter로 로컬 성능 테스트
>> 10000개 데이터 100번 조회 요청시에는 JPA가 더 유의미(단순 쿼리)
채팅방 생성시 >> Post로? 튜터님이 바뀔 여력이 있으니 POST가 올바르다고 하네여! 오홍
>> 1:1 채팅이 있으면 해당 채팅방 id를 응답값으로 반환
/ 1:1 채팅이 없으면 채팅방을 생성하고 채팅방 id를 응답값으로 반환.
삭제시 >> 채팅에 소프트딜리트 필드추가 >> 프론트 단에서 isDeleted 가 true면 “삭제된 메세지입니다” 뜰 수 있도록