WebSocket, Stomp, Kafka, MongoDB, MySQL, Redis를 사용하여 채팅 기능을 구현하였다.이번에는 시간 타입 변경(String -> LocalDateTime)에 의한 성능 개선 경험 그리고 Kafka를 사용한 성능 개선 경험에 대해 작성해보려 한다. 성능 테스트 구성테스트에 앞서 WebSocket 테스트를 위해서는, JMeter에 WebSocket 플러그인을 설치해야 한다. Thread Group 구성웹소켓 연결 시작(WebSocket Open Connection)웹소켓 연결 요청(SEND CONNECT)채팅방 구독 요청(SEND SUBSCRIBE)메시지 전송(SEND CHAT)응답 대기(READ CHAT)웹소켓 연결 해제(DISCONNECT)※ 이때, 채팅방 구독 해제와 웹..
기술 블로그
이전 글에서는 채팅 기능에 WebSocket, Kafka, MongoDB를 사용하는 이유에 대해 작성해보았다.이번에는 채팅 기능에서 사용되는 도메인 설계에 대해 작성해보려 한다. 도메인 설계채팅 기능에 사용되는 도메인과 저장되는 저장소 목록은 다음과 같다.채팅방(ChatRoom): RDBMS채팅 메시지(ChatMessage, Message): MongoDB채팅 알림(ChatNotification, Notification): RDBMS채팅방 입장 상태 (ChatRoomParticipant): REDIS 채팅방(ChatRoom)채팅방은 사용자들이 서로 메시지를 주고받을 수 있는 공간으로, 관계형 데이터베이스(RDBMS)에 저장된다. 채팅방 정보는 사용자 정보와 긴밀히 연결되어 있어, 조회 시 사용자 정보를 ..
성장🪜CI/CD 환경 구축, 모니터링 시스템 구축, 기본적인 CRUD 작업, AOP 구현 등 여러 기술을 활용한 프로젝트를 경험해봤다.이러한 경험을 바탕으로 새로운 기능을 구현해봄으로써, 더 넓은 경험을 쌓고 싶다는 목표를 세웠다.그 과정에서 관심을 끈 것이 바로 채팅 기능이었다.채팅 기능 구현을 위해 필요한 WebSocket<span style="color: #333333; text-align: start..
Refresh Token 문제 및 해결 과정 현재 상황 현재 시스템은 JWT(JSON Web Token)를 활용한 인증 방식을 사용한다. 사용자가 로그인을 통해 인증을 요청하면, 서버는 사용자의 인증을 처리하고 Access Token과 Refresh Token을 발급한다. Access Token에는 사용자의 pk와 역할(role)이 포함되어 있으며, 이는 사용자의 웹 브라우저에 쿠키 형태로 저장된다. 이 Access Token을 활용해 사용자는 서버에 인증이 필요한 데이터 요청을 할 수 있다. 그러나 Access Token에는 사용자에 대한 정보가 포함되어 있기 때문에, 이 토큰이 탈취되면 사용자의 정보 유출의 위험이 있다. 이를 방지하기 위해 서버에서는 Access Token의 유효 시간을 30분으로 ..