Java 12

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

SimpleDateForat 동시성 이슈

SimpleDateFormat 객체를 사용하다 동시성 이슈를 만났다.이슈를 해결한 과정을 기록해 두려고 한다. 문제Jackson Library Custom Deserializer에서 SimpleDateFormat을 이용해 역직렬화 작업 수행 간헐적으로 역직렬화 실패하는 이슈 발생java.lang.NumberFormatException: For input string: ".206E206E22" at java.base/jdk.internal.math.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2054) at java.base/jdk.internal.math.FloatingDecimal.parseDouble(FloatingDecimal.java:11..

Java 2025.02.10

Java 시간관련 객체 정리

들어가면서 이번 글에서는 Java에서 제공하는 시간과 관련된 Class를 정리한다. 자바 시간 객체 종류 Date public class Date implements java.io.Serializable, Cloneable, Comparable { ... private transient long fastTime; ... } The class {@code Date} represents a specific instant* in time, with millisecond precision. java.util 패키지에 있는 클래스다. 좀 더 쉽게 풀어쓰면 1970년 1월 1일 00:00:00 GMT를 기준으로 지금 몇 milisecond이 지났는지를 저장한다. (이런 개념을 epoch-seconds 라고 부른다...

Java 2024.03.09

람다식

람다식? 람다식(Lambda expression)은 자바에서 제공하는 함수형 프로그래밍 방식이다. (함수형 프로그래밍은 함수의 구현과 호출만으로 프로그램을 만드는 프로그래밍 방식이다) 람다식을 간단하게 설명하자면 이름이 없는 익명 함수를 만드는 것이다. 예시를 통해 람다식에 대해 알아보자. //두 정수를 매개변수로 받아 두 수의 합을 반환하는 함수 ​ //일반적인 함수 선언 int add(int a, int b) { return a + b; } ​ //람다식을 이용한 함수 선언 (int a, int b) -> {return a + b;} 람다식을 보면 소괄호('()') 안에 함수에서 사용될 매개변수가 들어가고, 중괄호('{}') 안에 함수에서 수행할 로직이 들어간다. 그리고 일반적인 함수 선언 방식과 비..

Java 2022.05.29