본문 바로가기
개발 생각

Java24 + Spring boot 3.2이상버전을 쓰는건 어떨까

by ms727 2025. 3. 11.

 

2025년 3월18일부로 Java24를 정식으로 사용할 수 있게됩니다.

 

많은 변화중에 기존 가상 쓰레드가 가지고 있던 Pinned Issue가 어느정도 해결되어 나오게 되었는데, 이는 어떤 이슈였고 어떻게 해결하였는가 확인해보겠습니다.

 

가상 쓰레드 와 문제점

 

우아한 형제 글 발췌

 

가상 스레드(Virtual Threads)는 생성과 스케줄링 비용이 낮고, 경량화된 스레드로 동시성 애플리케이션을 쉽게 작성할 수 있게 해줍니다. 가상 스레드가 실행될 때는 플랫폼 스레드 위에 탑재되어 실행됩니다.

하지만 지금까지는 Java의 synchronized 키워드를 통한 동기화가 실행되면 플랫폼 스레드가 가상 스레드에 고정(pinned)되는 문제가 있었습니다. 즉, synchronized를 사용할 때 플랫폼 스레드가 가상 스레드와 연결된 채로 유지되어, 많은 동기화 작업이 수행되면 가상 스레드의 확장성이 크게 제한되는 성능 문제가 있습니다.

 

이 문제는 JDK내부에서도 발생하고 많은 라이브러리에서도 발생하여 성능 병목 문제가 생기고 있었습니다.

Java24에서는 가상 스레드가 동기화 작업을 수행할 때 플랫폼 스레드를 언마운트할 수 있게 되어, 이 문제가 해결되었습니다.

 

 

가상쓰레드에 대한 딥한 개념은

 

https://techblog.woowahan.com/15398/

 

Java의 미래, Virtual Thread | 우아한형제들 기술블로그

JDK21에 공식 feature로 추가된 Virtual Thread에 대해 알아보고, Thread, Reactive Programming, Kotlin coroutines와 비교해봅니다.

techblog.woowahan.com

 

이 글을 참고하시면 이해가 더 잘 되실겁니다.

 

Pinned Issue?

 

우아한 형제글 발췌

Pinned Issue

 

간단히 말하자면 가상 쓰레드 안에서 synchronized같은 동기화 코드가 있으면 플랫폼 쓰레드를 계속 점유하고 있어서

가상쓰레드가 비효율적으로 동작하는 문제입니다.

 

이를 java24에서는 개선을 하여서 가상쓰레드 안에서도 동기화 코드를 작성할 수 있게 되었습니다.

 

Spring3.2.x부터는 가상쓰레드를 지원하고 있고 코루틴, 웹플럭스의 러닝커브를 생각한다면 차라리 Java 24 + Spring Boot 3.2.x버전으로 Tomcat에서도 비슷한 성능을 내도록 하는게 어떨까 싶다.

'개발 생각' 카테고리의 다른 글

HATEOAS 간단 소개, 과연 이게 정답인가?  (0) 2025.02.26