
모던 자바 동시성 프로그래밍
편리함, 견고함, 고성능, 어느 것도 양보하지 않는 새로운 자바의 표준
ANM 바즐루어 라만 지음 | 오명운 옮김
436쪽 | 33,000원 | 2026년 2월 27일 출간 | 185*240*21 | ISBN 9791124309025 (93000)
판매처 | [교보문고] [YES24] [알라딘] [영풍문고] + 전국 교보/영풍문고 매장
전자책 판매처 | [교보문고] [YES24] [알라딘] [리디북스] | 2026년 3월 출간 예정
✔ 원서명: Modern Concurrency in Java: Virtual Threads, Structured Concurrency, and Beyond
✔ 정오표: https://www.onlybook.co.kr/entry/java-concurrency-errata (아직 등록된 정오사항이 없습니다)
가상 스레드와 구조적 동시성을 도입한
자바의 새로운 가능성과 역동적인 미래!
에이전틱 AI 시대,
근본적이고 견고한 프로그래밍 개념 지식은
차별화된 결과물을 만든다!
자바 21의 핵심 기능인 가상 스레드가 바꿔놓은 획기적인 세상을 탐구하자!
스레드 생성 비용 때문에 고전하고, 확장성의 한계에 가로막히고,
높은 처리량을 달성하는 데 어려움을 겪었던 기억이 있는가?
그런 시대는 이제 끝났다.
이 책에서는 자바 1.0에서 시작해 프로젝트 룸의 최첨단 발전에 이르는 모든 내용을 다룬다.
또한 단순히 어떻게 동작하는지 이론만 배우는 것이 아니라,
이러한 개념을 완전히 자기 것으로 만들 수 있도록 전문가 수준의 팁과 노하우도 알려준다.
| 이 책에서 다루는 내용 |
- 플랫폼 스레드와 이그제큐터 프레임워크에서부터 CompletableFuture와 리액티브 프로그래밍까지 자바 동시성의 진화 과정
- 가상 스레드, 구조적 동시성, 스코프드 밸류의 내부 동작에 대한 심층적인 설명
- 새로운 기능을 효과적으로 적용하는 방법을 보여주는 실전 중심 예제
- 가상 스레드뿐만 아니라 구조적 동시성과 스코프드 밸류를 포함하는 폭넓은 범위
- 스프링 부트, 쿼커스, 자카르타 EE 같은 현대 프레임워크가 가상 스레드를 어떻게 통합하고 있는지에 대한 안내
| 이 책의 대상 독자 |
- 가상 스레드와 구조적 동시성을 제대로 이해하고 싶은 개발자
- 동시성 코드를 현대화하려는 중급 및 시니어 개발자
- 확장 가능한 시스템을 설계하는 아키텍트
- 견고한 동시성 애플리케이션을 구축하고자 하는 성능 중심 엔지니어
- 새로운 기술을 평가하는 팀 리드
- 자바 동시성의 미래가 궁금한 사람
이 책의 구성
1장, ‘한눈에 살펴보는 자바 동시성 변천사’
자바에서의 동시성 진화를 살펴보는 것으로 시작한다. 플랫폼 스레드에서 출발해 이그제큐터 프레임워크, 포크/조인, CompletableFuture로 이어지는 흐름을 추적하고, 리액티브 프로그래밍을 간략히 소개한다. 이러한 역사적 맥락을 알면 가상 스레드를 왜 게임 체인저(game changer)라고 부르는지 알 수 있게 된다. 그동안 우리가 감수해 온 트레이드오프를 살펴보고, 프로젝트 룸이 왜 근본적으로 다른 접근 방식을 선택했는지 이해하게 된다.
2장, ‘쉼 없이 CPU를 활용하는 가볍고 부지런한 가상 스레드’
가상 스레드를 실습 중심으로 소개한다. 가상 스레드가 무엇이며, 플랫폼 스레드와 어떻게 다른지, 그리고 어떻게 생성하는지를 배운다. 처리량과 확장성 개선을 다루는 실용적인 예제를 다루며, 주요 주제로는 세마포어를 활용한 요청 제한과 스레드 고정, ThreadLocal 관련 고려사항과 같은 중요한 제약이 포함된다.
3장, ‘직접 만들어보고 이해하는 최신 동시성 메커니즘’
동시성의 내부 동작을 깊이 있게 다룬다. 스레드 풀, 이그제큐터 프레임워크, 그리고 가상 스레드를 구동하는 ForkJoinPool을 분석한다. 특히 컨티뉴에이션(continuation)을 사용해 가상 스레드 구현을 처음부터 직접 만들어보는 것은 3장의 하이라이트라고 할 수 있다. NanoThread를 만들어보면서 가상 스레드가 내부적으로 어떻게 동작하는지 깊이 있게 이해할 수 있다.
4장, ‘빈틈없이 견고하고 편리한 구조적 동시성’
프로젝트 룸의 가장 중요한 혁신 중 하나인 StructuredTaskScope를 다룬다. 비구조적 동시성에 존재하는 문제를 어떻게 해결하는지 살펴보고, 다양한 조인(join) 정책을 익히고, 예외를 우아하게 처리하며, 견고한 동시성 애플리케이션을 구축하는 방법을 배운다. 기본 사용법부터 커스텀 조이너(joiner)와 중첩 스코프(nested scope)까지 폭넓게 다룬다. 집필 시점 기준으로 구조적 동시성은 아직 프리뷰 상태다. 이 프리뷰 버전이 크게 바뀌지 않기를 바라지만, 변경사항이 있다면 2판에서 다룰 예정이다.
5장, ‘동시성 모델의 화룡점정, 스코프드 밸류’
고도의 동시성을 가진 애플리케이션에서 컨텍스트 전파는 항상 어려운 문제였다. 5장에서는 스코프드 밸류가 가상 스레드 환경에서 ThreadLocal보다 더 나은 대안이 되는 이유를 설명한다. API를 살펴보고, 구조적 동시성 맥락에서의 실용적인 예제를 통해 ThreadLocal에서 언제 어떻게 스코프드 밸류로 전환해야 하는지를 이해하게 된다.
6장, ‘가상 스레드 시대에서 리액티브 자바의 의미’
가상 스레드와 리액티브 프로그래밍이 동시성 문제 해결에 접근하는 방식의 차이를 이해하는 것을 목표로 한다. 블로킹 I/O와 논블로킹 I/O, 이벤트 기반 아키텍처, 그리고 각 접근 방식의 트레이드오프를 비교한다. 이를 통해 언제 가상 스레드를 선택하고 언제 리액티브 프레임워크를 선택해야 하는지 합리적으로 판단할 수 있게 된다.
7장, ‘프레임워크를 통해 알아보는 최신 동시성 프로그래밍’
주요 프레임워크들이 가상 스레드를 어떻게 수용하고 있는지 살펴본다. 스프링 부트, 쿼커스, 자카르타 EE를 다루며, 실질적인 설정 예제와 모범 사례를 제공한다. 7장은 가상 스레드를 학습하는 단계와 실제 운영 환경에 적용하는 단계 사이의 간극을 메워준다.
8장, ‘자바 동시성 프로그래밍의 미래’
자바 동시성 프로그래밍의 미래를 내다보며 핵심 인사이트를 정리한다.
추천의 글
넷플릭스는 리액티브 프로그래밍이 제공하는 높은 처리량의 필요를 인정하면서도 전 구간 리액티브 제약과 복잡한 에러 처리, 디버깅의 어려움 때문에 더 이상 새로운 서비스에 스프링 웹플럭스를 사용하지 않고 스프링 웹 MVC로 표준을 전환했다. 캐시프리 같은 금융 서비스나 이커머스처럼 높은 동시성 작업이 필요한 산업에서도 비슷한 이유로 가상 스레드 기반의 동기식 코드로 회귀하고 있다. 이들이 공통으로 발견한 것은 자바의 가상 스레드가 리액티브의 복잡성 없이도 동등한 확장성을 제공한다는 점이다. 자바는 점진적이지만 근본적인 해결책을 추구했다. 그 덕분에 지난 수십 년간 만들어진 수많은 엔터프라이즈 애플리케이션이 아키텍처 재설계 없이도 가상 스레드 도입으로 확장성을 개선할 수 있게 되었다.
이 책은 가상 스레드를 중심으로 한 새로운 자바 동시성 기술을 다루지만, 동시에 자바 동시성의 근간이 되는 스레드 모델, 동기화 같은 기본 개념도 하나하나 친절하게 설명한다. 그저 새로운 API를 나열하는 것을 넘어, 스레드풀이 어떻게 동작하는지, 가상 스레드가 왜 고정 문제를 겪는지, 구조적 동시성이 왜 중요한지를 코드 수준에서 설명하고, 나아가 운영 환경에서 실제로 마주칠 수 있는 트러블슈팅 사례와 모니터링 방법까지 실무적인 관점을 놓치지 않는다. 이론과 실무, 과거와 현재를 아우르는 저자의 깊은 통찰을 엿볼 수 있다.
무엇보다 이 책이 빛나는 이유는 옮긴이 오명운 님의 꼼꼼함과 친절함 때문이다. 감사하게도, 모든 코드를 직접 실행해 보며 헤맬 수 있는 부분마다 이정표를 세워두고, 함께 읽으면 좋을 글을 소개해 주었다. 단어 하나하나 곱씹으며 번역을 했다는 사실이 책 전반에서 느껴진다. 기술의 본질을 파고드는 번역가의 자세가 이 책을 더욱 완성도 높게 만들어준다.
자바 동시성의 미래를 알고 싶은 모든 개발자에게 이 책을 권한다.
- 박용권 / 당근마켓 시니어 엔지니어
이 책은 자바 1.0의 전통적인 스레드 모델에서 출발해 자바 21 이후 도입된 가상 스레드와 구조적 동시성에 이르기까지 자바 동시성의 진화를 코드 중심으로 풀어낸 실용적인 전문서입니다. 각 시대의 동시성 모델이 지닌 한계와 그 해결 과정을 따라가며 변화의 흐름을 자연스럽게 이해하도록 도와줍니다. 특히 새로운 기능을 단순히 소개하는 데 그치지 않고, 실제 애플리케이션 코드와 구체적인 예제를 통해 설계와 적용 방법을 실질적으로 안내해 주는 점이 매우 인상적입니다. 독자들은 이 책을 통해 동시성 코드의 복잡성을 줄이면서도 안정성과 확장성을 함께 확보하는 방법을 자연스럽게 익힐 수 있을 것입니다.
『OpenAPI와 스웨거를 활용한 실전 API 설계』 등의 여러 기술서를 옮긴 오명운 님은 원서의 의도와 맥락을 정확히 살리는 것으로 정평이 나 있습니다. 그간의 전문성이 녹아 있는 이 책을 최신 자바 동시성 모델을 깊이 있게 이해하고자 하는 개발자 여러분께 자신 있게 추천합니다.
- 신동민 / NHN Dooray CTO
많은 프로그래머에게 동시성 문제는 늘 골칫거리이며, 이를 해결하기 위한 방법 또한 다양하게 존재합니다. 하지만 실제 현장에서는 동시성의 기본 개념이나 대표적인 문제들에 대한 충분한 이해 없이 단순히 프로그래밍 언어에서 제공하는 동시성 처리 API를 활용하는 경우를 자주 봐왔습니다. 이러한 접근 방식은 운영 환경에서 동시성 문제가 발생했을 때 원인 규명과 해결책 도출에 많은 시간을 소모하게 만들며, 경우에 따라서는 문제를 정확히 파악하는 것조차 어려워집니다. 특히 AI 기반 바이브코딩이 보편화되고 있는 오늘날에는, AI가 작성한 코드에 대한 리뷰와 검증을 위해서라도 개발자 스스로 동시성에 대한 기본 이해도를 갖추는 것이 더욱 중요해지고 있습니다.
이 책은 동시성의 기본 개념과 주요 문제점을 깊이 있게 다루며 자바 언어에서 제공하는 다양한 동시성 API와 그 활용 방법을 체계적으로 설명합니다. 또한 단순한 기술 소개에 그치지 않고, 설계 단계에서 동시성 문제를 어떻게 바라보고 고민해야 하는지에 대한 실질적인 지침까지 제시하므로 매우 시의적절합니다. 동시성 개념과 문제에 대해 폭넓은 이해를 원하는 프로그래머들에게 이 책을 강력히 추천합니다.
- 심천보 / 카카오엔터테인먼트 베리즈개발그룹장
자바 개발자를 20세기에 시작한 저 같은 분들은 자바를 처음 접할 때 그린 스레드(green thread)라는 걸 배우셨을 겁니다. 저 또한 배웠었고, 실제 개발에서는 네이티브 스레드(native thread)를 써서 고성능의 자바 애플리케이션을 개발해 왔습니다. 그런데 2017년 무렵 프로젝트 룸(Project Loom)이 올라왔을 때 저는 정말 세상이 많이 변했다는 생각을 했습니다. 예전에 고Go 프로그래밍 언어의 고루틴(goroutine)을 보면서 아이디어가 참 좋다고 생각했었는데 이게 코틀린Kotlin에서도 사용되는 것을 보면서 이대로 굳어지겠다는 생각이 들었습니다.
23년 9월 JDK 21에 가상 스레드가 공식으로 포함되면서 이제 대다수 프레임워크에서 적용되고 있습니다. “이걸 굳이 알 필요가 있을까?”라고 질문한다면 저는 이 책을 꼭 일독하시라고 권해드리고 싶습니다.
컴퓨팅 환경의 변화가 정말 빠르고 광범위하게 바뀌고 있는데, 우리가 API만 찍어내는 일만 한다 하더라도 이제는 그 API를 구현하는 프레임워크에서 어떻게 돌아가는지를 이해하지 못한다면, 장애나 문제가 발생했을 때 챗GPT나 제미나이 같은 AI 서비스가 온라인이 안 되는 사태가 발생할 때는 바보 개발자가 될 수도 있다고 생각합니다. 동시성이 항상 적용되고 있는 상황에서 “왜?”라는 질문에 답할 수 있도록 잘 이해하며 프로그래밍할 수 있다면, 그건 개발자로서 역량의 격차를 만들 것입니다.
이 책을 꼭 한번 읽어보시길 강력 추천합니다.
- 양수열 / 크라우드웍스 CTO, 한국인 최초의 자바 챔피언
함께 프로젝트를 진행하며 알게 된 옮긴이 명운 님은 언제나 새로운 시도를 두려워하지 않고, 생소한 개념을 좀 더 빠르게 파악해 상용 프로젝트에 도입하여 직간접적인 리소스를 절감하는 것을 좋아하는 지칠 줄 모르는 혁신형 개발자입니다. 혁신형 개발자의 풍부한 실무 경험을 바탕으로 한국어로 옮겨온 이 책은, 정교하게 구조화된 자바 비동기 프로그래밍에 대한 갈증을 느껴왔거나 저와 같이 Node.js, C# 프로젝트에서 경험한 async/await 모델을 자바의 가상 스레드로 우아하게 구현해 보고 싶은 개발자들에게 완벽한 가이드가 될 것이라 확신합니다.
평소 코드 리뷰를 통해 복잡하게 얽혀 있던 도메인 로직과 설명하기 애매한 구조적 내용도 언제나 쉽고 직관적으로 풀어서 설명해 주셨던 명운 님 특유의 스타일이 이 책에도 고스란히 녹아 있어 조금만 읽으려 해도 다음 페이지를 넘기고 있는 제 모습을 발견하게 됩니다.
- 윤승재 / 네이버제트 개발자
자바로 서비스를 만들어온 개발자라면, 언젠가 반드시 동시성 문제와 마주하게 됩니다. 급격히 늘어나는 요청을 감당해야 하는 서비스, 데이터 정합성이 생명인 금융이나 예약 시스템, 한정된 재고를 다루는 커머스 등이 대표적입니다. 이런 서비스에서 장애나 오류의 원인을 끝까지 추적해 보면, 결국 동시성 문제에 닿는 경우가 많습니다.
동시성을 본격적으로 학습하려는 개발자에게 그동안 추천하던 책은 브라이언 게츠의 『자바 병렬 프로그래밍』이었습니다. 하지만 거의 20년 전에 출간된 책이었기에 고전적인 내용에 머물러 있었으므로, 자바 25까지 발전해 온 현대적 동시성을 안내하는 새로운 지침서가 절실했습니다. 이 책은 바로 그 오랜 빈자리를 채워주는 자바 동시성의 새로운 바이블입니다.
오랜 기다림 끝에 등장한 가상 스레드는 동시성을 다루는 방식을 근본적으로 바꿔놓은 혁신적인 기술입니다. 이 책은 가상 스레드를 비롯해 구조적 동시성, 스코프드 밸류 등 최신 자바가 제시하는 현대적 동시성 모델을 체계적으로 다루고 있습니다. 동시성 문제와 마주하는 것은 피할 수 없지만, 이 책이 그 여정을 훨씬 수월하게 만들어줄 것입니다.
- 이일민 / 이프릴 대표, 『토비의 스프링』 저자
숙련된 개발자와 그렇지 않은 개발자를 가르는 지식을 한 가지만 꼽으라면, ‘동시성에 대한 이해’가 가장 먼저 떠오른다. 실무 운영 환경에서 발생하는 심각한 장애를 해결하고, 대량 트래픽을 안정적으로 처리하는 시스템을 만들기 위해 갖춰야 할 지식이기 때문이다. 자신의 PC에서 잘 동작하는 프로그램을 누구나 만들 수 있게 된 요즘 시대에도, 개발자의 전문성은 결국 이 지점에서 드러난다. 안정성, 확장성, 효율성에 대한 높은 기준을 스스로 세우고, 동시성 관련 기법을 활용해 그 기준을 충족하는 프로그램을 작성하는 개발자는 여전히 흔치 않기 때문이다.
최근의 자바는 가상 스레드, 구조적 동시성, 스코프드 밸류 등을 도입하며 개발자들이 오랫동안 씨름해 온 동시성의 난관을 좀 더 쉽게 해결할 수 있는 도구를 제공했다. 이를 통해 실질적인 가치를 창출해야 하는 차례가 현장의 개발자들에게 넘어왔다.
이러한 흐름에 발맞춰, 이 책은 동시성에 대한 과거 자바의 여정부터 시작하여 현시점의 자바 개발자가 갖춰야 할 소양을 친절하면서도 깊이 있게 안내해 준다.
- 정상혁 / 네이버 개발 리더
바이브코딩이 프로그래밍의 지형을 근본부터 뒤흔들고 있는 시대에도, 자바는 자신의 정체성을 잃지 않으며 유유히 진화해 왔습니다. 프로젝트 룸을 시작으로, 기존 프로그래밍의 틀을 파괴하지 않고도 획기적으로 효율적인 스레드 모델을 사용할 수 있게 되었습니다. 가상 스레드를 발표한 이후에도 현장의 목소리를 반영하여 StructuredTaskScope와 ScopedValue를 잇달아 선보이며, 자바는 실용성과 안정성이라는 자신만의 철학을 묵묵히 증명해 가고 있습니다.
이 책은 자바 1.0 시절의 스레드 모델부터 이그제큐터(Executor) 프레임워크, Completable Future, 리액티브 프로그래밍에 이르는 동시성의 진화 과정을 차근차근 짚어줍니다. 그 위에서 가상 스레드의 내부 동작 원리인 ForkJoinPool과 Continuation을 깊이 있게 다루고, 직접 가상 스레드를 만들어보는 과정까지 안내하여 ‘왜 이렇게 설계되었는가’를 체감할 수 있게 합니다. 나아가 요청 제한(rate limiting), 디버깅, 모니터링 같은 운영 환경의 현실적인 과제를 다루며, 스프링 부트, 쿼커스, 자카르타 EE 등 주요 프레임워크에서 가상 스레드를 통합하는 방법까지 폭넓게 안내합니다.
끝으로, 역자의 도서 선택에 대한 선구안에 늘 감탄합니다. 기본을 탄탄히 다지면서도 새로운 기술의 본질을 꿰뚫는 책을 골라내는 안목이 이번에도 빛을 발했습니다. 오랜 기간 현업에서 쉬지 않고 프로그래밍해 온 경험이 고스란히 녹아든 번역은, 현장에서 바로 통하는 자연스러운 용어 선택으로 이 책의 가치를 한층 더 높여줍니다.
- 정지범 / NHN Dooray 협업서비스개발블루팀 팀장
프로그래머에게 동시성 프로그래밍은 사춘기를 보내는 아이를 대하는 것과 비슷합니다. 이해하기도 어렵고, 불안정하며, 제대로 동작하는지 테스트하는 것조차 버거워 프로그램에 치명적인 상처를 입히기도 합니다. 최근에 자바에 도입된 가상 스레드와 구조적 동시성, 스코프드 밸류는 동시성 프로그래밍에 대한 이런 오해와 불신을 완벽하지는 않아도 만족스러울 정도로 해결해 주고 있습니다. 그리고 이 책은 이런 개선사항들에 대한 개념과 사용 방법을 놀랍도록 완벽하면서도 만족스럽게 설명합니다.
이 책은 단순히 신기술을 나열하는 데 그치지 않고 자바 동시성 모델의 역사와 내부 메커니즘을 깊이 있게 파고들며, 기존 라이브러리의 한계와 최적의 활용법을 명확히 짚어줍니다. 패러다임 관점에서도 주목할 만한데, 명령형 프로그래밍 방식으로도 충분히 이해하기 쉽고 예상 가능한 동시성 프로그램을 작성할 수 있음을 보여줍니다. 예제는 실무에서 활용할 수 있을 만큼 실용적이고 구체적이며, 리액티브 프로그래밍과의 비교, 스프링 부트와 쿼커스를 포함한 최신 프레임워크에서의 활용 방법 등 개발자에게 유용한 내용들로 가득 차 있습니다.
그동안 동시성 프로그래밍이 어렵게만 느껴지셨나요? 그렇다면 이 책을 꼭 읽어보시기 바랍니다. 동시성 프로그래밍의 본질적인 불안정성 자체는 제거할 수 없겠지만, 최소한 안정적으로 통제할 수 있다는 확신은 들 것입니다. 적어도 저는 그렇게 느꼈습니다.
- 조영호 / 『객체지향의 사실과 오해』, 『오브젝트』 저자
자바에서 스레드를 사용해 왔지만, 그 내부 동작 원리와 성능에 어떤 영향을 미치는지까지 제대로 이해해 보고 싶었던 개발자라면 이 책을 읽어보길 강력히 추천합니다.
이 책에서는 플랫폼 스레드의 한계에서 출발해 JDK 21의 가상 스레드가 왜 등장했는지, 그리고 JVM이 이를 실제 OS 스레드 위에서 어떻게 실행하고 관리하는지까지 설명합니다. 핵심 개념을 차근차근 풀어주므로, 동시성을 단순히 사용하는 수준을 넘어 제대로 이해하도록 돕습니다. 또한 기존의 이그제큐터나 스레드 풀 방식과 무엇이 다른지 쉽게 비교해 주므로, 왜 새로운 접근이 필요한지도 자연스럽게 이해할 수 있습니다. 또한 구조적 동시성과 스코프드 밸류를 통해 복잡한 비동기 코드를 더 단순하고 안전하게 구성하는 방법도 보여줍니다.
스레드의 원리를 더 깊이 이해하고 싶은 중급 개발자, 그리고 가상 스레드의 내부 메커니즘까지 제대로 알고 싶은 모든 개발자에게 자신 있게 추천합니다.
- 홍상표 / 포티투닷(42dot) 스태프 백엔드 엔지니어, 팀 리드
바즐루어 라만이 자바의 동시성을 멋지게 정리해낸 이 책은 제목 그대로 “모던”하다. 오랜 기다림 끝에 최신 JDK에 포함된 많은 기능을 다뤄주는 덕분에, 자바의 최신 가상 스레드 정보, 그리고 전반적인 동시성 프로그래밍과 관련한 팀 차원의 모범 사례를 모두 배울 수 있는 매우 훌륭한 책이다. 강력히 추천한다.
- 마크 로이(Marc Loy) / 자바 저자
이 책은 가상 스레드, 구조적 동시성, 스코프드 밸류를 탁월하게 탐구하며, 자바 개발자가 확장성을 바라보는 방식을 근본적으로 바꿔놓는다. 오래된 고전인 『Java Concurrency in Practice』의 뒤를 잇는 책으로, 확장성 있는 시스템을 다루는 모든 자바 개발자라면 반드시 읽어야 한다.
- 켄 코우젠(Ken Kousen) / 코우젠IT 대표, 트리니티 대학 교수, 『코틀린 쿡북』 저자
지은이 ANM 바즐루어 라만 Bazlur Rahman
자바 및 관련 기술 분야에서 10년이 넘는 전문 경력을 쌓아온 소프트웨어 엔지니어이자 자바 챔피언이다. 다양한 국제 컨퍼런스와 자바 사용자 그룹에서 활발히 발표하는 연사로 활동해 왔으며, 동시성과 가상 스레드 같은 전문 주제를 중심으로 한 발표를 다수 진행했다. 자바 챔피언으로서 인포큐InfoQ와 Foojay.io의 자바 큐Java Queue 편집자로도 활동하고 있다. 또한 방글라데시 자바 사용자 그룹의 설립자이자 현재 운영자로서, 2013년부터 교육용 밋업과 컨퍼런스를 조직해 오고 있다.
동시성은 오랫동안 자바 개발에서 가장 어려운 영역 중 하나였다. 자바는 하위 호환성에 대한 약속을 확고하게 지키면서도 현대 소프트웨어 개발에서 요구하는 것을 충족하기 위해 지속적으로 진화해 왔다. 지난 수년간 자바에서 볼 수 있었던 여러 발전 가운데서도, 프로젝트 룸(Project Loom)이 도입한 가상 스레드는 동시성의 세계에서 획기적이고도 근본적인 전환점이라고 할 수 있다.
동시성 처리는 본질적으로 어려운데, 성능 요구가 증가하면서 그 난이도는 더욱 높아졌다. 숙련된 개발자에게도 동시성을 효과적으로 관리하는 일은 여전히 복잡한 과제다. 오늘날의 현대 애플리케이션은 수많은 다른 시스템과 상호작용하므로 주로 I/O 중심으로 동작한다. 특히 확장성 요구를 충족하기 위해 널리 사용되는 마이크로서비스 아키텍처 환경에서는 더욱 그렇다.
I/O 작업을 처리하는 데는 종종 상당한 시간이 걸린다. 스레드가 I/O 작업을 수행하면, 전통적인 방식에서는 해당 작업이 완료될 때까지 대기해야 한다. 현대 운영체제는 수백만 개의 열린 소켓을 관리할 수 있지만, 사용 가능한 스레드 수에는 여전히 한계가 있다. 그 결과, 전통적인 스레드 모델을 사용해서 늘어나는 처리량 요구를 충족하는 일은 점점 더 복잡해졌다.
이러한 한계에 대응하기 위해 다양한 기법과 동시성 대안 모델이 고안되었지만, 각자 고유한 트레이드오프를 갖는다. 가상 스레드는 소수의 커널 스레드 위에 다수의 경량 사용자 모드 스레드를 다중화하는 방식으로, 동시성 문제를 효율적으로 해결하는 유망한 해법이라고 할 수 있다. 덕분에 시스템 자원을 좀 더 효율적으로 활용할 수 있게 됐다. 가상 스레드는 시스템의 확장성을 크게 향상할 수 있으며, 동시성 처리 분야에서 상당히 주목할 만한 진전이라고 할 수 있다.
가상 스레드를 처음 접했을 때부터 아주 강한 흥미를 느꼈다. 가상 스레드는 JVM에서 동시성 프로그램을 작성하는 방식을 근본적으로 바꿀 수 있는, 오랫동안 기다려온 돌파구처럼 보였다. 자바가 제대로 된 해법을 제공하지 못했던 영역에 단순하고 우아한 해결책을 제시했기 때문이다.
나는 가상 스레드를 직접 실험하기 시작했고, 그 결과를 블로그에 정리하고 컨퍼런스에서 발표했다. 개발자 커뮤니티의 열정적인 반응을 보면서 가상 스레드가 단순한 기능 개선이 아니라 동시성 처리 방식의 근본적인 변화를 이끌어냈다는 점을 다시 한번 확신할 수 있었다.
탐구를 계속하면서 가상 스레드를 둘러싼 방대한 자료들이 등장하고 있음을 알게 됐다. 공식 문서, 통찰력 있는 블로그 글, 실제 사례가 담긴 깃허브 저장소, 훌륭한 컨퍼런스 세션들이 그것이다. 이 자료들은 개별적으로 모두 가치가 있었지만, 각자 다른 측면에 초점을 맞추고 있었다. 어떤 것은 기술적 구현을 다뤘고, 어떤 것은 마이그레이션 전략이나 특정 사용 사례를 이야기했다.
지속적인 집필과 발표, 그리고 실습을 통해 이 주제를 더 명확하고 종합적으로 이해할 수 있게 됐다. 이러한 탐구 과정을 통해 프로젝트 룸이 시작된 배경, 자바의 기존 동시성 모델과의 통합 방식, 그리고 확장성과 유지보수성을 갖춘 시스템을 구축하는 데 미치는 영향을 폭넓게 이해할 수 있었다. 이런 여정을 거치면서 하위 호환성을 유지하면서도 변화에 적응하는 자바의 놀라운 능력을 더 깊이 존중하게 됐다.
결국 이러한 이해를 하나의 실용적인 자료로 통합할 필요가 있다는 사실을 깨달았다. 이 책은 이론적인 탐구에 그치지 않고, 필요한 개념과 예제, 모범 사례를 하나로 모은 실무 중심의 가이드다.
옮긴이 오명운
생태계에 조금이라도 보탬이 되려는 개발자. 개인 깃허브 페이지(https://github.com/Homo Efficio/dev-tips)에 잡다한 문제 해결 기록을 공유하고 있으며, 계단 오르기로 체력과 호흡을 개선하며 활력을 되찾고 있다. 네이버제트에서 제페토 서비스를 만들고 있다. 『OpenAPI와 스웨거를 활용한 실전 API 설계』(책만, 2023), 『실전 스프링 부트』(제이펍, 2023), 『스프링 부트 실전 활용 마스터』(책만, 2021), 『엔터프라이즈 데이터 플랫폼 구축』(책만, 2020) 등을 번역했으며, 적은 양이라도 꾸준히 번역 작업을 이어갈 생각이다.
자바는 오랜 세월 동안 하위 호환성을 훌륭하게 유지하면서 진화해 왔습니다. 다양한 기능이 추가됐고, 성능과 프로그램 작성 편의성이 향상되는 등 여러 변화가 있었지만 자바에서 실행되는 모든 것이 결국은 스레드에서 실행된다는 사실은 변하지 않았습니다.
하지만 자바에서 이그제큐터(Executor) 프레임워크가 나온 이후로 스레드나 스레드 풀을 개발자가 직접 다뤄야 할 일이 별로 없어졌기 때문에 스레드를 이해하는 것이 어쩌면 더 어려울 수도 있습니다.
이 책은 자바의 최신 동시성을 다루면서도, 자바 첫 출시부터 있어왔던 스레드부터 친절하게 설명을 시작합니다. 그래서 저자는 대상 독자를 중급 이상의 개발자로 권장하고 있기는 하지만, 책을 옮긴 제가 볼 때는, 특히 스레드를 중심으로 한 동시성 기초 관점에서 보면 오히려 초급 개발자에게도 이만 한 안내서가 없을 거라는 생각도 듭니다.
가상 스레드는 자바 애플리케이션의 확장성을 완전히 다른 차원으로 끌어올린 결정적인 ‘한 방’이라고 생각합니다.
대대적인 리팩토링 없이도 가상 스레드를 적용할 수 있다는 사실은 무척이나 놀라웠습니다. 그래서 가상 스레드의 작동 원리를 다루는 훌륭한 자료도 이제는 상당히 많이 나와 있습니다.
그럼에도 불구하고 자바 21에 처음 가상 스레드가 도입된 지 2년이 넘어가는 지금까지도 가상 스레드를 전격적으로 적용했다는 얘기는 가상 스레드 자료만큼 쉽게 찾을 수는 없는 것 같습니다. 오히려 가상 스레드를 적용하려다 다시 원래대로 되돌렸다는 얘기가 종종 들리곤 합니다. 가장 큰 이유는 synchronized 블록 내부의 코드를 실행할 때와 네이티브 메서드를 실행할 때 발생하는 스레드 고정 현상 때문이었습니다. 그 외에도 비동기로 작업 흐름을 구성한 경우 작업 흐름 제어, 굉장히 많은 수의 가상 스레드 사용 시 드러나는 ThreadLocal 부작용도 가상 스레드 적용에 걸림돌이 되었습니다.
하지만 가장 큰 이유였던 synchronized 블록의 스레드 고정 현상은 자바 24에서 해소되었습니다. JDK 수준에서 synchronized 내부 구현을 변경한 것이라서 소스 코드를 변경할 필요도 없으며 자바 24+만 적용하면 됩니다.
비동기 작업 흐름 제어는 자바 26에서 프리뷰Preview 단계로 적용돼 있는 구조적 동시성이 해결하고 있고, ThreadLocal 부작용은 자바 25에서 정식 도입된 스코프드 밸류(ScopedValue)를 사용해서 해결할 수 있습니다. 이런 부분은 비록 소스 코드의 수정을 필요로 하지만 대대적인 리팩토링이 필요한 정도는 아니라는 점에서 이제는 기존 프로젝트에도 충분히 적용할 만하다고 생각합니다.
남아 있는 문제는 네이티브 메서드 호출인데 JNI를 사용했던 많은 라이브러리가 자바 22에서 정식 도입된 외부 함수 및 메모리 API를 사용해서 가상 스레드 친화도를 높이거나, 아예 스레드 고정 현상이 발생하지 않도록 자바 구현체를 대신 사용하는 쪽으로 움직이고 있습니다.
이 책은 이처럼 가상 스레드의 본질적인 메커니즘과 장점뿐만 아니라 앞서 언급한 실무적인 걸림돌의 진단과 해소 방법까지, 어쩌면 지나치다 싶을 정도로 풍부한 예제 코드와 함께 설명하고 있습니다. 그래서 주어진 코드를 이리저리 바꿔가면서 실행해 보고 궁금증을 해소하다 보면 훨씬 더 재미있게 정말 많은 지식과 경험을 얻을 수 있을 것입니다.
최근에는 AI 에이전트를 사용한 개발이 활발해지면서 프로그래밍 언어가 아닌 일상 언어로 AI와 대화하면서 제품을 만들 수 있는 세상이 열리고 있습니다. 프로그래밍 언어를 몰라도 제품을 만드는 코드는 생성할 수 있겠지만, 프로그래밍 개념 없이 견고하고 안정성 있는 최종 결과물을 만들 수는 없다는 사실을 우리 개발자들은 너무나도 잘 알고 있습니다. 코드를 작성하는 작가에서 최종 제품을 만드는 감독으로, 역할이 바뀌는 지금이야말로 이 책에서 다루는 최신 동시성 모델에 대한 지식은 전보다 훨씬 더 큰 차별점이 될 거라고 믿습니다.
제가 이 책을 번역하면서 배운 것처럼 더 많은 개발자가 가상 스레드와 구조적 동시성, 스코프드 밸류라는 최신 동시성 모델을 더 깊이 이해하고, 더 많은 프로젝트에서의 가상 스레드 도입으로 이어져서, 확장성 향상과 비용 절감, 사용자 경험 향상을 갖춘 최종 제품이 더 많이 만들어진다면 번역자로서 너무나도 뿌듯할 것 같습니다.
번역자는 일차적으로는 원서를 우리글로 옮기는 일을 하는 사람이지만, 훌륭한 번역자는 먼저 독자의 입장에서 원서를 읽고 불편했던 점을 찾아 개선하고 최종 독자에게는 더 나은 결과물을 보여주는 사람이라고 생각합니다. 이번 책도 다소 모자람이 있겠지만 훌륭한 번역자에 조금이라도 다가가기 위해 원서보다 나은 역서를 목표로 번역 작업을 했습니다. 모쪼록 독자분들이 애초부터 한글로 쓰인 책인 것처럼 아무런 불편감 없이 읽어내시기를 욕심내어 바라봅니다.
차례
1장 한눈에 살펴보는 자바 동시성 변천사
자바 스레드의 간략한 역사
__자바는 스레드로 만들어진다
__스레드: 자바 플랫폼의 중추
자바 1.0 스레드의 기원
__스레드 시작하기
스레드에 숨어 있는 비용
__생성 가능한 스레드 개수
고확장성 애플리케이션의 자원 효율성
__병렬 실행 전략
__이그제큐터 프레임워크 소개
__아직 남은 과제
스레드 풀의 발전
__캐시 선호도와 태스크 분배
__Work-Stealing 알고리즘
__CompletableFuture를 활용한 작업 흐름 조합
또 다른 패러다임의 비동기 프로그래밍
__리액티브 프레임워크의 단점
자바 동시성의 혁명
__가상 스레드의 약속
__기존 코드베이스와의 매끄러운 통합
__가상 스레드와 플랫폼 스레드
__지능적인 블로킹 연산 처리
__가상 스레드의 장점
정리
2장 쉼 없이 CPU를 활용하는 가볍고 부지런한 가상 스레드
가상 스레드란
__자바의 두 가지 스레드 유형
__플랫폼 스레드와의 결정적인 차이
가상 스레드 사용 준비
__가상 스레드 생성
가상 스레드에 적응하기
가상 스레드 생성 시연
__처리량과 확장성
__가상 스레드 확장성의 근본 원칙
__실질적인 의미
가상 스레드 내부 동작 방식
__스택 프레임과 메모리 관리
__캐리어 스레드와 운영체제의 개입
__블로킹 연산 처리
__투명성과 비가시성
__비동기 연산 단순화
__든든한 구조적 동시성
요청 제한을 통한 자원 제약 관리
__자바의 세마포어 이해
__세마포어를 사용하는 이유
가상 스레드의 한계
__가상 스레드 고정
__ReentrantLock으로 고정 문제 해결하기
__네이티브 메서드 호출과 고정
가상 스레드에서 ThreadLocal 변수의 문제
__가상 스레드의 도전 과제
모니터링
__ThreadLocal 모니터링
__가상 스레드 고정 현상 모니터링
__jcmd 스레드 덤프에서 가상 스레드 확인
HotSpotDiagnosticMXBean으로 스레드 덤프 생성
가상 스레드 마이그레이션 요령
__가상 스레드의 장점 되돌아보기
__핵심은 확장성이다
정리
3장 직접 만들어보고 이해하는 최신 동시성 메커니즘
스레드 풀
__스레드 풀이 필요한 이유
__단순한 스레드 풀 만들기
__이그제큐터 프레임워크
__Callable과 Future: 태스크 결과 처리
ForkJoinPool
__가상 스레드에서 ForkJoinPool을 사용하는 이유
컨티뉴에이션
__가상 스레드 직접 만들어보기
__가상 스레드와 I/O 폴링
정리
4장 빈틈없이 견고하고 편리한 구조적 동시성
비구조적 동시성의 문제
든든한 구조적 동시성
구조적 동시성 API 이해
__StructuredTaskScope
__스코프와 서브태스크: 관계와 생애주기
__Joiner를 통한 조인 정책
__공통적인 조인 정책들
__StructuredTaskScope의 예외 처리
__스코프 구성
__커스텀 조이너
__메모리 일관성 효과
__중첩 스코프
__관측성
정리
5장 동시성 모델의 화룡점정, 스코프드 밸류
컨텍스트 전달에 따르는 부담
__파라미터 오염
__인터페이스 취약성
__결합도와 테스트 용이성
ThreadLocal 소개
__ThreadLocal 변수의 한계
__가벼운 공유를 향하여
ScopedValue의 핵심 구성요소
__ScopedValue 실행
__ScopedValue와 구조적 동시성
__성능 고려사항
__사용성 및 API 설계
__ScopedValue로의 마이그레이션
정리
6장 가상 스레드 시대에서 리액티브 자바의 의미
리액티브 프로그래밍 이해
__블로킹 대 논블로킹
__이벤트 기반 아키텍처
__비동기 API
자바 리액티브 프로그래밍
__리액티브 스트림 이해
__배압
__리액티브 프로그래밍의 장점과 단점
정리
7장 프레임워크를 통해 알아보는 최신 동시성 프로그래밍
스프링 부트
__수동 구성
쿼커스
자카르타 EE
정리
8장 자바 동시성 프로그래밍의 미래
'+ 펴낸 책' 카테고리의 다른 글
| AI 프로젝트 100% 성공을 위한 체크리스트 17 (0) | 2026.01.21 |
|---|---|
| 모던 API 아키텍처 설계 전략 (1) | 2026.01.08 |
| 일 잘하는 엔지니어의 생각 기법 (0) | 2025.11.21 |
| 마스터링 윈도우 서버 2022 (0) | 2025.10.21 |
| 기업과 고객을 파괴하는 해킹과 사이버 보안의 모든 것 (0) | 2025.07.25 |
댓글