java 18

java jsckson2 라이브러리 사용 null and default value ignore

java jsckson2 null and default value ignore json 데이터의 경우 널 및 기본값을 json에서 제외하면 데이터 사이즈를 줄일 수 있다. import com.fasterxml.jackson.annotation.JsonInclude;import com.fasterxml.jackson.core.JsonProcessingException;import com.fasterxml.jackson.databind.ObjectMapper;import static com.fasterxml.jackson.annotation.JsonInclude.Include;public class JsonExample { public static void main(String[] args) { ..

java 2024.10.08

spring boot 가상 스레드로 웹소켓 사용

Spring Boot에 Java 21 LTS 가상 스레드에 WebSocket 사용하기spring boot virtual thread websocket 스프링 부트 텍스트 기반 Stomp 웹소켓 예제는 많지만 바이너리 기반 웹소켓 예제는 많이 없어서 자료를 남긴다.데이터베이스 연동 또는 레디스 연동 등으로 인한 블로킹 구간이 있을 경우 처리량을 올리기 위해 가상 스레드를 사용한다.간단한 외부 연동 블로킹 확인을 위해 타임 서버도 구성하였다.스프링 부트 3.2 버전부터 가상 스레드를 지원하며 3.3 버전부터 웹소켓 가상 스레드를 지원하므로스프링 부트 3.3 이상 버전 사용을 권장한다. Time 서버 application.ymlserver: shutdown: graceful port: 9090 tomca..

java 2024.07.20

java Map ConcurrentModificationException 회피

더보기java.util.HashMapjava.util.LinkedHashMapjava.util.concurrent.locks.ReentrantLock ConcurrentModificationException이 발생하는 경우는 2가지가 있다고 합니다.1. 서로 다른 Thread가 동시에 같은 HashMap에 연산을 수행함2. for문 안에서 HashMap의 entry를 제거함 ReentrantLock mutex = new ReentrantLock(true); @Test void test1() throws Exception { map.put("a", Map.of(1L, 1)); map.put("b", Map.of(2L, 2)); map.put("c", Map...

java 2024.07.04

java Mutable value

java의 Map 자료형 에서 정수값을 가져와 연산을 할 경우 jvm에 많은 Integer 객체가 생성될 수 있다. Map map = new HashMap();...// plusmap.put(1, map.get(1) + 10);map.put(1, map.get(1) + 20); Mutable Number 클래스를 만들어 많은 정수 객체가 만들어지는걸 방지할 수 있다.public final class MutableInt { private int value; public MutableInt() { } public MutableInt(int value) { this.value = value; } public void increment() { value+..

java 2024.07.04

java 8byte guid 생성

16자리 long 자료 타입의 정수값으로 중복 안 되는 id값 생성16자리 long 자료 타입 정수값은 7byte, 마지막 1byte는 serverRunId로 사용 ...// 서버 시작시 Redis Server로 부터 유일값 반환int serverRunId = 255; // 0 ~ 255TimeBasedGuid.current().setServerRunGuid(serverRunId);log.info("{}", TimeBasedGuid.current().getNextGuid());... 실행 결과>더보기3rhTPgQFBv8= java 21 가상 스레드에서도 사용 가능하기 위해 ReentrantLock 생성 시 true값 사용ReentrantLock reentrantLock = new ReentrantLock..

java 2024.07.04