Redis란?Redis(Remote Dictionary Server)는 오픈 소스 기반의 인메모리(in-memory) 데이터 구조 저장소로, 매우 빠른 읽기/쓰기 성능을 제공하는 Key-Value 저장소다. 단순한 Key-Value 저장소를 넘어 다양한 데이터 구조를 지원하여 캐시(Cache), 메시지 브로커, 세션 관리 등 다양한 분야에서 활용된다. Redis의 주요 특징✅ 빠른 성능: 데이터를 메모리에 저장하므로 디스크 기반 데이터베이스보다 빠른 응답 속도를 제공함 (평균 응답 시간 ✅ 다양한 데이터 구조 지원: String, Hash, List, Set, Sorted Set 등 여러 데이터 타입을 제공.✅ 지속성 옵션 제공: 데이터를 디스크에 저장할 수 있어 장애 발생 시 데이터 복구 가능.✅ Pu..
전체 글

프로젝트 구성루트 폴더(miri-miri-msa)core-moduleuser-service-modulegoods-service-moduleorder-service-module 그리고 루트 폴더의 settings.gradle 파일과 build.gradle 파일을 다음과 같이 설정한다.setggins.gradle (root 프로젝트)rootProject.name = 'miri-miri-msa'include 'core-module'include 'user-service-module'include 'goods-service-module'include 'order-service-module' build.gradle (root 프로젝트)plugins { id 'java'..

채팅 기능 기본 설정 설명에 앞서, 시스템에서 채팅 기능이 어떻게 동작하는지 로직을 우선 설명하도록 한다. 웹소켓 생명주기 관리🥸우리 시스템의 대략적인 웹소켓 연결 과정은 다음과 같다. 웹소켓 연결 초기화사용자가 로그인을 완료하면, "ISLOGIN" 쿠키 값을 확인하여 로그인 상태(True)일 경우에 한 번만 웹소켓 연결을 요청한다.웹소켓 연결 유지 관리웹소켓 연결이 성공적으로 이루어지면, 서버는 사용자의 ID를 웹소켓 세션에 저장한다.리액트 클라이언트는 웹소켓을 통한 모든 통신 과정을 진행하기 전에 웹소켓 연결 상태를 확인한다. 연결이 끊어진 경우, 자동 재연결 시도와 함께 필요한 토픽 구독을 재요청한다.토픽 구독 및 메시지 처리사용자는 서버로부터 자신의 ID를 받고, 이를 사용하여 알림 및 채팅방 ..

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)※ 이때, 채팅방 구독 해제와 웹..

현재 이력서를 작성하고 있는데, 성능 테스트 관련 내용을 정리해 작성하려 한다.기존에 성능 테스트를 수행하고 작성한 내용이 있다. 이때, Prometheus, Grafana를 통해 모니터링 환경을 구축하고 JMeter를 사용해 대용량 트래픽 성능 테스트를 수행했는데 JMeter 사용법과 제대로된 성능 테스트 방법을 자세히 알지 못했다. 그래서 이번을 계기로 성능 테스트 관련 내용을 확실히 하고 넘어가려 한다. 성능 테스트란?백엔드 애플리케이션에서 성능 테스트란?백엔드 애플리케이션의 성능 테스트는 특정 워크로드에서 애플리케이션의 안정성, 속도, 확장성 및 반응성이 어떻게 유지되는지를 판별하는 과정이다. 이것은 애플리케이션의 성능을 측정하고, 개선할 수 있는 영역을 식별하기 위해 수행된다. 🚀성능 테스트의..

이전 글에서는 채팅 기능에 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..

Nginx란?Nginx는 웹 서버 소프트웨어이다.웹 서버는 클라이언트의 HTTP 요청을 받아 HTML 문서나 다른 파일들을 반환하는 역할을 수행한다.Nginx는 이런 웹 서버의 기능을 수행할 뿐만 아니라, 리버스 프록시, 로드 밸런서, 메일 프록시 등의 기능도 제공한다.웹 서버Nginx는 빠르고 안정적인 웹 서버로 알려져 있다.정적 파일을 효율적으로 처리할 수 있으며, 동시에 수많은 연결을 처리할 수 있는 능력이 있다.리버스 프록시클라이언트가 요청을 보냈을 때, 이 요청을 실제 서버에게 전달하고, 실제 서버의 응답을 클라이언트에게 다시 전달하는 역할을 한다. 이를 통해 서버의 보안을 강화하거나, 클라이언트에게는 하나의 서버로 보이게 하면서 실제로는 여러 서버에 요청을 분산시키는 등의 기능을 구현할 수 있..

Refresh Token 문제 및 해결 과정 현재 상황 현재 시스템은 JWT(JSON Web Token)를 활용한 인증 방식을 사용한다. 사용자가 로그인을 통해 인증을 요청하면, 서버는 사용자의 인증을 처리하고 Access Token과 Refresh Token을 발급한다. Access Token에는 사용자의 pk와 역할(role)이 포함되어 있으며, 이는 사용자의 웹 브라우저에 쿠키 형태로 저장된다. 이 Access Token을 활용해 사용자는 서버에 인증이 필요한 데이터 요청을 할 수 있다. 그러나 Access Token에는 사용자에 대한 정보가 포함되어 있기 때문에, 이 토큰이 탈취되면 사용자의 정보 유출의 위험이 있다. 이를 방지하기 위해 서버에서는 Access Token의 유효 시간을 30분으로 ..

AWS 보안 그룹 설정 현재 EC2 인스턴스 하나와 RDS 하나를 생성한 상태이다. 각각은 별도의 보안 그룹을 사용한다. 이번 글에서는 각각의 보안 그룹에 대해 자세히 알아본다. EC2 보안 그룹 SSH (Secure Shell): SSH는 원격 컴퓨터를 안전하게 제어하기 위한 프로토콜이다. 이를 통해 사용자는 네트워크를 통해 다른 컴퓨터에 로그인하고, 명령어를 실행하며, 파일을 전송할 수 있다. SSH는 기본적으로 TCP 22번 포트를 사용한다. 이 규칙을 추가하면 사용자는 인터넷을 통해 EC2 인스턴스에 SSH 접속을 시도할 수 있게 된다. HTTP (Hypertext Transfer Protocol): HTTP는 웹 서버와 클라이언트 간에 정보를 주고 받기 위한 프로토콜이다. 웹 브라우저를 통해 웹..