NAVER D2

Virtual Thread의 기본 개념 이해하기

thumbnail

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 환경에서 특히 좋은 성능을 발휘한다.