Virtual Thread의 기본 개념 이해하기

Virtual Thread 개념 이해
Virtual Thread는 JDK에 정식 도입된 스레드 모델로, 여러 개의 가상 스레드를 하나의 네이티브 스레드에 할당하여 사용하는 방식이다. 이는 기존의 KLT와 ULT를 1:1 매핑하는 JVM의 스레드 모델을 개선한 형태이다.
Virtual Thread의 동작
- Virtual Thread는 Heap에 할당되어 있고, 플랫폼 스레드에 마운트/언마운트하여 실행을 관리한다.
- Virtual Thread는 플랫폼 스레드를 참조하며, 실행 시에는 ForkJoinPool의 큐에 들어가 스케줄링된다.
- Virtual Thread의 장점은 JVM이 자체적으로 스레드를 스케줄링하여 컨텍스트 스위칭 비용을 줄일 수 있다는 것이다.
Virtual Thread와 Spring Boot
- Virtual Thread는 Spring Boot 3.2.x에서 공식적으로 지원되지만, 2.x 버전에서도 별도 설정을 통해 사용할 수 있다.
- Spring 내부에 synchronized가 많아 효율이 좋지 않을 수 있으며, 구동 시 Virtual Thread blocking 현상이 발생할 수 있다.
Virtual Thread의 사용 예시
- 기존 스레드는 sleep 실행 시 blocking 되지만, Virtual Thread는 다른 동작을 수행하며 컨텍스트 스위칭이 발생한다.
- 스레드를 언마운트/park하고 다시 마운트/unpark하여 Future로 돌리는 방식으로 동작한다.
- Tomcat, Spring MVC에서도 Netty/WebFlux와 유사한 처리 방식과 효율을 보여주며, 네트워크 I/O 환경에서 특히 좋은 성능을 발휘한다.