JVM 동시성 모델 이해하기 (8) – 총정리 — 언제 무엇을 선택할 것인가

시리즈 되돌아보기 7편의 글에 걸쳐 JVM 위의 동시성 기술이 어떤 문제를 풀기 위해 등장했고, 어떻게 발전해왔는지를 살펴봤습니다. 각 기술이 해결하려 한 핵심 문제 한 가지를 중심으로 되돌아봅니다. Part 1 — 동시성과 병렬성의 기초. 동시성(concurrency)과 병렬성(parallelism)은 다르다. 동기/비동기는 “결과를 누가 챙기는가”, 블로킹/논블로킹은 “제어권이 언제 돌아오는가” — 이 두 축이 독립적이라는 것을 정리했습니다. 이후 모든 기술을 이해하는 … 더 읽기

JVM 동시성 모델 이해하기 (6) – Spring + Coroutines 통합 — WebFlux, MVC, 그리고 AOP의 한계

Reactor 위에서 동기 코드를 쓴다 — Spring이 suspend fun을 처리하는 방식 Part 5에서 코루틴의 원리를 다뤘습니다 — CPS 변환, 상태 머신, Flow, 구조화된 동시성. 코루틴이 “동기 코드처럼 보이지만 논블로킹인” 코드를 가능하게 해준다는 것을 이해했습니다. 하지만 한 가지 의문이 남아 있습니다. Spring WebFlux는 Reactor 기반입니다. Part 4에서 다뤘듯이, WebFlux의 요청 처리 파이프라인은 Mono/Flux를 통해 흐릅니다. 컨트롤러가 … 더 읽기

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

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