Spring 을 이용한 프로젝트로 채팅방을 구현을 하는데 사용을 할 기술에 대해서 설명을 하고자 한다.
일단 프로젝트의 채팅방을 구현을 할 때 가장 중요한 목적에 대해서 상기를 해줘야된다. 다수의 사람들이 채팅방을 참여하는 상태가 주가 되다보니, 메세지를 누군가가 보냈으면, 누군가는 받고, 다른 누군가는 메세지를 받지 못하는 불상사는 피해야된다. 즉, 메세지의 안정성이 떨어져서는 안된다. WebSocket으로만은 메세지의 신뢰성 문제를 완벽하게 커버를 할 수 없다는 문제점이 존재한다. 그를 보완하기 위해서는 복잡한 코드를 추가로 요구를 하기 때문에 그 부분을 보완할 수 있도록 RabbitMQ에서 제공이 되는 메세지 안정성을 이용을 할 생각이다.

그러면 어디에 어떻게 쓰이냐인데,
클라이언트 통신 부분은 WebSocket이 사용이 될 예정이다. 클라이언트는 STOMP 프로토콜을 통하여 서버와 실시간으로 연결을 유지를 하고, 메세지 송수신, 채팅방 구독, 알림 수신 관련해서는 실시간 인터페이스 역할을 수행한다.

서버 내 메세지 중계 및 분배의 형태는 RabbitMQ를 사용한다. 서버는 클라이언트로부터 받은 메세지를 RabbitMQ의 Exchange에 발행을 한다. 1대 1 상테에서는 Direct Exchange를 사용하고, 단체 채팅방의 경우는 Topic Exchange 방식을 사용하여 메세지 라우팅 및 중계를 진행한다. 기본적으로 Websocket보다 메세지의 영속성, 재전송, 메세지 누락 방지와 같은 신뢰성 보장 기능 활용이 가능하다.


서버에서 클라이언트 메세지 브로드 캐르스 방식은 WebSocket 기능으로 전달한다. 서버는 RabbitMQ로 부터 수신한 메세지를 받아서 WebSocket을 통해 실시간으로 해당 구독자에게 전달을 한다. 구독자가 여러 서버에 분산되어있어도 RabbitMQ 덕분에 메세지가 정확하게 전달이 된다.
한마디로 중간 통로 역할은 RabbitMQ , 엔드포인트의 역할들은 WebSocket이 담당을 한다고 생각을 하면 된다.
일단 기본적인 구조만 파악을 한 상태로 채팅방을 구현을 할 때 자잘한 문제사항은 그 때 그 때 가서 수정을 해야될 거 같다.
보통 코딩을 하다보면 정규표현식을 사용이 불가피하다는 점을 잘 인지를 하고 있을 것이다. 문자열에서 특정한 규칙이나 패턴을 가진 문자열 집합을 표현하는 언어로, 문자열에서 원하는 조건에 맞는 부분을 찾거나, 검증하거나, 치환을 하는데에 사용되는 강력한 도구이다. 기본적으로 얼추 읽을 수 있는 편이 좋기 때문에 한번 알아보도록 하자.

간단한 패턴으로 이메일 주소를 나타낸다고 했을 때, 아래와 같이 나타낼 수 있다.
-
- /\w+@\w+\.\w+/

해석을 하면 문자열의 끝을 기점으로 /lab/ 이 있고, 4자리의 숫자가 오고, /static/ 에 임의의 한문자와 앞 문자가 1회 이상 반복한 걸 그룹으로 묶은 뒤 문자열의 끝을 지정하는 형태이다.
마무리로 정규 표현식을 자세히 알아보고 싶다면,
RegExr (https://regexr.com/)
RegExr: Learn, Build, & Test RegEx
RegExr is an online tool to learn, build, & test Regular Expressions (RegEx / RegExp).
regexr.com
이 사이트를 이용해보는 것이 좋을 거같다.

설명과 사용한 정규 표현식이 문법적으로 옳은지 확인을 할 수 있고 배울 수 있는 사이트이다.
'멀티캠퍼스' 카테고리의 다른 글
| 외부 저장소 관리(AWS S3 or Cloudflare R2) (1) | 2025.11.17 |
|---|---|
| 프로젝트 PR 및 코드 리뷰 시작 (0) | 2025.11.11 |
| Docker 사용해보기 (0) | 2025.10.28 |
| 백엔드 nginx 연결 및 소셜 로그인 추가하기 (0) | 2025.10.20 |
| 웹 페이지 크롤링 하기 (0) | 2025.10.13 |