1대1매칭 이후 1대1 채팅으로 이어지는 시퀸스 다이어 그램-(11)(우리 지금 만나)
·
우리 지금 만나
해당 시퀸스 다이어그램은 1대1 매칭 후 매칭된 두 유저에게 1대1 채팅방에 자동 생성된 후 Client A가 채팅 메세지를 보낸후 Client B에게 전달되는 과정을 간략하게 표현한 다이어그램입니다.   다이어그램 순서 설명 1. 매칭 요청(Client A → Main Server):Client A가 Main Server로 매칭을 요청합니다.Main Server는 매칭 서버로 사용자 정보를 전달합니다. 2. 매칭 성공 알림(Matching Server → Main Server):Matching Server는 매칭 성공 여부를 판단한 후 Main Server로 알림을 보냅니다.이 과정에서 매칭 결과는 MySQL에 저장됩니다.  3. RabbitMQ를 통한 이벤트 전달:Matching Server가 매칭 ..
1대1 채팅 시퀸스 다이어그램 정리-(10)(우리 지금 만나)
·
우리 지금 만나
현제 구현한 1대1 채팅 기능이 어떻게 작동이 되는지 시퀸스 다이어그램을 통해 알려드리겠습니다. 왜 기능을 구현할때 시퀸스 다이어그램으로 정리하는 이유가 무엇인가요?시퀀스 다이어그램을 그려야 하는 이유는 시스템 설계와 기능 구현 과정에서의 명확한 이해와 커뮤니케이션을 돕기 위해서입니다. 이를 구체적으로 살펴보면 다음과 같습니다: 1. 기능의 흐름을 시각화 시퀀스 다이어그램은 사용자와 시스템 간의 상호작용, 또는 시스템 내부의 컴포넌트 간 데이터 흐름을 시간 순서에 따라 시각적으로 표현합니다.이를 통해 기능의 동작 방식을 한눈에 파악할 수 있어 설계 과정에서 누락된 부분이나 비효율적인 흐름을 사전에 발견할 수 있습니다. 2. 명확한 요구사항 분석 시퀀스 다이어그램은 요구사항을 기능적으로 상세히 표현하기에 ..
채팅 시스템 성능 개선-(9)(우리 지금 만나)
·
우리 지금 만나
Direct Exchange 사용 메세지 라우팅의 간결성정확한 라우팅 Direct Exchange는 라우팅 키(Routing key)를 기반으로 메세지를 특정 큐로 직접 전달합니다. 특히 사용자가 특정 채팅방(큐)에만 메세지를 보내야 할 경우 적합합니다. 다른 라우팅 방식과 비교했을땐?Fanout Exchange: 메시지를 모든 큐에 브로드캐스트함 → 1:1 채팅에서는 과도한 자원 낭비.Topic Exchange: 패턴 매칭을 통한 라우팅 → 복잡성이 증가할 수 있음. 성능 효율성으로는 어떤 이점이 있나요?낮은 오버헤드메시지가 라우팅 키로 정확히 하나의 큐로만 전달되므로 라우팅 오버헤드가 적습니다. 메시지를 복사하거나 불필요한 큐로 보내는 작업이 없기 때문에 메시지 처리 속도가 빨라집니다.1:1 채팅에서..
메세지 전송 실패-직렬화 문제
·
WebSocket/트러블 슈팅
문제 원인현재 프로젝트의 ChattingController에서 메시지를 전송할 때 발생하는 오류이다. 에러 메시지에서 SimpleMessageConverter는 String, byte[], 그리고 Serializable 형식의 페이로드만 지원한다고 나타나고 있으며, 전송된 객체가 ChatMessageRequestDto라는 DTO 클래스임을 알 수 있다. 원인 분석ChattingController에서 ChatMessageRequestDto 객체를 전송하기 위해 STOMP 메시지 변환기가 SimpleMessageConverter로 설정되어 있을 가능성이 있다.SimpleMessageConverter는 String, byte[], 또는 Serializable이 아닌 객체를 직렬화하여 전송할 수 없기 때문에, ..
채팅방 목록 순환참조 문제
·
Spring/Spring 트러블 슈팅
원인은?프로젝트에서 채팅방 목록을 조회할 때 발생하는 순환 참조 문제를 해결하기 위해 코드를 개선하였다. 기존에는 ChatRoom 엔티티를 그대로 반환하거나 참조하는 과정에서 @ManyToOne 또는 @OneToMany와 같은 양방향 관계로 인해 순환 참조가 발생할 수 있었으나, 이로 인해, 직렬화 과정에서 무한 루프에 빠지는 문제가 있었다. 어떻게 해결했나?이를 해결하기 위해 DTO(Data Transfer Object)를 활용하여 필요한 필드만 가져오도록 하였다. ChatDto.ChatRoomDto라는 DTO를 정의하여 채팅방 조회 시 필요한 최소한의 필드(chatRoomId, createdAt)만 반환하도록 하고,ChatRoom 엔티티의 조회 메서드를 변경하여 ChatRoomDto로 변환 후 반환하..
Websocket 권한문제
·
WebSocket/트러블 슈팅
웹소켓에 엔트포인트를 알맞게 넣었지만 403이 뜨면서 권한문제로 에러가 발생하였다. 보통 Spring Security에서 권한을 제안하기에 requestMatcher를 통해 엔드포인트에도 권한을 부여해야한다.  requestMatcher에 엔트포인트 경로를 추가하여 권한을 부여한다. .requestMatchers란?접근 권한 제어requestMatchers로 특정 경로에 접근할 수 있는 권한을 제어할 수 있습니다. 예를 들어, /admin/** 경로는 관리자 권한만 접근하도록 설정할 수 있다. 인증/비인증 경로 설정로그인, 회원가입 등 인증이 필요 없는 페이지는 permitAll()로 설정하여 누구나 접근할 수 있도록 할 수 있다. 정확한 경로 매칭requestMatchers에 정규 표현식이나 와일드카드..
RabbitMQ 로그인 문제
·
RabbitMQ/트러블 슈팅
로컬에서 서버가 정상적으로 실행이되는지 알기 위해 런버튼을 눌러서 서버가 정상적으로 작동되는지 확인해 보았다. 로그인을 하였지만 권한 문제로 로그인을 못하고 있다....다만 RabbitMQ Management에 접속하는건 가능하다.그리고 처음에 RabbitMQ를 실행하여도 adminstrator 권한과 vitual hosts를 받게 된다 (초기 비밀번호 1234) 그러나 새로 계정을 만들어서 권한이 없다면 해당 명령어를 사용한다. (필자는 docker에다가 RabbitMQ 설치했으므로 docker exec에서 하는 방식으로 알려드림) 사용자 추가rabbitmqctl add_user  사용자에 권한 부여rabbitmqctl set_permissions -p ".*" ".*" ".*" 사용자에 권한 부..
STOMP란?
·
STOMP
STOMP란?STOMP는 단순(또는 스트리밍) 텍스트 지향 메시징 프로토콜입니다.STOMP는 상호 운용 가능한 와이어 포맷을 제공하여 STOMP 클라이언트가 모든 STOMP 메시지 브로커와 통신할 수 있도록 하며, 다양한 언어, 플랫폼 및 브로커 간에 쉽고 광범위한 메시징 상호 운용성을 제공합니다.STOMP는 HTTP 디자인 학교에서 나온 매우 간단하고 구현하기 쉬운 프로토콜입니다. 서버 측은 잘 구현하기 어려울 수 있지만, 클라이언트를 작성하여 연결하는 것은 매우 쉽습니다. 예를 들어 Telnet을 사용하여 모든 STOMP 브로커에 로그인하고 상호 작용할 수 있습니다! -STOMP 공식 사이트https://stomp.github.io/ STOMPSTOMP is a very simple and easy ..
RadditMQ란?
·
RabbitMQ
RabbitMQ는 클라우드 환경, 온프레미스 및 로컬 머신에 쉽게 배포할 수 있는 안정적이고 성숙한 메시징 및 스트리밍 브로커입니다. -RabbitMQ 공식 사이트-https://www.rabbitmq.com/ RabbitMQ: One broker to queue them all | RabbitMQWhy RabbitMQ? RabbitMQ is a reliable and mature messaging and streaming broker, which is easy to deploy on cloud environments, on-premises, and on your local machine. It is currently used by millions worldwide.www.rabbitmq.com Rabb..
1대1 채팅 서비스 구현 계획-(8)(우리 지금 만나)
·
우리 지금 만나
1대1 매칭서비스가 성사 된 이후 그 둘에 대해서만 채팅이 가능하게 하는 서비스 구현 계획을 세우고 있습니다.  이에 대한 연관관계는?1대1 매칭 서비스가 성사된 이후 1대1 채팅 서비스를 구현할 때 필요한 주요 연관관계는 사용자와 채팅 세션 또는 채팅 메세지 간의 관계가 있습니다.  엔티티 구조사용자(Users)1대1 매칭(Matching) 각 사용자는 1대1 매칭 엔티티를 통해 매칭 관계를 설정합니다. 1대1 매칭(Matchings)일대다(User와 연관): 두 명의 사용자(user_id_1, user_id_2)를 연결하여 매칭을 성사시킵니다.1대1 채팅세션(chatrooms): 매칭이 완료된 후 채팅 세션을 생성하여 두 사용자가 연결될 수 있도록 합니다. 1대1 채팅 세션(chatrooms)필드: ..