웹 POS 시스템 개발 팀 프로젝트를 시작하기에 앞서
신규 팀 프로젝트에서 JDK 21을 활용해보자고 했다
왜...?
JDK 21에 경량 스레드 모델 Virtual Thread가 정식 Feature이 되었기 때문이다!
??? : Virtual Thread가 뭐에요?
??? : 우리 프로젝트에 어디에 사용하면 좋아요?
Java 21 공부 시작!
기존 자바는... Platform Thread

하나의 스레드 처리
Java에서 스레드 쓴다는 것은 OS Thread를 사용한다는 것
Virtual Thread를 통해 High Concurrency(동시성)을 높인다

1:1 -> N:1 또는 M:N 방식 매핑
블로킹 I/O(예: DB 쿼리, HTTP 호출) 상황에서 커널 스레드가 대기하지 않고, 가상 스레드만 ‘park’되어 다른 Virtual Thread가 CPU를 쓸수 있게 한다.
Virtual Thread로 스택 메모리를 필요 시점에만 할당/해제
JVM 내부 스케줄러가 관리함에 동시연결이 수만개 달해도 상대적으로 부드럽게 처리
우리 프로젝트에서는 POS/ERP 등 I/O 중심 서비스에 다중 요청을 동시에 처리해야 하는 상황 이 많을 예정이다.
여기서 성능 이점을 확보
하지만
“중소 규모” 트래픽만 예상한다면, 기존의 스레드 풀 모델(예: 200~300개 정도)도 크게 문제없이 돌아간다.
즉, 프로젝트 규모가 그리 크지 않다면 “Virtual Thread의 성능 이점”이 체감되지는 않을 것
다만, 학습 목적으로 Virtual Thread를 경험해보자!
Virtual Thread는 생성비용이 작기 때문에 스레드 풀을 만드는 행위 자체가 낭비다
그렇기에 필요할 때마다 생성하고 GC가 소멸하도록 방치해버리는게 좋다
Virtual thread 내에서 synchronized 나 parallelStream 혹은 네이티브 메서드를 쓰면 virtual thread가 carrier thread에 park 될 수 없는 상태가 되어버린다
-> 이를 Pinned(고정된) 상태, 이는 예상한 virtual thread의 성능저하를 유발할 수 있다.
Virtual Thread는 수시로 생성되고 소멸되며 스위칭된다. 그렇기에 항상 크기를 작게 유지하자
우아한 기술블로그, Java의 미래, Virtual Thread
카카오페이 테크, Virtual Thread에 봄(Spring)은 왔는가