[Spring] 1 대 1 실시간 채팅 구현하기 - Stomp, MongoDB, Redis
·
Backend/Spring
1. 배경 및 목표1) 배경사용자 간 빠른 소통을 위한 실시간 채팅의 필요성이 제시됐습니다.이전에 실시간 채팅을 구현해본 경험이 있습니다. [WebSocket] Spring, React, Stomp로 실시간 채팅, 저장 구현하기팀원들과 프로젝트를 진행하였고 의미 있는 내용들을 포스팅 해보려고 합니다.프로젝트는 다음과 같이 진행되었습니다.Java 17Spring Boot 3.2.0JPAGradleReact저에게는 자그마한 꿈이 있었습니다. 바로5g-0.tistory.com 이 구조를 그대로 실서비스에 적용하기에는 사용성이 떨어질 수 있다고 판단했습니다. 이유는 다음과 같습니다.RDB로 채팅 메시지를 저장/조회메시지가 쌓일수록 조회 성능 저하 및 부하 증가서버 증축(Scale-out) 계획현재는 단일서버로 ..
[DB] RDS mariaDB slow query log 설정, 느린 쿼리 추적 하기
·
DB
1. 배경 및 목표오래 걸리는 쿼리를 추적하고 index 추가 등을 통해 성능을 개선해보는 경험을 해보고 싶었습니다.제가 사용하는 mariaDB와 MySQL에는 slow query log라는 기능이 있다는 것을 알게 되었고 이를 적용하고자 했습니다.2. 개념Slow Query Log는 DB에서 실행 시간이 오래 걸린 SQL 쿼리를 기록하는 기능 입니다.모든 쿼리를 기록하는 것이 아니라, 미리 정해둔 시간(threshold)을 초과한 쿼리만 로그로 남깁니다.서비스에서 성능 문제가 발생하면 애플리케이션 로그나 모니터링을 통해서는 어떤 SQL이 병목인지 알기 쉽지 않습니다.Slow Query Log를 사용하면 DB 관점에서 직관적인 답을 받을 수 있습니다.주요 설정 요소는 다음과 같습니다.log_slow_qu..
[JPA] 영속성 컨텍스트(Persistence Context)의 역할, Entity 상태관리(persist / merge / save)
·
Backend/JPA
1. 영속성 컨텍스트(Persistence Context)란?JPA를 공부하면서 가장 먼저 마주치는 개념이 바로 영속성 컨텍스트(Persistence Context)입니다.엔티티를 find()로 조회하거나, save()할때 JPA가 내부에서 어떤 식으로 엔티티를 관리하는지 이해하려면, 영속성 컨텍스트에 대해 알아야 합니다.먼저 영속성은 데이터나 객체가 프로그램 종료 후에도 사라지지 않고 지속되는 특성을 말합니다. 즉, 데이터를 영구적으로 저장하는 능력을 말합니다.영속성(Persistence): 데이터나 객체가 프로그램 종료 후에도 사라지지 않고 지속되는 특성JPA의 영속성 컨텍스트는 Entity를 영구 저장하는 환경이라는 뜻으로, Entity를 관리하기 위해 사용하는 메모리상의 1차 캐시이자, Entit..
[네트워크] DNS의 개요와 구조, 동작원리
·
CS/네트워크
1. DNS 개요1) DNS 란?인터넷 호스트를 식별하는 방법에는 두가지가있습니다. 하나는 www.google.com 같은 호스트 이름(host name)이고, 다른 하나는 IP주소(IP adress) 입니다.IP주소는 121.7.106.83 과 같이 0~255범위의 십진수 네 개로 구성되며, 4바이트로 이루어지는 계층구조를 갖습니다. IP주소는 왼쪽에서 오른쪽으로 조사함으로써, 그 호스트가 인터넷의 어디에 위치하는지 정보를 알 수 있습니다.사람은 www.google.com 처럼 기억하기 쉬운 호스트 이름을 좋아하겠지만, 라우터는 고정 길이, 숫자 기반, 계층 구조인 IP주소를 효율적으로 처리할 수 있습니다.이를위해 DNS는 호스트 이름을 IP 주소로 변환해주는 디렉터리 서비스 역할을 합니다.DNS(D..
[Java] JVM(Java Virtual Machine)의 구조와 동작방식
·
Backend/Java
1. JVM 이란?Java 프로그램은 OS 위에서 직접 실행되지 않고 JVM(Java Virtual Machine) 위에서 실행됩니다.오늘은 이 JVM의 구조와 동작 방식에 대해서 알아보겠습니다.JVM은 바이트코드를 해석하고 실행하는 가상 머신입니다.JVM은 운영체제와 무관하게 자바 프로그램을 실행할 수 있게 하는 중개자 역할을 하며 'Write Once, Run Anywhere(한 번 작성하면 모든 곳에서 실행된다)' 라는 자바의 핵심 특징을 가능하게 합니다.자바 바이트코드(Java bytecode): Java 소스 코드를 컴파일하여 얻은, 자바 가상머신(JVM)이 이해할 수 있는 중간 코드2. JVM의 구성 요소 JVM의 구성요소는 크게 클래스 로더(Class Loader), 실행 엔진(Executi..
[네트워크] HTTP/2의 등장 배경과 특징
·
CS/네트워크
1. HTTP/2의 등장 배경1) 기존의 HTTP/1.1지속연결을 제공하는 HTTP/1.1은 웹페이지당 하나의 TCP연결을 이용할 수 있게 하였고, 서버에서의 소켓수를 줄이고 공정한 네트워크 대역폭을 가질 수 있도록 하였습니다. 하지만 하나의 TCP상에서 웹 페이지의 모든 객체를 보내면 문제가 발생할 수 있습니다.예시를 들어보겠습니다. 웹 페이지의 상단에 비디오 클립이 있다고 가정해봅시다. 다른 작은 객체들이 앞에 있는 비디오 객체가 링크를 통과할때까지 기다려야 합니다. TCP는 순서 보장 프로토콜이기 때문에 패킷이 순서대로 도착하지 않으면 뒤의 패킷들도 재조립을 기다리며 전달되지 않습니다. 이에 여러 요청을 하나의 TCP연결에 얹으면 패킷 손실이 생길 때 모든 요청이 함꼐 지연될 수 있습니다. 이러한..
[Spring] Redis Sorted Set, ZSet 을 이용한 매칭 시스템 구현하기
·
Backend/Spring
1. 배경 및 목표고객과 매니저를 매칭하는 서비스를 개선하고자 했습니다.매칭 시스템은 고객의 상황에 맞는 매니저를 추천하여 연결해주는 기능을 담당합니다.고객은 매칭 페이지에서 새로고침 형태로 여러 매니저를 추천받으며, 그 중 적절한 매니저를 선택할 수 있습니다.기존 구현에서는 새로고침 시 같은 매니저가 다시 노출되지 않도록 매칭 정보를 DB에 저장했습니다.하지만 이 방식에는 두 가지 문제가 있었습니다.한 번이라도 추천된 매니저는 다시는 추천되지 않기에, 새로운 매니저가 추가되기 전까지 고객이 매칭을 다시 시도할 수 없음매칭 기록이 DB에 계속 누적되어 불필요한 데이터가 쌓임저는 이러한 서비스를 캐시 + 우선순위 큐로 개선할 수 있겠다고 생각하였습니다. 그 이유는 다음과 같습니다.매칭이 종료되면 기록을 휘..
[네트워크] 웹캐시, 프록시 서버
·
CS/네트워크
1. 웹 캐시, 프록시 서버1) 웹 캐시 개념과 동작 원리 웹 캐시(프록시 서버)는 기점 웹 서버를 대신하여 HTTP 요구를 충족시키는 네트워크 개체 입니다.웹 캐시는 자체의 저장 디스크를 갖고 있어 최근 호출된 객체의 사본을 저장 및 보존합니다. 웹 캐시의 동작과정을 알아보겠습니다.브라우저는 웹 캐시와 TCP 연결을 설정하고 웹 캐시에 있는 객체에 대한 HTTP요청을 보냄웹 캐시는 객체의 사본이 저장되어있는지 확인저장되어있다면 클라이언트 브라우저로 HTTP 응답메시지와 객체 전송 응답저장되어있지 않다면, 기점서버에 HTTP 객체 요청, 저장 후 클라이언트로 응답이는 컴퓨터 구조에서 공부한 캐시의 개념과 매우 유사합니다. [컴퓨터 구조] 캐시 메모리 - 캐시의 특징과 사상(mapping)방식1. 캐시 메..