Skip to content

WebSocket API  #43

@hwanld

Description

@hwanld

WebSocket API 사용법

0. 서론

  • 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를 수신자가 알 수 없습니다. 이 역시 추가적인 논의가 필요합니다.

Metadata

Metadata

Labels

documentationImprovements or additions to documentation

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions