생각 풀어내기
close
프로필 사진

생각 풀어내기

github: @mete0rfish

  • 분류 전체보기 (12)
    • Java & Kotlin (2)
    • Spring (7)
    • Server (1)
    • DB (2)
    • Reflection (0)
  • 홈
  • 태그
  • 방명록

[Spring Boot] Redis Pub/Sub 기반 쿠폰 발급 시스템 구축

개요대규모 시스템이라는 상황을 가정하고 쿠폰 발급이라는 주제로 아키텍처 설계 및 구현을 해보려고 한다.현재 Spring Boot와 Kotlin을 통해 웹 서버를 구축하고, Docker Compose와 JMeter를 이용하여 부하 테스트를 진행한다.https://github.com/mete0rfish/huge-traffic-test/tree/main GitHub - mete0rfish/huge-traffic-test: 가상 시나리오 기반 대규모 트래픽 시스템 구축 실험가상 시나리오 기반 대규모 트래픽 시스템 구축 실험. Contribute to mete0rfish/huge-traffic-test development by creating an account on GitHub.github.com 시나리오 ..

  • format_list_bulleted Spring
  • · 2025. 11. 30.

[Spring Boot] AI 서빙에서 WebClient와 RestClient 비교

https://github.com/dog-feet-bird-feet/server/commit/b5879ac57777dba96bd58d0fd9128c9391ba85ac개요기존 RestTemplate의 블로킹 통신 방식이 동시 요청 처리 시 병목 현상을 일으켜 응답 지연을 발생시키는 것을 발견했다. 이를 해결하고자 WebFlux 기반의 WebClient를 도입하여 웹 서버와 AI 서버 간의 통신을 논블로킹 비동기 방식으로 전환했다.그러나 JPA의 Blocking으로 인해 큰 성능 차이는 발생하지 않았다.따라서, 블로킹 방식이고 러닝 커브가 없는 RestClinet를 도입하였다. 문제 정의K6을 통한 부하 테스트로 발견한 기존 방식의 RestTemplate 기반의 통신 방식의 한계가 있다고 판단했다. Rest..

  • format_list_bulleted Spring
  • · 2025. 11. 30.
[Spring Boot] Scale Out을 위한 Redis Pub/Sub 기반 공개 채팅 아키텍처 도입

[Spring Boot] Scale Out을 위한 Redis Pub/Sub 기반 공개 채팅 아키텍처 도입

개요과거 채팅 시스템의 구조는 Java 내부 메시지 큐를 이용하여 DB에 배치 저장하도록 구현되어 있다.이 경우 다음과 같은 문제점들이 발생할 수 있다는 것을 생각하지 못했다. 메시지 큐와 DB 사이의 데이터 정합성 문제메시지 큐에 저장된 내용을 DB에 저장하는 동시에 새롭게 참가한 사용자에게 최근 메시지를 조회하도록 하였다. 그런데 이 경우, DB에 데이터를 저장하면서 최근 메시지를 보여주기 때문에 메시지 큐와 DB 사이에 데이터 정합성이 발생한다. 따라서, 이를 위해 최근 메시지와 저장할 메시지를 분리해야 한다. 쉽게 생각할 수 있는 방법이 캐시를 사용하는 방법이다. Write Through와 비슷한 방식으로 접근하는 것이다. 간단하게 말하면 캐시는 최근 메시지를 보여주는 용도이고, 메시지 큐는 DB..

  • format_list_bulleted Spring
  • · 2025. 11. 30.

[Spring Boot] N+1 문제 해결 기술 비교 (FetchJoin, @EntityGraph, batch-size)

개요N+1 문제란 1개의 조회를 위해 N개의 추가적인 쿼리가 발생하는 문제를 말한다. JPA에서 조회 쿼리를 날릴 경우, 해당 엔티티와 연관된 모든 관계에 있는 내용도 받아오기 때문에 발생한다. 왜 N+1 문제가 실무에서 위험한가?실무에서 N+1 문제는 데이터 로딩 시 의도치 않은 다량의 쿼리가 발생해 서버와 DB를 동시에 압박한다. 목록 1건마다 추가 연관 데이터를 별도 쿼리로 가져오면, N개의 엔티티에 대해 1+N번의 쿼리가 나가며 트래픽이 늘어날수록 지수적으로 지연이 커진다. 이는 TPS 하락, 타임아웃, 커넥션 풀 고갈, 캐시 무력화 같은 장애로 직결된다.특히 ORM에서 지연 로딩이 컬렉션/연관 엔티티 접근 시마다 쿼리를 발생시킨다. 페이지네이션 환경에서 더 치명적인데, 페이지당 20건이라도 각 ..

  • format_list_bulleted Spring
  • · 2025. 11. 30.

[Spring Boot] Soft Delete로 개인정보 보호하기

논리적 삭제를 통해 얻게되는 장단점을 먼저 정리해보자.🔎 Soft Delete 개요Soft Delete 장점정보 보존에 따른 복구 가능DELETE 보다 빠른 속도의 UPDATE데이터를 활용한 추후 서비스 및 활용이 가능Soft Delete 단점데이터베이스 용량 증가모든 쿼리에서 Soft Delete된 데이터를 직접 제외하도록 설정 🤔 도입해야 할까?우리 서비스에 필요한가?현재 서비스에서 제공되는 기능 중 주요한 데이터라고 생각되는 것은 도면과 결제, 주문, 회원이라고 생각된다.도면의 경우, 추후 도입될 업로드 기능이 생길 경우 복구가 불가피할 것으로 보인다. 또한 삭제한 데이터도 가지고 있어 도면에 대한 데이터를 축적할 수 있다는 장점을 가진다.회원의 경우도 회원가입 시 선택되는 직업, 나이에 대한 ..

  • format_list_bulleted Spring
  • · 2025. 11. 30.
[Spring Boot] 공개 채팅 구축 및 동시성 문제 해결

[Spring Boot] 공개 채팅 구축 및 동시성 문제 해결

원툴의 채팅을 도입하여 도면에 대한 이야기를 하거나 정보를 공유할 수 있는 커뮤니케이션 도구를 개발하려고 한다. 사용성 측면에서 보다 구현이 용이한 공개채팅으로 구현하고자 한다. 본 구현은 페어 프로그래밍을 통해 2시간씩 총 6회차 진행했습니다.https://github.com/likelion-onetool/backend/issues/230 📚 기술 선택모놀리식 아키텍처를 통해 서버 비용을 절감하기 위해 별도의 프레임워크가 아닌 기존에 사용중인 Java와 Spring Boot를 사용하기로 결정했다. 메시지 처리 방식1:1이 아닌 다수의 사용자가 동시에 진행할 수 있는 채팅을 구현하기 위해 어떤 메시지 전송 방식이 접합할지 장단점을 구분했다.방식장점단점Polling서비스 구현이 간편- Polling 주기..

  • format_list_bulleted Spring
  • · 2025. 11. 27.
  • navigate_before
  • 1
  • 2
  • navigate_next

Github Profile


Today I Learned

공지사항
  • 블로그 목표
전체 카테고리
  • 분류 전체보기 (12)
    • Java & Kotlin (2)
    • Spring (7)
    • Server (1)
    • DB (2)
    • Reflection (0)
인기 글
전체 방문자
오늘
어제
Copyright © 개발자 성원 모든 권리 보유.
SKIN: Copyright © 쭈미로운 생활 All rights reserved. Designed by JJuum.
and Current skin "dev-roo" is modified by Jin.

티스토리툴바