저번 WebSocket으로 채팅 기능과 알림 기능을 사용을 하기로 했다.


기본적으로 Exchange를 하는 방식은 topic 방식과 queue 방식을 사용을 한다. topic 방식은 주로 알림 기능이나 다인 채팅방 기능에서 사용이 되는 경우이고, queue 방식은 1대1 채팅을 할 때 사용이 되는 기술이다. 간단한 설명을 더 해보자면 queue 방식은 큐는 보통 통로가 좌우 한쌍이라고 생각하면 편하다. 그래서 한쪽에 한명씩 1대1로 연결을 해서 대화하는 방식이라고 생각하면 된다. topic의 경우는 구독과 발행으로 나뉘어진다. 발행은 주로 대화를 생성을 하는 사람이 발행 담당을 하고, 구독이 발행을 한 사람의 정보를 지속적으로 갖고 온다는 개념으로 이해를 하면 된다.

이 쪽은 알림 생성 Service 영역이다. 위쪽은 데이터베이스에 저장하는 코드이고, 그 아래에 있는 코드가 config에서 만든 메소드를 사용한다. 역할은 대상 사용자 ID에게 queue 방식을 사용해서 데이터를 전송하는 것이다.

채팅에서는 사용하는 방식이 3가지 정도 있는데 그 중 하나인 메세지를 전송을 했을 때, 알림이 오는 기준이다. 방 안에 여러명이 있는 걸 고렬르 해서 topic 방식을 사용한다는 걸 인지해야한다. 그리고 방 안에서 내가 아닌 사람이 메세지를 보냈을 때 알림이 오는 걸 조건으로 하였다.
그리고 채팅 쪽과 알림 쪽의 기능은 좀 연관이 되어있는 좀 있다. 방에 초대하면 초대했다는 알림, 방에서 새로운 메세지가 도착했을 때, 알림. 방 만들었을 때, 거기 초대 인원에 있으면 그 때도 알림이 전송이 되게 한다.

위 코드는 사용자 초대를 할 때 사용하는 기능이다. 예외 처리로 초대한 인원이 이미 채팅방에 존재할 시 throw 처리를 하는 코드이고, 두 번째 예외처리로 모둠 채팅방에는 인원 제한이 존재하는데 제한이 초과되면 throw 예외처리가 된다. 그리고 출력 멤버 조정 및 데이터베이스에 저장한 후에 알림을 보내는 형태이다.

이거는 기존에 있는 방에서 초대를 해서 하는 방식이 아닌, 새로운 채팅방을 생성을 할 때 알림이 가는 형태이다. 위 쪽에는 얼추 방 생성하는 코드와 예외처리 코드가 존재하고, 제일 하단에 있는 부분이 방 초대 알림이 가는 형태이다.
채팅 부분과 알림 형태가 연관되어있는 부분은 위에도 말했듯이 3개 정도 있고, 그 외에도 comment 부분에 댓글이 달리면 알림이 오는 기능과 친구 신청을 하면 알림이 오는 형태가 추가가 된다.

현재 채팅화면에 보이는 건 채팅 탭 나눌수있는 환경, 새로운 채팅 만들기, 채팅 칠 수 있는 공간, 채팅방에 존재하는 인원, 채팅방 나가기 그리고 친구가 되어있는 환경에서 친구를 채팅방으로 초대를 할 수 있는 기능이 존재한다. 기본적으로 Service와 Controller를 통해서 기능적인 측면에서는 다 구현이 되어있으며, 디자인은 최대한 현대적인 스타일로 마감처리를 진행하였다.

나름 힘들었던 점을 뽑아보면, 지금 프론트하고 백엔드가 나뉘어져있는데 , 프론트가 만든 결과물에 백엔드 연결하는 과정을 하다보니까 기능 구현까지는 별로 어려움이 없었지만, 연결하는 과정이 매우 골치가 아팠었다. 추가로 예외처리를 하는 과정도, 어디에서 예외처리를 진행을 해야될지 고민하는 시간이 개발하면서 많이 들었던 거 같다.
'멀티캠퍼스' 카테고리의 다른 글
| 외부 저장소 관리(AWS S3 or Cloudflare R2) (1) | 2025.11.17 |
|---|---|
| 프로젝트 PR 및 코드 리뷰 시작 (0) | 2025.11.11 |
| spring boot Websocket와 RabbitMQ을 이용한 채팅 기능 공부 / 정규 표현식 배우기 (0) | 2025.11.05 |
| Docker 사용해보기 (0) | 2025.10.28 |
| 백엔드 nginx 연결 및 소셜 로그인 추가하기 (0) | 2025.10.20 |