도서 소개
자바 21의 핵심 기능인 가상 스레드가 바꿔놓은 획기적인 세상을 탐구하는 교재다. 자바 1.0에서 시작해 프로젝트 룸의 최첨단 발전에 이르는 모든 내용을 다룬다. 또한 단순히 어떻게 동작하는지 이론만 배우는 것만이 아니라, 이러한 개념을 완전히 자기 것으로 만들 수 있도록 전문가 수준의 팁과 노하우도 알려준다.
출판사 리뷰
가상 스레드와 구조적 동시성을 도입한 자바의 새로운 가능성과 역동적인 미래!
에이전틱 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장, '자바 동시성 프로그래밍의 미래'
자바 동시성 프로그래밍의 미래를 내다보며 핵심 인사이트를 정리한다.
작가 소개
지은이 : A. N. M. 바즐루어 라만
자바 및 관련 기술 분야에서 10년이 넘는 전문 경력을 쌓아온 소프트웨어 엔지니어이자 자바 챔피언이다. 다양한 국제 컨퍼런스와 자바 사용자 그룹에서 활발히 발표하는 연사로 활동해 왔으며, 동시성과 가상 스레드 같은 전문 주제를 중심으로 한 발표를 다수 진행했다. 자바 챔피언으로서 인포큐InfoQ와 Foojay.io의 자바 큐Java Queue 편집자로도 활동하고 있다. 또한 방글라데시 자바 사용자 그룹의 설립자이자 현재 운영자로서, 2013년부터 교육용 밋업과 컨퍼런스를 조직해 오고 있다.
목차
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장 자바 동시성 프로그래밍의 미래