Top

코틀린 리액티브 프로그래밍 [RxKotlin을 사용한 리액티브 프로그래밍]

  • 원서명Reactive Programming in Kotlin: Design and build non-blocking, asynchronous Kotlin applications with RXKotlin, Reactor-Kotlin, Android, and Spring (ISBN 9781788473026)
  • 지은이리부 차크라보티(Rivu Chakraborty)
  • 옮긴이조승진
  • ISBN : 9791161752976
  • 30,000원
  • 2019년 04월 30일 펴냄
  • 페이퍼백 | 384쪽 | 188*235mm
  • 시리즈 : acorn+PACKT, 프로그래밍 언어

책 소개

소스 코드 파일은 여기에서 내려 받으실 수 있습니다.

본문에 쓰인 컬러 이미지는 여기에서 내려 받으세요.
요약

리액티브 프로그래밍 패러다임에 대해 알아보고 RxExtension, 그 중에서도 특히 RxKotlin을 사용해 기존 프로젝트를 개선하거나 손쉽게 새로운 기능을 개발할 수 있도록 도와주는 책이다. RxKotlin에서 자신만의 연산자를 만들거나 테스트 방법까지 다루며, 스프링과 안드로이드의 통합도 다룬다.

이 책에서 다루는 내용

█ 리액티브 프로그래밍 패러다임과 기존 프로젝트 향상 방법
█ RxKotlin 2.0과 ReactiveX 프레임워크
█ 안드로이드에서 RxKotlin 사용하기
█ RxKotlin에서 사용자 지정 연산자 생성
█ 코틀린과 스프링 프레임워크 5.0
█ reactor-kotlin 확장
█ 스프링, 하이버네이트, RxKotlin을 사용해 Rest API 작성
█ TestSubscriber를 사용해 RxKotlin 애플리케이션 테스트
█ 플로어블(Flowable)과 백프레셔 관리

이 책의 대상 독자

장애 내성을 갖는 동시에 확장 가능한 분산 시스템을 만드는 데 관심이 있는 개발자를 대상으로 한 책이다. 이 책을 보기 위해서는 코틀린에 대한 기본 지식이 있어야 하지만 리액티브 프로그래밍에 대한 사전 지식은 필요로 하지 않는다.

이 책의 구성

1장, ‘리액티브 프로그래밍의 소개’에서는 리액티브 프로그래밍의 사고 패턴 및 원리를 이해할 수 있다.
2장, ‘코틀린과 RxKotlin을 사용한 함수형 프로그래밍’에서는 함수형 프로그래밍 패러다임의 핵심 개념을 알아보고 코틀린에서 사용 가능한 케이스를 살펴본다. 함수형 프로그래밍을 쉽게 이해할 수 있다.
3장, ‘옵저버블과 옵저버와 구독자’에서는 RxKotlin의 핵심인 옵저버블, 옵저버, 구독자의 기초에 대해 알아본다.
4장, ‘백프레셔와 플로어블 소개’에서는 프로듀서가 컨슈머를 앞지르는 것을 방지해주는 RxKotlin의 기술인 백프레셔를 사용할 수 있게 해주는 플로어블을 소개한다.
5장, ‘비동기 데이터 연산자와 변환’에서는 RxKotlin의 연산자를 소개한다.
6장, ‘연산자 및 오류 처리’에서는 연산자에 대한 이해를 높이고 연산자와 프로듀서를 결합, 또는 필터링하는 방법을 소개한다. 또한 RxKotlin에서 오류를 좀 더 효율적으로 처리하는 데 도움을 준다.
7장, ‘RxKotlin의 스케줄러를 사용한 동시성과 병렬 처리’에서는 RxKotlin의 스케줄러를 사용한 동시성과 병렬 처리를 알아본다. 스케줄러의 이점을 사용해 동시성 프로그래밍을 가능하게 한다.
8장, ‘RxKotlin 애플리케이션 테스트’에서는 애플리케이션 개발 시 가장 중요한 테스트를 다룬다. 리액티브 프로그래밍은 상태 대신 행위를 정의하기 때문에 RxKotlin에서의 테스트는 일반 테스트와 조금 다르다. 이 장에서는 테스트의 기본부터 배울 수 있다.
9장, ‘자원 관리와 RxKotlin 확장’에서는 코틀린에서 리소스를 관리하는 방법을 알아본다. 리소스는 데이터베이스 인스턴스, 파일, HTTP 접근 등 사용 후 종료close시켜 줘야 하는 어떤 것이라도 될 수 있다. 또한 RxKotlin에서 사용자 정의 연산자를 만드는 방법을 배운다.
10장, ‘Kotlin 개발자를 위한 스프링 웹 프로그래밍 소개’에서는 스프링과 하이버네이트를 사용하는 장점을 알아보고, 코틀린으로 API를 작성할 때 활용한다.
11장, ‘스프링 JPA와 하이버네이트를 사용한 REST API’에서는 리액터(Reactor) 프레임워크인 reactorkotlin 익스텐션을 소개한다. 코틀린에서 스프링을 사용해 리액티브 프로그래밍을 적용할 수 있다.
12장, ‘리액티브 코틀린과 안드로이드’에서는 안드로이드에서 코틀린으로 리액티브 프로그래밍을 시작한다.

저자/역자 소개

지은이의 말

우리가 살고 있는 이 세계는 단지 상태(states)의 집합인가? 그렇지 않다. 그렇다면 왜 모든 프로그래밍 언어는 이 세상을 일련의 상태로 표현할까? 프로그래밍의 객체가 실제적인 동시에 끊임없이 움직이며 변화하는 상태를 반영할 수는 없을까? 프로그래밍을 시작한 이후 계속 답이 궁금했던 질문들이다.
안드로이드 개발을 시작했을 때, 이 질문들은 나를 끊임없이 괴롭혔고 곧 다른 동료들도 똑같은 의문을 갖기 시작했다. 어째서 애플리케이션 내부에서 수많은 루프가 필요할까? 이터레이터를 대체할 수 있는 것은 없을까? 그리고 모바일 장치는 PC보다 프로세서나 램의 성능이 떨어진다. 안드로이드 애플리케이션을 개발할 때는 항상 이 점을 염두에 둬야 한다. 프로젝트 구조를 잘 잡지 않으면 메모리 부족 예외가 종종 발생한다. 프로그램 내에서 더 적은 이터레이터를 가질 수 있다면 UX는 극적으로 개선될 것이다. 하지만 과연 무엇으로, 어떻게 이터레이터를 교체할 수 있을까?
어느 화창한 날, 나는 이 모든 질문에 대한 답을 담고 있는 블로그 포스트를 읽었다. 대부분은 토마스 닐드(Thomas Nield)에 의해 작성됐다. 포스트는 리액티브 프로그래밍과 리액티브X(ReactiveX) 프레임워크에 관한 내용이었다. 그래서 나는 리액티브 프로그래밍을 배우기 시작했다.
리액티브 프로그래밍은 학습 곡선(Learning curve)이 높아서 많은 개발자이 빠져나갔다는 점을 알게 됐다. 일반적으로 리액티브 프로그래밍은 고급 주제로 분류되지만 나는 인내심을 갖고 꾸준히 공부를 했으며, 그에 대한 보상으로 오랫동안 고민했던 질문들에 대한 답을 찾을 수 있었다. RxJava나 다른 리액티브X 라이브러리는 우리가 살고 있는 세계와 같은 모델을 나타내며, 정적인 상태와는 달리 움직이는 동시에 지속적으로 변화하는 상태를 사용해서 동작을 모델링한다. 이터레이터 패턴과는 다르게 데이터/이벤트를 서브스크라이버/옵저버에게 전달하는 푸시 메커니즘을 사용하기 때문에 프로그래밍이 훨씬 쉬워지고 인간 세상과 훨씬 더 유사해진다.
2015년에는 젯브레인 블로그에서 JVM에서 동작하는 새로운 언어에 대해서 읽을 기회가 있었다. 처음 드는 생각은 ‘어째서 새로운 언어가 필요할까?’였다(맞다, 나는 글을 많이 읽기도 하지만 다양한 주제로 많이 쓰기도 한다). 그 뒤로 코틀린에 대해 공부하기 시작했는데 바로 사랑에 빠지고 말았다. 코틀린의 유일한 목적은 프로그래밍을 쉽게 만드는 것이다. 사람들이 코틀린의 장점을 이야기할 때면 빠지지 않고 널 포인터 예외의 처리가 쉽다는 점이 언급되는데, 그 외에도 많은 장점이 있고 그 목록은 계속 늘어나고 있다.
코틀린과 리액티브X를 결합해 사용하는 일은 프로그래머에게 최고로 멋진 일일 것이다. 마리오 아리아스(Mario Arias)는 개발자 커뮤니티를 위해 2013년부터 RxKotlin을 개발하고 있다.
RxKotlin에서 아쉬운 유일한 점은 문서화가 부족하다는 것이다. 개인적으로 문서화의 부족이 리액티브X의 학습 곡선이 높은 주요 이유라고 생각하며, 이는 문서의 중요도에 대한 인식이 부족하기 때문이라고 생각한다. 지금까지 리액티브 프로그래밍을 들어본 적 없는 6~8년 이상 경력의 개발자들을 많이 보았는데, 이 책이 그들에게 큰 도움이 되기를 기대한다. 또한 코틀린의 사용처를 늘리고 관련 지식을 최대한 많이 전파하기 위한 나를 비롯한 코틀린 콜카타 사용자 그룹의 미션을 달성하기 위한 것이기도 하다.
내가 아는 한 이 책은 코틀린의 리액티브 프로그래밍과 Reactor-Kotlin 프레임워크, RxKotlin (정확히는 RxKotlin 2.0 버전)을 공부할 수 있는 첫 번째 책이다. 이 책은 RxKotlin과 Reactor-Kotlin, 그리고 스프링과 안드로이드에 대한 단계별 가이드가 되어줄 것이다. 이 책으로 코틀린과 리액티브 프로그래밍의 장점을 발견하고, 코틀린 프로젝트에 성공적으로 리액티브 프로그래밍을 도입하기를 바란다.

지은이 소개

리부 차크라보티(Rivu Chakraborty)

구글 공인 안드로이드 전문가이자 인도 공학회의 선임 멤버이며 스크럼 마스터이다. 5년 이상의 경력을 쌓고 현재 인두스 넷 테크놀로지스(Indus Net Technologies)에서 안드로이드 시니어 소프트웨어 엔지니어로 일하고 있다. 스스로를 코틀린과 안드로이드 매니아이자 코틀린 에반젤리스트라 생각한다. 2015년 12월부터 코틀린을 사용했다. 코틀린 튜토리얼과 관련 지식을 가능한 한 많이 전파하기 위해 전 세계에서 가장 활동적인 코틀린 사용자 그룹인 ‘코틀린 콜카타’를 설립했다. 또한 GDG 콜카타의 정회원이며 관련 밋업에서 강의를 진행한다.
공유를 통해 지식이 증가한다고 생각하며 JavaCodeGeeks, AndroidHive 및 자신의 사이트(http://www.rivuchk.com)에 관련 튜토리얼을 많이 작성했다. 사이트를 방문하면 보다 많은 정보를 얻을 수 있다.

옮긴이의 말

코틀린과 리액티브 프로그래밍, 어느 것 하나 절대 가볍지 않은 주제다. 자바가 빠른 속도로 다양한 기능을 추가하고 있지만, 여전히 변화 속도에 만족하지 못하는 많은 개발자가 코틀린으로 이동하고 있음을 느낀다. 그런 와중에 RxJava의 코틀린 포팅인 RxKotlin을 다루는 이 책의 출간은 반가운 소식이 될 것이다. 개인적으로 작년까지만 해도 리액티브 프로그래밍과 코틀린 모두 낯설었지만, 이제는 현장에서 두 가지 모두 사용하고 있다.
개인적인 경험을 바탕으로 생각했을 때 다른 독자들도 코틀린보다는 리액티브 프로그래밍에 익숙해지는 데 조금 더 시간이 걸릴 것 같다. 다행히 이 책도 코틀린의 언어적인 특징보다는 리액티브 프로그래밍에 조금 더 초점을 두고 있다. 최근에는 마이크로서비스 아키텍처로 개발하는 회사의 수가 증가한 만큼 리액티브 프로그래밍을 적용할 수 있는 기회가 늘었다고 생각한다. 리액티브 매니페스토의 응답성은 마이크로서비스 내에서 사용되는 API에 빠질 수 없는 특징이다. 스프링 부트(Spring Boot)나 도커 등 백엔드 개발자들의 든든한 도구로 인해 전보다 많은 업무가 그저 설정으로 처리되는 단계에 이르렀으며, 백엔드 API가 진정으로 갖춰야 하는 장점에 대해서도 신경을 쓸 만큼 충분히 여유를 가질 수 있게 되었다고 생각한다. 템플릿으로 찍어내는 것이 가능한 CRUD성 API를 양산하고 있지는 않은가? 리액티브 프로그래밍과 코틀린, 이 두 가지를 사용해서 프로덕션에 런칭해 보는 것만으로도 수준이 한층 더 높아질 수 있다고 생각한다. 이미 말한 것처럼 RxKotlin은 RxJava의 포팅이기 때문에, 이해되지 않는 내용이 있다면 가장 자신 있는 언어로 설명된 문서나 코드들을 구글링 해보는 것도 좋을 것이다. 이 책을 다 읽었다고 리액티브 프로그래밍과 코틀린을 완벽하게 알게 되었다고 말할 수는 없지만, 앞으로 어떤 방향으로 공부를 진행하면 좋을지 길잡이 역할을 해줄 수 있을 것이다.

옮긴이 소개

조승진

라인에서 근무 중인 소프트웨어 엔지니어다. 자바, 스프링, 자바스크립트, 파이썬, 객체지향 TDD, DDD에 큰 관심을 갖고 웹 서비스를 개발하고 있다. 개발자 문화를 사랑하고 세상에 영향을 줄 수 있는 무엇인가를 만들어 내기 위해 노력한다.

목차

목차
  • 1장. 리액티브 프로그래밍의 소개
    • 리액티브 프로그래밍이란 무엇인가
    • 함수형 리액티브 프로그래밍을 적용해야 하는 이유
    • 리액티브 선언
      • 리액티브 스트림 표준 사양
      • 코틀린을 위한 리액티브 프레임워크
    • RxKotlin 시작하기
      • RxKotlin 다운로드와 설정
      • RxJava의 푸시 메커니즘과 풀 메니커즘 비교
      • ReactiveEvenOdd 프로그램
    • ReactiveCalculator 프로젝트
    • 요약

  • 2장. 코틀린과 RxKotlin을 사용한 함수형 프로그래밍
    • 함수형 프로그래밍 소개
    • 함수형 프로그래밍의 기초
      • 람다 표현식
      • 순수 함수
      • 고차 함수
      • 인라인 함수
    • ReactiveCalculator 클래스에 함수형 프로그래밍 적용
    • 코루틴
      • 코루틴 시작하기
      • 시퀀스 생성하기
      • 코루틴을 사용한 ReactiveCalculator 클래스
    • 함수형 프로그래밍: 모나드
      • 단일 모나드
    • 요약

  • 3장. 옵저버블과 옵저버와 구독자
    • 옵저버블
      • 옵저버블이 동작하는 방법
    • Observable의 다른 팩토리 메서드
      • 구독자: Observer 인터페이스
      • 구독과 배치
    • 핫, 콜드 옵저버블
      • 콜드 옵저버블
      • 핫 옵저버블
    • 다양한 구독자
      • AsyncSubject 이해
      • PublishSubject 이해
      • BehaviorSubject 이해
      • ReplaySubject 이해
    • 요약

  • 4장. 백프레셔와 플로어블 소개
    • 백프레셔 이해
    • 플로어블
    • 플로어블과 옵저버블 사용 구분
      • 플로어블을 언제 사용할까
      • 옵저버블을 언제 사용할까
    • 플로어블과 구독자
    • 처음부터 플로어블 생성하기
    • 옵저버블로 플로어블 만들기
    • BackpressureStrategy.MISSING와 onBackpressureXXX()
      • onBackpressureBuffer() 연산자
      • onBackpressureDrop() 연산자
      • onBackpressureLatest() 연산자
    • 원천에서 백프레셔를 지원하는 플로어블 생성
    • ConnectableFlowable
    • 프로세서
    • 버퍼, 스로틀링, 윈도우 연산자
      • buffer() 연산자
      • window() 연산자
      • throttle() 연산자
    • 요약

  • 5장. 비동기 데이터 연산자와 변환
    • 연산자
    • 필터링 연산자
      • debounce 연산자
      • distinct 연산자: distinct, distinctUntilChanged
      • elementAt 연산자
      • 배출 필터링하기: filter 연산자
      • first, last 연산자
      • ignoreElements 연산자
    • 변환 연산자
      • map 연산자
      • 배출 캐스팅: cast 연산자
      • flatMap 연산자
      • defaultIfEmpty 연산자
      • switchIfEmpty 연산자
      • startWith 연산자
      • 정렬 연산자: sorted 연산자
      • 데이터 모으기: scan 연산자
    • 축소 연산자
      • 배출량 계산(count 연산자)
      • 배출 누적: reduce 연산자
      • 컬렉션 연산자
    • 오류 처리 연산자
    • 유틸리티 연산자
    • 요약

  • 6장. 연산자 및 오류 처리
    • 프로듀서(옵저버블/플로어블) 결합
      • startWith 연산자
      • 배출을 집핑하기: zip 연산자
      • combineLatest 연산자
      • 옵저버블/플로어블 병합: merge 연산자
      • 프로듀서 이어 붙이기(옵저버블/플로어블)
      • 프로듀서 임의 결합
    • 그룹핑
    • flatMap, concatMap 세부 사항
      • flatMap 연산자가 적합한 경우
      • concatMap 연산자가 적합한 경우
    • switchMap 연산자 이해
    • 배출 건너뛰거나 취하기
      • 배출 건너뛰기(skip, skipLast, skipUntil, skipWhile)
      • take 연산자(take, takeLast, takeWhile, takeUntil)
    • 에러 처리 연산자
    • onErrorReturn: 에러 발생 시 기본값 반환하기
    • onErrorResumeNext 연산자
      • 에러 발생 시 재시도하기
    • HTTP 예제
    • 요약

  • 7장. RxKotlin의 스케줄러를 사용한 동시성과 병렬 처리
    • 동시성 소개
    • 병렬 실행과 동시성
    • 스케줄러는 무엇인가
      • 스케줄러의 종류
      • Schedulers.from
    • 스케줄러 사용법: subscribeOn, observeOn 연산자
      • 구독 시 스레드 변경: subscribeOn 연산자
      • 다른 스레드에서 관찰: observeOn 연산자
    • 요약

  • 8장. RxKotlin 애플리케이션 테스트
    • 단위 테스트 소개와 중요성
      • 단위 테스트가 중요한 이유
    • 코틀린에서 JUnit 테스트 작성하기
      • 코드 테스트하기
    • RxKotlin에서 테스트
    • 구독자 차단
    • 차단 연산자
      • 첫 번째 배출된 아이템 가져오기: blockingFirst()
      • single 또는 maybe에서 단일 아이템 얻기: blockingGet
      • 마지막 아이템 얻기: blockingLast
      • 모든 배출을 이터러블로 가져오기: blockingIterable 연산자
      • 모든 배출을 순회하기: blockingForEach
    • TestObserver와 TestSubscriber 소개
    • TestScheduler 이해
    • 요약

  • 9장. 자원 관리와 RxKotlin 확장
    • 자원 관리
    • 자신만의 연산자 작성하기
    • 변환자로 연산자 합성
    • 요약

  • 10장. 코틀린 개발자를 위한 스프링 웹 소개
    • 스프링, 스프링의 역사와 기원
      • 스프링의 역사와 기원
    • 의존성 주입과 IoC
      • 스프링 주석 기반 설정
    • 스프링: AOP
    • 스프링 부트 소개
    • 스프링 부트를 사용해 Rest API 만들기
    • 요약

  • 11장. 스프링 JPA와 하버네이트를 사용한 REST API
    • 스프링 부트, 하이버네이트 JPA를 사용한 REST API
    • 리액터를 이용한 리액티브 프로그래밍
      • 프로젝트에 리액터 추가
      • 플럭스와 모노 이해
    • 요약

  • 12장. 리액티브 코틀린과 안드로이드
    • 안드로이드 스튜디오에서 코틀린 설정
    • 안드로이드에서 ToDoApp 개발
    • 레트로핏 2를 사용한 API 호출
    • 레트로핏과 RxKotlin 사용하기
    • 안드로이드 이벤트를 리액티브로 만들기
      • 안드로이드의 RxBinding 소개
    • 코틀린 익스텐션즈
    • 요약

도서 오류 신고

도서 오류 신고

에이콘출판사에 관심을 가져 주셔서 고맙습니다. 도서의 오탈자 정보를 알려주시면 다음 개정판 인쇄 시 반영하겠습니다.

오탈자 정보는 다음과 같이 입력해 주시면 됩니다.

(예시) p.100 아래에서 3행 : '몇일'동안 -> 며칠동안

정오표

정오표

[ p.126~127 : 코드 일부]

[p.137 : 출력 결과 스크린샷]

init 1
->
MyItem Created 1

Rec MyItem8(id=1)
->
MyItem9(id=1)