JVM 동시성 모델 이해하기 (7) – Virtual Thread — 동기 세계의 해법

왜 또 다른 동시성 모델인가 지금까지 시리즈에서 비동기 세계의 발전을 따라왔습니다. Future에서 CompletableFuture로, 다시 Reactor로, 마지막으로 Coroutines로 — 점점 가독성과 구조가 개선되었습니다. 하지만 이 모든 것은 “논블로킹 비동기”라는 패러다임 안의 발전이었습니다. 논블로킹 라이브러리(R2DBC, WebClient, Reactive MongoDB 등)를 사용해야만 그 이점을 누릴 수 있었고, JDBC나 JPA 같은 블로킹 코드와는 근본적으로 호환되지 않았습니다. Part 6에서 그 한계를 … 더 읽기

JVM 동시성 모델 이해하기 (5) – Kotlin Coroutines

동기 코드의 가독성으로 논블로킹을 — suspend 하나로 바뀌는 세상 Part 3에서 Reactor의 Mono/Flux를, Part 4에서 WebFlux를 다뤘습니다. Reactor는 논블로킹 비동기 처리를 가능하게 해주지만, 코드가 복잡해지면 flatMap 체이닝이 깊어지고 가독성이 떨어진다는 문제가 있었습니다. 관계가 깊어질수록 flatMap 안에 flatMap이 중첩되면서 코드의 흐름을 따라가기 어려워집니다. 같은 로직을 Kotlin Coroutines로 작성하면 이렇게 됩니다. 두 코드 모두 논블로킹입니다. I/O 대기 … 더 읽기

JVM 동시성 모델 이해하기 (1) – 동시성과 병렬성의 기초

Spring 개발자가 꼭 정리해야 할 기초 체력 Spring MVC 으로 잘 개발하고 있다가도 성능에 대한 고민을 하게 되면 WebFlux, Coroutine, Virtual Thread라는 키워드를 자연스레 접하게 됩니다. 문서를 읽어보면 “비동기 논블로킹”, “리액티브”, “경량 스레드” 같은 표현이 난무하는데, 막상 동시성과 병렬성의 차이가 뭔지, 비동기면 논블로킹이랑 같은 건지 물어보면 명확히 답하기 어렵습니다. 이 글은 JVM 동시성 모델 이해하기 … 더 읽기