미소를뿌리는감자의 코딩
[Aper] 채팅 새로운 알림 수신 시 처리 본문
1. 개요
이번에, 기본적인 채팅 골격은 완성된 상태에서, 새로운 채팅을 수신하게 되었을 때의 코드를 작성해야했다.
이런식으로 반환을 해주어야 했다.
어려운 점은, 새로운 메시지 수신 시, 해당 채팅방의 최근 메시지와, 읽지 않음 유무를 판단해서 서버에서 client에서 요청을 보내야 한다는 점이다.
2. 본문
유저가 마지막으로 해당 채팅방에 접속한 시간을 기록해 두어야 하므로, client에서 heartbeat로 서버에게 요청을 보내게 된다. (메인 서버에 요청을 보내도록 할 것 같다.)
서버는 이를 바탕으로, chatParticipant라는 repository의 LastVisited인자를 수정해 준다.
또한 해당 채팅방에서 읽지 않은 메시지가 있는지 유무를 판단해 주어야 하므로, 최근 메시지의 LocalDateTime을 가져와 준다.
만약, 최근 메시지의 시간이 더 뒤에 있다면, notRead를 true를 . 한상태로 client에게 넘겨준다.
또한 현재 채팅방에 참여하고 있는 와중, 다른 채팅방에서 새로운 메시지를 수신하게 된다면, 채팅방 목록에서 해당 채팅방의 새로운 메시지를 최근 메시지로 띄우고, 빨간색 점으로 표시를 할 수 있도록 알려줘야 한다.
이를 구현하기 위해서, 만약 서버에 새로운 메시지가 도착할 경우, 해당 채팅방을 구독하고 있는 client에게 websocket으로 알림을 보내야 한다. 이를 위해서는, client는 사이트를 접속하면서, 모든 채팅방의 queue를 구독 처리를 해두어야 한다.
그래야만이 새로운 채팅방에 정보가 수정 되더라도 이를 반영해 줄 수 있다.
3. 추후
이렇게 구현을 생각한 것을 코드 상에서 더 구체화 해서 생각해 보도록 한다. 실질적으로 적용해도 될 지...
이후, client skeleton code를 작성해서 코드가 알맞게 작성되었는지 테스트를 진행한다.
배포를 진행하며, 이번에는 채팅 서버와 메인 서버의 mysql을 통합해서 배포할 수 있도록 한다.
'프로젝트' 카테고리의 다른 글
[Aper] 채팅 목록 반환 w. read status feat (0) | 2024.11.08 |
---|---|
[Aper] 읽음 처리 전 유지보수 (0) | 2024.11.05 |
[Aper] 채팅방 형성 과정에 대한 고찰 (0) | 2024.10.29 |
[Aper] 메시지 큐 - RabbitMQ 도입 (0) | 2024.10.16 |
[Aper] WebSocket + STOMP + SockJS (2) | 2024.10.11 |