Virtual Thread를 사용해보자!
이번 프로젝트는 kotlin + jdk21 + spring 3.2의 환경입니다. jdk21이면 많이 이야기되는 virtual thread를 사용할지를 이야기 하기 위한 사전 조사를 했습니다.
Virtual Thread란?
우선 Virtual Thread를 이해하기 위해서는 몇가지 알아야 하는 사항이 있습니다.
Platform Thread
System call
Platform Thread는 OS Thread를 감싼 형태로 구현됩니다.
Thread의 생애 주기
자바에서는 Thread가 I/O 작업, 인터럽트 또는 sleep 명령을 만날 때 블로킹 또는 대기 상태로 들어갑니다. 이 기간 동안 다른 Thread가 운영 체제의 자원을 활용하여 작업을 수행할 수 있으며, 이를 Context Switching
이라고 합니다. 이 모델은 기존의 프로세스 모델을 작은 단위로 분할하여 프로세스 내에서 공유 자원을 허용하면서 작은 작업 단위를 번갈아 가며 실행하는 것을 의미합니다.
다만, 요청량이 급격하기 증가하는 서버 환경에서는 갈수록 더 많은 Thread 수를 요구 하게 되어 이를 극복하기 위해서 나온 것이 경량 스레드 모델인 Virutal Thread
입니다.
Virtual Thread의 가장 큰 특징은 컨텍스트 스위칭 비용이 저렴
하다는 것입니다.
Virtual Thread
Spring 3.2 에서 Virtual Thread 사용하기
Spring 3.2 부터는 Virtual Thread를 공식적으로 지원하기 시작하였습니다.
사용 방법은 간단하게 properties에 아래와 같이 설정 하면 됩니다.
spring.threads.virtual.enabled=true
위와 같이 설정할 경우 기본적으로 Tomcat에서 Virtual Thread를 사용하도록 설정이 변경 됩니다.
기타 부분은 수동으로 교체 작업을 해야 합니다.
마치며
Virtual Threaad는 약 5년 가까이 준비되었던 JDK의 프로젝트였고, 기존 Platform Thread와 호환성을 최대한 맞춰서 개발되었습니다.
물론 Virtual Thread에 대한 이해도가 있어야 하지만, 간단하게 위와 같이 설정으로 Virtual Thread를 활용할 수 있습니다.
참고 자료에는 좋은 내용이 많으니 꼭 읽어 보시기를 추천 드립니다.