Java 15

[Java] 로컬 캐시 3대장 완벽 비교: Caffeine vs Ehcache vs Guava (2)

저번글에서 Caffeine, Ehcache, Guava에 대한 기본 개념과 성능 차이를 알아봤다.이번 글에서는 좀 더 나아가, 왜 이런 차이가 발생하는지 정리하겠다. Guava Guava는 3 캐시 중 성능이 가장 안 나오는 캐시다. 구조는 Java의 ConcurrentHashMap과 동일하다.A Cache is similar to ConcurrentMap, but not quite the same. The most fundamental difference is that a ConcurrentMap persists all elements that are added to it until they are explicitly removed. ConcurrentMap과 동일하게, 여러 Segment로 나눠서 데..

Java 2026.02.16

[Java] 로컬 캐시 3대장 완벽 비교: Caffeine vs Ehcache vs Guava

애플리케이션의 성능을 높이는 가장 확실한 방법 중 하나는 **로컬 캐시(Local Cache)**를 사용하는 것입니다. Redis 같은 분산 캐시보다 훨씬 빠르고 간편한 Java 로컬 캐시의 대표 주자 3종을 분석해 보았습니다. 1. Caffeine Cache: 현시점 최강의 성능Caffeine은 Java 8 이상을 기반으로 한 고성능 최신 캐시 라이브러리입니다. Spring Boot 2.0부터 기본 캐시로 사용될 만큼 성능과 효율성을 인정받았습니다.동작 원리: W-TinyLFU(Window TinyLFU) 알고리즘을 사용합니다. 데이터의 '최근성(LRU)'과 '사용 빈도(LFU)'를 모두 고려하면서도, 아주 적은 메모리 오버헤드로 높은 적중률을 유지합니다.장점:압도적인 읽기/쓰기 속도 (Lock 경합 ..

Java 2026.01.31

JMX(Java Management Extensions)와 Spring Actuator

Java로 어플리케이션을 개발했다면, 모니터링은 어떻게 할까?Java에는 어플리케이션 모니터링을 위한 JMX(Java Management Extensions)가 있다.이번 글에서는 JMX가 어떻게 Java 어플리케이션을 모니터링하는데 도움을 주는지 정리하겠다. 여기에 더해 Spring Actuator가 어떻게 JMX를 사용하고 있는지도 정리하겠다. JMX 정의와 동작 방식 JMX는 크게 3가지 컴포넌트로 구성되어 있다. Instrumentation쉽게 설명하면, 모니터링하고자 하는 리소스에 계측기를 다는 과정이다.이는 엄청 간단하다, JMX Specification에 따라 MBean을 구현하고, MBean 서버에 등록하면 된다. JMX AgentJMX Agent는 자원을 직접 제어하고, 자원들을 워녁 관..

Java 2026.01.12

Java Virtual Machine JIT Compiler

이번 글에서 Java Virtual Machine에 대해 정리한다.기본적인 개념, 동작 원리에 대해 살펴보고 그 중 성능과 관련이 큰 JVM의 Execution Engine에 대해 정리한다. JDK vs JRE vs JVM본격적인 내용에 앞서 세 가지 핵심 용어의 차이를 정리한다. JDK(Java Development Kit) : 자바 프로그램을 개발, 컴파일, 디버그 및 실행을 위한 환경과 도구. JRE + 여러 개발 도구들로 구성됨.JRE (Java Runtime Environment) : 자바 애플리케이션을 구동하기 위해 사용되는 소프트웨어 컴포넌트들의 묶음. JVM + 자바 프로그램에 필요한 Class + Property Files로 구성됨.JVM (Java Virtual Machine) : 자바..

Java 2025.12.29

Java 라이브러리 개발 실전 로그: Gradle 의존성, Maven 배포, 그리고 Spring 자동 설정

Java로 라이브러리를 개발하는 과정은 단순히 기능을 구현하는 것에서 끝나지 않습니다. 내가 만든 라이브러리를 사용자가 얼마나 편리하게 이용할 수 있는지 고민하는 것이 핵심입니다.이 글은 라이브러리를 개발하면서 겪었던 고민과 해결 과정을 정리한 '실전 로그'입니다. 다음 세 가지 주제를 중심으로 라이브러리의 완성도를 높이는 방법을 공유합니다.Gradle Dependencies: api와 implementation의 차이를 명확히 이해하고 의존성을 올바르게 전파하는 방법Maven Repository: 개발한 라이브러리를 maven-publish 플러그인을 이용해 배포하는 과정Spring Auto Configuration: Spring Boot 환경에서 라이브러리가 '마법처럼' 동작하도록 자동 설정을 제공하..

개발 경험기 2025.11.15

Java thread-safe map 비교

들어가면서..Java에서 동시성을 지원하는 Map 구현체로 Collections.synchronizedMap과 ConcurrentHashMap이 있다. 이번글을 통해 두 구현체의 성능 차이와 동기화 방식의 차이를 정리해보겠다. 위 정보를 통해 각자 상황에 맞는 구현체를 선택해 사용했으면 좋겠다. 성능 비교성능 비교를 위해서 JMH(Java Microbenchmark Harness)를 이용했다.(자세한 사용법은 공식 페이지를 통해 확인할 수 있다. https://github.com/openjdk/jmh ) 테스트 조건- 쓰기 연산과 읽기의 비율은 2:8 (서비스의 성격에 따라 다를 수 있지만, 일반적인 상황의 비율로 테스트했다.)- 스레드 10개에서 동시접근 public class MyBenchmark {..

Java 2025.05.11

Apache HttpClient Connection Pool 모니터링

서비스를 운영하다보면, 외부 api 호출하는 로직때문에 api 응답속도가 느려질때가 종종있다.이럴때 보통 의심할 수 있는 부분이 2가지다. 첫 번째는 외부 api 자체가 응답이 느린지다. 다른 하나는 내 서비스에서 http connection을 얻는데 지연이 생기는지 확인해볼 필요가 있다. 만약 외부 api 호출시 Apache HttpClient를 사용한다면, 지금부터 말하는 내용을 활용해 모니터링 할 수 있다. Apache HttpClientApache HttpComponents – HttpClient OverviewJava 애플리케이션이 HTTP 프로토콜을 통해 다른 웹 서버와 통신할 수 있도록 도와주는 클라이언트 라이브러리를 개발하고 유지하는 Apache 재단의 오픈소스 프로젝트다. Apache ..

Java 2025.05.09

Spring DataSource 설정 팁!

Spring을 이용해 애플리케이션 개발시 DB를 사용했다면, DataSource 설정을 해본 경험이 누구나 있을것이다.DataSource 설정 관련해 몇 가지 Tip을 공유하고자한다. LazyConnectionDataSourceProxy개발을 하다보면, 간혹 DB Connection Pool이 부족해 애플리케이션 성능이 떨어질때가 있다. 다양한 원인이 있을 수 있지만, 이때 하나의 Thread가 DB Connection을 너무 오래 갖고있지 않은지 확인해 볼만하다. 만약 그게 원인이라면 LazyConnectionDataSourceProxy를 이용해 성능을 개선할 수 있다. LazyConnectionDataSourceProxy 객체를 DataSource로 사용하면 실제 DB 연결이 필요한 시점에 DB Co..

Spring 2025.04.23

Prometheus PushGateway 사용해 Metric 수집하기

문제특정 서비스 지표를 Prometheus에 저장해 Grafana를 이용해 모니터링하고 싶지만 환경상 Prometheus Pull 구조를 사용하지 못할 수 있다. 예를 들면, K8J Job에서 특정 로직을 실행하거나, 부하 이슈로 api 서버에서 scrapping을 할 수 없는 상황이 있을 수 있다.Prometheus Archiectrue : https://prometheus.io/docs/introduction/overview/ 해결책이런 케이스에는 Pushgateway 서버를 구축해 Promethus에 Metric을 저장할 수 있다.https://prometheus.io/docs/practices/pushing/ 여기서 명심할 부분은 Prometheus에서는 Pull 방식을 가이드하고 있고, 어쩔 수..

개발 경험기 2025.04.16