Modo 서버의 웹소켓은 STOMP 라이브러리를 활용했습니다. 각 파트 별 STOMP 라이브러리 임포트 해서 기본 설정 해주시면 감사하겠습니다.
웹 프론트 환경의 경우, 초기에 STOMP Client를 만들 때 CORS 에러가 발생할 수 있습니다. 해당 부분 유의하셔서 개발 중에 만약 에러 발생하면 바로 알려주시면 감사하겠습니다.
1. 엔드포인트
Client -> Server sending endpoint : /app/sendMessages
클라이언트가 메세지를 전송할 때는 오직 한 개의 엔드포인트로 전송하면 됩니다.
Server -> Client sending endpoint : /topic/{$usersId}
서버에서 클라이언트로 메세지 전송 시에는 위와 같이 각 사용자 PK에 맞는 URL로 전송합니다. 따라서 각자 로그인 중인 사용자의 PK를 조합해서 URL을 구독하시면 됩니다.
WebSocket Broker endpoint : ws://modolib.com/modo-websocket
아마 각자 STOMP 라이브러리에서 brokerURL을 셋팅하는 부분이 있을 겁니다. 해당 URL 사용하시면 됩니다.
2. 사용법
메세지 전송 시에는 ChatSendingMessages 객체를 Body에 담아서 보내주시면 됩니다.
public class ChatSendingMessages {
private Long booksId;
private String sender;
private String receiver;
// timeStamp 수정 완료
private String content;
// 이하 생략
sender에는 대여자 또는 구매자, receiver에는 판매자 (책 주인) usersId를 담아주시면 됩니다. booksId에는 거래하고자 하는 책의 PK, 그리고 content에는 보내는 내용을 같이 넣어 주시면 됩니다.
등록된 책 화면에서 바로 메세지를 전송할 때는 채팅방의 유뮤나 채팅방의 PK를 알 수 없습니다. 그래서 위의 API 하나를 사용해서 채팅방 조회 (없다면 채팅방 생성 후 조회) 및 전송까지 하나로 통합되어 있으니, 그대로 사용하시면 됩니다.
메세지 수신 역시 ChatSendingMessages 객체가 전송될 예정입니다.
3. 논의점
채팅 화면을 보지 않은 상태로 메세지 전송 및 수신은 위와 같이 진행하면 될 것 같습니다만, 채팅 리스트가 있을 때 클릭 후 채팅방으로 이동해서 메세지를 보내는 경우에는 어떤 식으로 처리할 지 논의가 필요합니다. 이때는 이미 채팅방의 PK를 알 수 있는 상황이기에 이를 사용하는게 나을지 아니면 기존의 API를 그대로 사용하는게 나을지 검토해야 합니다.
또한 위의 ChatSendingMessages 객체를 JSON화해서 수신한다고 가정하면, 해당 메세지가 속한 채팅방의 PK를 수신자가 알 수 없습니다. 이 역시 추가적인 논의가 필요합니다.
WebSocket API 사용법
0. 서론
STOMP
라이브러리를 활용했습니다. 각 파트 별 STOMP 라이브러리 임포트 해서 기본 설정 해주시면 감사하겠습니다.1. 엔드포인트
Client -> Server sending endpoint : /app/sendMessages 클라이언트가 메세지를 전송할 때는 오직 한 개의 엔드포인트로 전송하면 됩니다.
Server -> Client sending endpoint : /topic/{$usersId} 서버에서 클라이언트로 메세지 전송 시에는 위와 같이 각 사용자 PK에 맞는 URL로 전송합니다. 따라서 각자 로그인 중인 사용자의 PK를 조합해서 URL을 구독하시면 됩니다.
WebSocket Broker endpoint : ws://modolib.com/modo-websocket 아마 각자 STOMP 라이브러리에서 brokerURL을 셋팅하는 부분이 있을 겁니다. 해당 URL 사용하시면 됩니다.
2. 사용법
ChatSendingMessages
객체를 Body에 담아서 보내주시면 됩니다.sender에는 대여자 또는 구매자, receiver에는 판매자 (책 주인) usersId를 담아주시면 됩니다. booksId에는 거래하고자 하는 책의 PK, 그리고 content에는 보내는 내용을 같이 넣어 주시면 됩니다.
등록된 책 화면에서 바로 메세지를 전송할 때는 채팅방의 유뮤나 채팅방의 PK를 알 수 없습니다. 그래서 위의 API 하나를 사용해서 채팅방 조회 (없다면 채팅방 생성 후 조회) 및 전송까지 하나로 통합되어 있으니, 그대로 사용하시면 됩니다.
ChatSendingMessages
객체가 전송될 예정입니다.3. 논의점
ChatSendingMessages
객체를 JSON화해서 수신한다고 가정하면, 해당 메세지가 속한 채팅방의 PK를 수신자가 알 수 없습니다. 이 역시 추가적인 논의가 필요합니다.