전체 글 7

thingo 프로젝트 성능 개선 2

2. 문제 후보 카테고리문제 정의가 끝났다면 그 다음은 “그 문제가 어디서 생기는지“ 보아야 한다.성능 문제는 겉으로는 전부 “느림”으로 보일 수 있지만 실제 원인은 매우 다르기 때문이다.예를 들어 어떤 기능은 인덱스 부족 때문일 수 있고, 어떤 기능은 JPA fetch 문제일 수 있으며, 어떤 기능은 애초에 구조가 부적절하여 느릴 수도 있다.PostgresSQL 문서에서도 적절한 쿼리 계획과 인덱스 선택이 성능에 매우 중요하다고 설명하고, Hibernate 문서에서는 fetching 전략에 따라 N+1 같은 비효율이 발생할 수 있다고 설명했다.따라서 thingo 프로젝트의 성능 문제 후보에 대해 아래와 같이 카테고리화를 진행하였다.2-1. DB 인덱싱 문제이는 인덱스 설계 문제이다.PostgreSQL은..

카테고리 없음 2026.03.22

thingo 프로젝트 성능 개선 1

내가 백엔드로 참여하고 있는 MJS 프로젝트가 thingo로 명칭을 바꾸게 되면서,나는 새로운 기능 개발 보다는 성능 개선 파트를 집중적으로 담당하며 진행하기로 하였다. 이에 따라 성능 개선을 위하여 알아두어야 할 몇가지를 정리하고자 한다.1. 문제로 볼 기준, 2. 문제 후보 카테고리 를 정리한 후 1. 한 기능에서 어떤 문제가 나타나고 있는지, 2. 개선 방향성 잡기, 3. 개선 진행 후 결과의 형태로 나타낼 예정이다. 1. 문제로 볼 기준성능 문제는 단순히 “느린 것 같다.”, “서버가 힘들어 보인다”, “코드가 비효율적인 것 같다” 같이 감각적인 판단으로 해서는 안된다.Google SRE는 사용자에게 제공되는 시스템을 바라볼 때 최소 latency, traffic, errors, saturatio..

JWT + WebSocket + Stateless 환경에서 실시간 채팅 구현 시 알아야 할 핵심 정리

실시간 채팅 기능은 일반적으로 HTTP 통신만으로는 사용성이 떨어지기 때문에 WebSocket을 사용한다.하지만 WebSocket은 기본적으로 statefule 프로토콜이기 때문에 JWT 기반의 SessionStateLess 서버 구조에서는 주의해야한다.이번 글에서는 WebSocket의 기본, HTTP와의 차이, 그리고 JWT 기반 Stateless를 어떻게 유지할지까지 실제 개발에 들어가기 전 확인할 이론을 정리한다. 1. WebSocket이란? 서버와 클라이언트가 하나의 연결을 지속적으로 유지한 상태로, 양방향 데이터를 실시간으로 주고받을 수 있는 프로토콜이다.보통 채팅이나 알림, 증권 시세나 게임 서버와 같이 실시간성이 중요한 작업에서 주로 사용한다. 여기서 사용자가 웹소켓을 사용하려고 할 때..

BackEnd/Spring 2025.11.25

RDB vs Elasticsearch

Elasticsearch란?Apache Lucene 기반의 Java 오픈소스 분산형 RESTful 검색 및 분석 엔진이다.방대한 양의 데이터에 대해 실시간으로 저장과 검색 및 분석 등의 작업을 수행할 수 있다.Elasticsearch는 텍스트, 숫자, 위치 기반 정보, 정형 및 비정형 데이터 등 모든 유형의 데이터를 위한 무료 검색 및 분석 엔진으로 분산형 및 개방형을 특징으로 한다. RDB vs Elasticsearch기존에 우리에게 익숙한 RDB와 Elasticsearch의 차이점에 대해 알아보자 RDB는 구조적 데이터 저장·조회, Elasticsearch는 대용량 비정형 데이터의 빠른 검색·분석에 특화되어 있다. RDB와 Elasticsearch는 경쟁관계라기 보다 보완관계라고 볼 수 있다.따라..

서블릿 컨테이너 심화 (멀티스레딩, 부가기능)

0. 서블릿 컨테이너의 멀티스레딩 한 대의 서버 프로세스 안에서 수많은 요청을 동시에 처리하기 위해 컨테이너가 스레드를 이용해 내부적으로 작업을 분산시키는 것. 1. 멀티스레딩스레드(Thread) : 한 프로세스 내에서 독립적으로 실행되는 흐름의 단위멀티스레딩 : 여러 스레드를 동시에 가동시켜 병렬로 작업을 수행하는 방식 멀티스레딩을 사용하는 이유1. 동시처리만약 여러 요청이 동시에 온다면 한 스레드로만 처리하기에 쉽지 않음. 하지만 멀티스레드로 나누면 각각 독립적으로 실행되기 때문에 지연을 최소화할 수 있음 2. 서비스안정성특정 요청이 오류로 인해 멈추게 되더라도 다른 스레드는 계속해서 동작함. 2. 스레드 풀매 요청이 들어올 때마다 새롭게 스레드가 생기고 또 이게 종료된다고 하면 스레드 생성..

BackEnd/Spring 2025.07.07

서블릿 / 서블릿 컨테이너

서블릿이란?쉽게 말하면 자바로 작성된 웹 요청 처리기 이다. 클라이언트가 자바 클래스(HttpServlet)으로 작성된 HTTP 요청을 보낸다면, 서블릿은 해당 요청을 받아 내부적으로 처리한 후 동적인 웹페이지를 생성한다. 서블릿은 정적인 웹페이지와 다르게 동적인 웹페이지라는 특징을 가진다.예를 들어 사용자의 입력, 세션 정보, 데이터베이스 조회 결과 등에 따라 매번 다른 결과를 만들어낼 수 있다.이는 정적인 웹페이지와 다르게 사용자 및 상황 별로 상호작용이 가능한 맞춤 페이지를 만들어낼 수 있다는 장점이 있다. 또한 서블릿은 HTML, JSON, XML 등 다양한 형식의 응답을 지원한다.기본적으로는 HTML의 응답을 지원하는데, 이는 웹 브라우저가 바로 렌더링 할 수 있기 때문이다. 보통 HTML은..

BackEnd/Spring 2025.06.30

[Java] Interface

1. 인터페이스란 무엇인가: 클래스들이 반드시 구현해야만 하는 메소드들을 정리해둔 틀목적 : 다양한 기능을 하는 클래스들 간에 공통적인 기능을 강제하기 위한 것, like 설계도/계약서형태 : 상수 + 추상메소드 + default/정적메소드특징 : 다중구현 가능, 객체 생성(new) 불가능 예시로 Animal이라는 interface와 강아지, 새의 class를 만들어 보겠다.// 인터페이스public interface Animal { // 추상 메소드 선언 public void move();}// Dog 클래스public class Dog implements Animal { // Animal에 있는 move() 메소드 구현하기 @Override public void move() { Sy..

BackEnd/Spring 2025.03.26