화면
배경
매칭 된 사람들끼리 채팅을 할수있도록 합니다.
구현한 기능
•
BE
채팅
- Websocket과 Stomp,RabbitMQ를 이용하여 채팅 시스템을 구현하였습니다.
RabbitMQ 로 외부 브로커를 구현함으로써 API서버가 여러 대 가 운영되는 환경에서도 같은 topic에 대해 구독 상태라면 메세지를 송/수 신 할 수 있도록 하였습니다.
채팅 저장/불러오기
- 채팅 을 저장하는데에는 MongoDB를 사용하여 추후 사용량이 늘어나도 수평적 확장이 용이하게 구성하였습니다. (채팅의경우 다수의 사용자가 채팅을 읽고 쓰는 일이 많으며 추가적으로 join 필수적으로 안해도되도록구성하였습니다.)
채팅방 생성/채팅방 목록 불러오기(roomId)
각각의 채팅방에서는 채팅 유저정보 가 필요하기 때문에 mysql에 채팅방에 관련된 정보들을 구성하였습니다.
•
FE
채팅 roomId 생성 및 채팅 목록 생성
- 1:1 채팅을 위한 roomId를 생성하기 위해 서버에 ‘POST’ 요청을 보낸 후, 채팅방으로 이동 함과 동시에 ‘GET’ 요청을 통해 채팅 목록 상태 관리를 하였습니다.
채팅 서버 연결 및 구독 설정
- WebSocket을 이용해 STOMP 서버와 연결을 수립하며, 연결이 성공적으로 이루어지면 특정 주소(’/topic/chat.history …’)를 구독(subscribe)하여 이전 대화 내용을 서버로부터 받아옵니다.
- 이전 대화 내용을 받아온 후 구독한 주소를 unsubscribe하고, roomId를 추가한 새로운 주소에 구독합니다.
- 대화 도중 채팅 목록에 있는 다른 사용자를 선택할 경우, STOMP 연결을 해제(deactivate)하고 사용자를 초기화 합니다. 선택된 사용자와의 채팅을 위해 WebSocket 연결을 다시 설정합니다.
채팅 전송
- STOMP 프로토콜을 이용하여 입력된 메시지와 작성자 정보를 roomId를 추가한 (‘/pub/chat/…’) 서버 주소로 전송합니다.