Virtual Threads, Structured Concurrency and Scoped Values: Putting it all together by Balkrishna R
- Project Loom은 가상 스레드, 구조화된 동시성, 스코프드 값을 통해 고처리량, 경량, 사용하기 쉬운 동시성을 제공하는 OpenJDK의 핵심 프로젝트입니다. 🧵
- 가상 스레드는 플랫폼 스레드와 달리 매우 경량이며 적은 메모리를 사용하여 수천, 수백만 개를 생성할 수 있어 높은 확장성을 제공합니다. 또한 스레드 풀링이 필요 없으며, 생성 비용이 저렴하여 사용 후 바로 폐기하는 것이 권장됩니다. 🚀
- 가상 스레드 스케줄러는 가상 스레드가 I/O 대기 등으로 처리 작업이 필요 없을 때 플랫폼 스레드에서 언마운트하고, 필요할 때 다시 마운트하여 플랫폼 스레드의 효율적인 활용과 CPU 사용률 극대화를 가능하게 합니다. 🔄
- Spring Boot 3.5 이상에서는
spring.threads.virtual.enabled=true 설정 하나로 애플리케이션의 스레드 모델을 플랫폼 스레드에서 가상 스레드로 쉽게 전환할 수 있습니다. ⚙️
- 구조화된 동시성은 가상 스레드의 대량 생성 능력을 활용하여 각 태스크에 전용 스레드를 할당하고, 비즈니스 로직의 논리적 구조를 코드에 직접 반영하여 가독성과 유지보수성을 향상시키는 프로그래밍 패러다임입니다. 🏗️
- 구조화된 동시성은 오류 발생 시 불필요한 하위 태스크를 즉시 취소하는 단축 평가, 상위 태스크 취소 시 하위 태스크로의 취소 전파, 코드의 명확성, 그리고 스레드 계층 구조를 반영한 향상된 관찰 가능성(디버깅 용이) 등의 이점을 제공합니다. 🛑❌📖🔍
- Java에서는
StructuredTaskScope API를 사용하여 복잡한 동시성 요구사항을 구조화된 방식으로 구현할 수 있습니다. 🛠️
- 대출 신청과 같은 복잡한 비즈니스 로직(고객 정보 조회, 여러 서비스로부터 계좌/대출/신용 점수 동시 조회 후 대출 제안 계산)을 구조화된 동시성 모델로 구현하여 효율적이고 가독성 높은 코드를 작성할 수 있습니다. 💰