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

생각 풀어내기

github: @mete0rfish

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

[Java] 딥 다이브 (String, Wrapper Class, Asynchronize)

StringString의 불변성과 finalString은 클래스 자체가 final이고, 내부에 문자 배열도 final이라 한 번 생성하면 내용이 절대 바뀌지 않는 불변객체이다. 이런 연산들(+, substring, replace 등)은 기존 객체를 수정하는 게 아니라 새로운 String 객체를 생성해 반환한다. 불변성이 있기 때문에 멀티스레드 환경에서도 동기화 없이 안전하게 공유할 수 있고, 해시값이 변하지 않아 HashMap 키로 쓰기에도 적합합니다. 그렇기 때문에 String을 + 와 사용하는 경우 아래와 같은 원리로 문제가 발생한다.매 반복마다 새로운 String이 생성되고, 기존 문자열 전체를 새 배열에 복사시간 복잡도 관점에서 사실상 누적 O(n²) 수준이 되어 큰 입력에서 속도가 급격히 느려짐..

  • format_list_bulleted Java & Kotlin
  • · 2025. 11. 30.

[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.

[AI] FastAPI를 활용한 Tensorflow 모델 서빙

🔎 현재 상황AI 기반의 필적 감정 서비스를 개발하게 되었다. 검사하려는 검증물과 비교 대상인 대조물 사이의 유사도 및 필적 특징을 추출하여 제공하는 서비스이다. 내가 담당하게 된 파트는 AI 서빙이었다. 평소 AI 기반 서비스가 어떻게 이루어지는지 많이 궁금하였고 이 참에 공부해보는 것도 좋겠다고 생각했다. 🤔 기술적 고민현재 제공하는 AI 서빙 방법은 총 3가지이다.웹 서버 프레임워크로 직접 서빙하기TensorFlow Serving 이용하기NVIDIA Triton카카오 테크 블로그에서 비교된 아티클을 발견하여 참고하였다.https://tech.kakaopay.com/post/model-serving-framework/“FastAPI와 TensorFlowServing, Trioton과의 가장 큰 차..

  • format_list_bulleted Server
  • · 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.

[Java] Java에서의 Lock-Free (Atomic, Volatile)

Lock Free 기법이란?Lock을 사용하지 않고 동시성 문제 해결하는 기법 중 하나를 의미합니다. Lock은 대부분의 동시성 문제를 쉽고 안전하게 해결할 수 있는 효과적인 방법이지만, 여러 단점을 가지고 있습니다.Lock의 단점데드락 (Deadlock)우선순위 역전 (Priority Inversion) : 우선순위가 낮은 스레드가 락을 가진 상태에서 CPU 사용이 우선순위에 의해 스왑되면, 해당 락이 필요한 우선순위 높은 스레드가 종료되지 않는 한 무한정 대기하게 되는 문제가 발생성능 오버헤드 (Performance Overhead) :스레드가 락을 얻기 위해 ‘블록’ 상태로 변경되고ㅡ 이 과정에서 불필요한 컨텍스트 스위치가 발생 동시성 문제의 근본적인 해결법은?예를 들어, 크리티컬 섹션인 count..

  • format_list_bulleted Java & Kotlin
  • · 2025. 11. 30.
  • 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.

티스토리툴바