Virtual Threads, Structured Concurrency and Scoped Values: Putting it all together @ Spring I/O
- 프로젝트 룸은 고성능, 경량 동시성을 제공하며, 가상 스레드, 구조적 동시성, 스코프 값이라는 세 가지 주요 기능을 포함한다. 💡
- 가상 스레드는 OS 스레드에 직접 매핑되지 않는 사용자 모드 스레드로, 메모리 사용량이 적어 대량 생성이 가능하며 스레드 풀링이 필요 없다. 🧵
- 가상 스레드 스케줄러는 가상 스레드를 플랫폼 스레드에 마운트/언마운트하여 CPU 활용도를 높이고, I/O 바운드 애플리케이션에서 효율성을 극대화한다. ⚙️
- 스프링 부트에서
spring.threads.virtual.enabled=true
설정을 통해 가상 스레드를 쉽게 활성화할 수 있으며, 이를 통해 애플리케이션의 동시성 처리 방식을 혁신할 수 있다. 🚀
- 구조적 동시성은 가상 스레드를 활용하여 태스크를 계층적으로 구성하고, 오류 처리, 취소 전파, 가독성, 관찰 가능성과 같은 이점을 제공한다. 🌳
- 구조적 동시성은 태스크의 분기(forking)와 조인(joining)이 동일 코드 블록 내에서 이루어지도록 하여 코드의 명확성을 높이고, 동시성 프로그래밍을 더 쉽게 만든다. 🧭
- 구조적 동시성 API를 사용하면 태스크 구조와 유사한 코드를 작성할 수 있어, 복잡한 동시성 로직을 직관적으로 표현하고 관리할 수 있다. 🧩
- 대출 신청 기능을 예시로, 고객 정보 조회, 계좌/대출 정보 조회, 신용 점수 조회, 최종 제안 계산 등의 태스크를 구조적으로 구성하여 동시성을 효율적으로 관리할 수 있다. 🏦
- 신용 점수 조회 시 여러 서비스 중 하나의 응답만 필요할 경우, 구조적 동시성을 통해 하나의 태스크 성공 시 나머지 태스크를 취소하는 방식으로 자원을 효율적으로 사용할 수 있다. ✅