diff --git a/chapter15.md b/chapter15.md
new file mode 100644
index 0000000..4e2957c
--- /dev/null
+++ b/chapter15.md
@@ -0,0 +1,133 @@
+# [Chapter 15] CompletableFuture와 리액티브 프로그래밍 컨셉의 기초
+
+```
+p.462
+
+ 요즘에는 독립적으로만 동작하는 웹사이트나 네트워크 애플리케이션을 찾아보기 힘들다.
+ 즉, 앞으로 만들 웹 애플리케이션은 다양한 소스의 콘텐츠를 가져와서
+ 사용자가 삶을 풍요롭게 만들도록 합치는 '매시업' 형태가 될 가능성이 크다.
+
+ 이런 애플리케이션을 구현하려면 인터넷으로 여러 웹 서비스에 접근해야 한다.
+ 하지만 이들 서비스의 응답을 기다리는 동안 연산이 블록되거나
+ 귀중한 CPU 클록 사이클 자원을 낭비하고 싶진 않다.
+ 예를 들어 페이스북의 데이터를 기다리는 동안 트위터 데이터를 처리하지 말란 법은 없다.
+```
+
+
+
+## 동시성 vs 병렬성
+
+- [동시성과 병렬성 참고 링크](https://seamless.tistory.com/42)
+
+
+
+## 15.1 동시성을 구현하는 자바 지원의 진화
+- Runnable, Thread
+- ExecutorService 인터페이스 (java 5)
+- 포크/조인 프레임워크 (java 7)
+- 람다 스트림 (java 8)
+- 발행-구독 프로토콜 (java 9)
+
+
+
+## 15.2 동기 API와 비동기 API : 메서드를 합하는 예제
+
+- 스레드 이용 : 코드가 복잡해 진다.
+
+```
+main() {
+ int X = 1337;
+ Result result = new Result();
+
+ Thread t1 = new Thread(() -> { result.left = f(x); });
+ Thread t2 = new Thread(() -> { result.right = g(x); });
+
+ t1.start();
+ t2.start();
+ t1.join();
+ t2.join();
+
+ System.out.println(result.left + result.right);
+
+class Result {
+ private int left;
+ private int right;
+}
+```
+
+
+- 스레드풀 & Future 이용 : 여전한 잡음
+
+```
+main() {
+ int X = 1337;
+
+ ExecutorService executorService = Executors.newFixedThreadPool(2);
+ Future y = executorService.submit(() -> f(x));
+ Future z = executorService.submit(() -> g(x));
+ System.out.println(y.get() + z.get());
+
+ executorService.shutdown();
+```
+
+
+
+- 리액티브(콜백 활용) 형식 + 별도의 결과 태스크 : 아직까지는 복잡함
+
+```
+main() {
+ int X = 1337;
+ Result result = new Result();
+
+ f(x, (int y) -> {
+ result.left = y;
+ System.out_println((result.left + result.right));
+ });
+
+ g(x, (int z) -> {
+ result.right = z;
+ System.out.println((result.left + result.right));
+ });
+}
+```
+
+
+
+## 15.3/4 박스와 채널 모델 / CompletableFuture와 콤비네이터
+
+
+
+부분 작업을 통합하는 앞선 예제들을 위와 같이 표현할 수 있습니다.
+
+15.2장의 예제 코드들의 문제를 CompletableFuture와 콤비네이터로 해결할 수 있습니다.
+
+```
+main() {
+ ExecutorService executorService = Executors.newFixedThreadPool(10);
+ int x = 1337;
+
+ CompletableFuture a = new CompletableFuture<>();
+ CompletableFuture b = new CompletableFuture<>();
+ CompletableFuture c = a.thenCombine(b, (y, z)-> Y + z);
+
+ executorService.submit(() -> a.complete(f(x)));
+ executorService.submit(() -> b.complete(g(x)));
+
+ System.out.println(c.get());
+ executorService.shutdown();
+}
+```
+
+
+
+## 15.5 발행-구독 프로토콜
+
+CompletableFuture를 활용한 위 예제에서는 '한 번'만 실행함에 주목하여야 합니다.
+
+웹 애플리케이션과 같이 응답을 기다리는 형태의 리액티브 시스템처럼
+
+'여러 번'의 실행울 하는 경우가 필요하기 마련입니다.
+
+
+
+자바 9의 Flow 인터페이스의 발행-구독 모델(pub-sub)을 활용할 수 있습니다.