기존 자기주도 프로젝트로 실시간 채팅 어플리케이션은 User 정보만 Mysql에서 관리하고 나머지 세션, 채팅방, 채팅 메시지는 redis에서 관리하는 구조로 코드를 짰었다.

리팩토링 사항

  1. 채팅 어플리케이션 erd를 짜서 data를 Mysql에서 관리한다
  2. websocket에 연결할때는 Session방식이 사용되지 않는데 이중으로 Jwt를 사용하여 실시간 채팅 어플리케이션의 보안을 높인다
  3. 채팅 메시지를 저장할때 실시간으로 redis pub/sub를 하는 중 비동기적으로 mysql에 채팅 메시지를 저장한다.
  4. 처음 들어올때 chating message 가져오기

추후 개발

  1. 친구 추가 기능 생성
  2. Redis를 캐시화 하여 성능 up

채팅 어플리케이션 erd 구조

스크린샷 2024-08-26 오후 11.00.49.png

회원-채팅방의 관계는 N:N으로 확립되었으므로, 채팅 참여라는 Join 테이블을 만들어 회원-채팅참여-채팅방의 관계를 1:N:1로 변경해주었다.

이렇게 구성해주면 채팅방 입장에서는 1번 채팅방에 참여한 회원들의 목록을 볼 수 있고, 회원 입장에서는 1번 회원이 참여한 채팅방의 목록을 확인할 수 있다.

  1. 로그인 및 회원가입
  2. 채팅방리스트 확인