Top

아카를 이용한 마이크로서비스 개발 [예제 애플리케이션 구축과 함께하는 아카 이해하기]

  • 원서명Mastering Akka : Master the art of creating scalable, concurrent, and reactive applications using Akka (ISBN 9781786465023)
  • 지은이크리스티앙 백스터(Christian Baxter)
  • 옮긴이박미정
  • ISBN : 9791161752747
  • 35,000원
  • 2019년 02월 28일 펴냄
  • 페이퍼백 | 492쪽 | 188*235mm
  • 시리즈 : acorn+PACKT, 프로그래밍 언어

책 소개

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

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

이 책은 아카를 통해 반응형 애플리케이션, 비동기, 이벤트 기반 및 분산 시스템을 구축할 수 있는 가이드를 제공한다. 1장에서 초기 모놀리식 아카 애플리케이션을 소개하고, 마지막 10장까지 해당 애플리케이션을 개선시킨다. 뿐만 아니라 각 장별로 과제가 포함돼 있기 때문에 직접 코드를 수행해보며 쉽게 이해할 수 있다. 아카 및 추가 라이브러리에 대한 설명과 도메인 주도 설계 및 이벤트 소싱도 접할 수 있다. 책을 정독하며 예제 애플리케이션 코드를 개선해보기를 추천한다.

이 책에서 다루는 내용

█ 아카 액터 사용 방법
█ 도메인 주도 설계를 적용한 구축 방법
█ 엔티티 지속성을 위한 아카 퍼시스턴스, 프로토콜 버퍼, 카산드라 활용 방법
█ 그래프 빌더 DSL 활용 방법
█ 아카 스트림을 이용한 백 프레셔 처리 방법
█ 아카 HTTP를 이용한 요청/응답 처리 방법
█ 고가용성을 위한 ConductR 활용 방법

이 책의 대상 독자

라이트밴드(Lightbend) 플랫폼을 이용해 고성능의 반응형 애플리케이션을 구축하고 싶다면 이 책을 읽자. 또한, 아카의 새로운 기능을 현재 혹은 앞으로의 프로젝트에 적용할 계획이 있는 스칼라 개발자에게도 도움이 될 것이다. 동시성, 확장성, 반응형 애플리케이션을 고민하는 자바 개발자에게도 도움이 될 것이다.

이 책의 구성

1장, ‘효과적인 반응형 애플리케이션 구축’에서는 초기 예제 애플리케이션을 소개하고 앞으로 개선할 내용을 정리한다.
2장, ‘액터를 이용한 동시성 프로그래밍 단순화’에서는 액터를 자세히 소개하고 아카 FSM을 이용해 리팩토링한다.
3장, ‘도메인 주도 설계를 통한 빈약한 모델 개선’에서는 도메인 주도 설계의 개념과 적용 방법을 설명한다.
4장, ‘이벤트 소싱을 통한 히스토리 생성’에서는 이벤트 기반 엔티티의 이벤트 소싱(Event Sourcing)을 소개한다.
5장, ‘CQRS를 통한 관심사 분리’에서는 CQRS를 통해 모델을 분리하고 작성하는 방법을 알아본다.
6장, ‘아카 스트림을 통한 흐름’에서는 백 프레셔와 스트림 기반 처리를 위한 아카 스트림(Akka Streams)을 설명한다.
7장, ‘아카 HTTP를 이용한 REST 구축’에서는 RESTful 인터페이스 구축을 위한 아카 HTTP의 활용 방법을 설명한다.
8장, ‘아카 리모팅/클러스터를 이용한 스케일 아웃’에서는 수평적 확장 및 고가용성을 위해 아카 리모팅/클러스터(Akka Remoting/Cluster)를 활용하는 방법을 알아본다.
9장, ‘ConductR을 이용한 배포 관리’에서는 ConductR을 이용해 마이크로서비스를 구축 및 배포하는 방법을 설명한다.
10장, ‘문제 해결과 모범 사례’에서는 아카 사용에 대한 모범 사례를 제공한다.

저자/역자 소개

지은이의 말

아카 라이브러리는 스칼라 세계에서는 반응형 애플리케이션 구축을 위해 잘 알려진 도구다. 아카의 핵심 빌딩 블록은 비동기, 이벤트 기반, 장애 허용, 분산 시스템을 가능하도록 동시성을 지원하는 액터다. 반응형 애플리케이션 구축하는 데 있어 액터는 좋은 시작이지만, 아카 플랫폼 내에는 고려해야 할 요소가 더 많이 있다.
이 책은 아카 플랫폼 내에 몇 가지 모듈을 추가해 애플리케이션을 구축한다. 초기 모놀리식 아카 애플리케이션을 리팩토링해 나가면서 느슨하게 결합된 마이크로서비스로 개선해 나간다. 아카 퍼시스턴스(Akka Persistence)를 통한 이벤트 소싱(Event Sourcing) 같은 새로운 기능을 배우게 될 것이다. 이 책을 다 읽으면 아카 플랫폼을 깊이 이해하게 돼 애플리케이션 구축에 도움을 얻을 수 있을 것이다.
각 챕터별 리팩토링을 통해 아카 내의 새로운 개념 및 라이브러리를 접할 수 있다. 새로운 기능들의 개념과 서비스를 느슨하게 결합시키는 방법을 자세히 설명한다. 뿐만 아니라, 각 장마다 독자가 수행해야 하는 과제가 있다. 직접 과제를 수행함으로써 아카의 기능과 새로운 개념을 실제 환경에 적용할 수 있을 만큼 더 깊이 이해할 수 있다.

지은이 소개

크리스티앙 백스터 (Christian Baxter)

컴퓨터 프로그래밍 세계에 발을 들인 것은 어려서부터 사물이 동작하는 방법에 관심이 많았고, 도전과 문제 해결을 좋아하는 성격 때문이기도 했다. 대학에서 생명 과학을 전공하면서도 틈틈이 컴퓨터 프로그래밍을 공부했다. 대학을 졸업한 후에는 프로그래머로 일하기 위해 필요한 기술을 스스로 익혔다. 보험, 여행, 광고, 채용 등 다양한 분야에서 프로그래머로 일했다. 아카 플랫폼 기반에서 스칼라로 고성능의 분산 시스템을 구축하는 일을 사랑한다. 2010년에 스칼라 개발자로 전향하기 전까지, 오랫동안 자바 개발자로 일했다. 높은 성능과 비동기화를 해결하기 위한 기술을 찾다가 스칼라와 아카를 알게 됐다. 그 후, 근무하던 광고 기술 회사에서 반응형 애플리케이션 구축에 스칼라와 아카를 적용하며 열렬한 지지자가 되었다.

옮긴이의 말

스칼라와 아카를 위한 개념서는 더러 존재하지만, 실무에 적용하기 위한 가이드 역할을 해주는 책은 거의 없다. 이 책을 통해 장이 진행됨에 따라 하나의 애플리케이션을 직접 개선해 나가며 최종적으로 분산 시스템을 구축하는 즐거운 경험을 함께하기를 바란다. 각 장별 과제도 직접 수행하고, 저자의 코드와 비교하다 보면 장에서 이야기하고자 하는 개념을 더 깊이 이해할 수 있을 것이다.
많은 개발자가 스칼라와 아카 각각의 개념은 자주 접했을 수 있지만, 이 책은 스칼라 및 아카와 함께 동시성 프로그래밍, 도메인 주도 설계, 이벤트 소싱, CQRS 등 분산 시스템 구축을 위해 고려할 수 있는 다양한 개념들을 함께 이해할 수 있다. 단순히 개념을 이해하는 수준이 아니라, 개념을 녹여낸 실제 애플리케이션을 구축해나가는 과정을 실습하다 보면 실무에 적용하기 위한 방향성에 대해 인사이트를 얻을 수 있을 것이다. 이 책에서 제안하는 다양한 라이브러리를 활용해 분산 시스템을 위한 당신의 여정이 성공하기를 바란다.

옮긴이 소개

박미정

일년 내내 따뜻한 호찌민에서 새로운 시도를 진행 중인 소프트웨어 엔지니어다. 다양한 분야의 서버 개발을 주로 맡아왔지만, 개발하는 일은 무엇이든 좋아한다. 팀으로 함께 무언가를 만들어내는 일에 관심이 많고, 공유하기를 좋아한다.

목차

목차
  • 1장. 효과적인 반응형 애플리케이션 구축
    • 첫 예제 애플리케이션 이해
    • 예제 애플리케이션 작업
      • 도커 설정
      • 서점 애플리케이션의Postgres 스키마 이해
      • 윈도우에서 bash 스크립트 실행
      • 예제 애플리케이션 실행
      • 예제 애플리케이션 엔드포인트와 상호작용
    • 예제 애플리케이션의 문제
      • 확장성의 이해
      • 스케일 큐브
      • 예제 애플리케이션 모놀리식 시스템의 확장 문제
      • 관계형 데이터베이스 사용 문제
      • 애플리케이션의 도메인 모델 평가
      • 잘못된 액터 인지
      • HTTP 라이브러리 교체
    • 요약

  • 2장. 액터를 이용한 동시성 프로그래밍 단순화
    • 액터 모델 등장 배경 이해
    • 동시성과 병렬화 차이
      • 컴퓨팅에서 동시성의 정의
      • 병렬성의 정의
      • 동시성 프로그래밍의 위험
    • 안전한 동시성을 위한 아카 액터 사용
      • 액터와 동시성 프로그래밍
      • 아카 액터와 라우터를 이용한 병렬성
    • 아카의 디스패처에 대해
      • 디스패처 및 실행자
      • 아카의 디스패처 유형
      • 액터의 디스패처 구성
    • 아카 메일박스 유형
      • Unbounded 메일박스
      • Bounded 메일박스
      • 액터 메일박스 구성
    • 상태머신(FSM)을 통한 액터 리팩토링
      • 새로운 프로세스 흐름 모델링
      • 새로운 주문 프로세스 코딩
    • 아카 액터 테스트
      • 테스트 피라미드 이해
      • 아카 액터 단위 테스트
      • SalesOrderProcessor 액터 테스트
    • 테스트 과제
    • 요약

  • 3장. 도메인 주도 설계를 통한 빈약한 모델 개선
    • 도메인 주도 설계 개념
      • 도메인 계층 파악
      • 전략적 도메인 주도 설계의 이해
      • 전략적 도메인 주도 설계의 의사소통 패턴
      • 도메인 주도 설계의 빌딩 블록
    • 빈약한 모델 및 풍성한 모델 식별
    • 도메인 주도 설계 리팩토링 설계
      • 서점 컨택스트 맵
      • 액터를 이용한 도메인 주도 설계 모델링
      • 사용자 관리 컨텍스트 리모델링
      • 재고 관리 컨텍스트 리모델링
      • 신용카드 처리 컨텍스트 리모델링
      • 판매 주문 처리 컨텍스트 리모델링
    • 리팩토링된 서점 애플리케이션 코드 이해
      • EntityActor 추상 클래스
      • EntityAggregate 추상 클래스
      • Book과 InventoryClerk 액터
    • 주문 생성 처리에서 트랜잭션 해결
    • 리팩토링 개선 항목
    • 리팩토링 과제
    • 요약

  • 4장. 이벤트 소싱을 통한 히스토리 생성
    • 이벤트 소싱 기본
      • 이벤트 소싱의 장점
      • 이벤트 소싱의 단점
      • 서점 애플리케이션의 이벤트 소싱 예
    • 이벤트 소싱을 위한 아카 퍼시스턴스
      • PersistentActor trait
      • AsyncWriteJournal
      • SnapshotStore
    • 지속적 저장소를 위한 카산드라 사용
      • 카산드라 설치
      • 카산드라 사용을 위한 아카 퍼시스턴스 구성
    • 재고 관리 모듈 리팩토링
      • PersistentEntity 추상 클래스
      • Aggregate 추상 클래스
      • JsonSerializer 클래스
      • Book 엔티티 이벤트 소싱
      • InventoryClerk 액터 리팩토링
      • 새로운 Book 엔티티 시도
      • 도서 스냅샷 추가
      • 진화하는 스키마 처리
    • 리팩토링된 판매 주문 처리 모듈
    • 리팩토링 과제
    • 요약

  • 5장. CQRS를 통한 관심사 분리
    • CQRS의 역사
    • 이벤트 소싱 관점에서의 CQRS
    • 읽기 모델 구현을 위한 설계
      • 읽기 모델을 위한 데이터 저장소 선택
      • 읽기 모델에 대한 이벤트 적용
      • 퍼시스턴스 쿼리를 이용한 뷰 작성
    • Book 읽기 모델 구축
      • ProtobufDatamodelAdapter 태그 지원
      • 일래스틱서치 지원 trait
      • 뷰 빌더 trait
      • Book 뷰 빌더 구현
      • Book 뷰 구현
      • 재시작 가능한 프로젝션 구현
    • 판매 주문 처리 리팩토링
      • SalesOrder 읽기 모델 비정규화
      • 재고 할당을 위한 퍼시스턴스 쿼리 사용
    • 새로운 애플리케이션 실행
    • 리팩토링 과제
    • 마무리 의견
    • 요약

  • 6장. 아카 스트림을 통한 흐름
    • 리액티브 스트림 API 이해
      • 백 프레셔 동작
    • 아카 스트림 API
      • 아카 스트림의 빌딩 블록
      • 스트림 구축의 기본 학습
      • 스트림 실체화 이해
      • 스트림 내의 연산자 결합
      • 버퍼를 이용한 속도 제어
      • 흐름 내의 변경 속도
      • 그래프 빌더 DSL을 이용한 처리 그래프 구축
      • 스트리밍 I/O 처리
    • 뷰 빌더 코드 리팩토링
    • 리팩토링 과제
    • 요약

  • 7장. 아카 HTTP를 이용한 REST 구축
    • RESTful HTTP 인터페이스 생성
    • 아카 HTTP와 스프레이 비교
      • 아카 스트림과 백 프레셔
      • 그 외의 차이점
    • 아카 HTTP를 이용한 RESTful 인터페이스 생성
      • 저수준 서버 API 사용
      • 고수준 서버 API 사용
    • 아카 HTTP를 이용한 RESTful API 호출
      • 클라이언트 측 아카 HTTP 및 스트림
      • 아웃바운드 연결 모델 이해
    • 리팩토링 과제
      • 인바운드 HTTP 변경
      • 아웃바운드 HTTP 변경
    • 요약

  • 8장. 아카 리모팅/클러스터를 이용한 스케일 아웃
    • 아카 리모팅 사용
      • 아카 리모팅 활성화
      • 원격 액터와 상호작용
      • 아카 리모팅 및 직렬화
    • 아카 클러스터링 사용
      • 클러스터링의 핵심 아키텍처 원칙
      • 클러스터링 활성화
      • 클러스터링을 위한 원격 워커 예제 리팩토링
    • 서점 애플리케이션에 클러스터링 적용
      • 서점 애플리케이션에 클러스터 샤딩 적용
      • 서점 애플리케이션에 클러스터 싱글톤 적용
      • 클러스터 서점 애플리케이션 실행
    • 요약

  • 9장. ConductR을 이용한 배포 관리
    • ConductR 개요
    • ConductR 로컬 설치와 설정
      • ConductR CLI 샌드 박스 설치
      • ConductR 샌드 박스 설정
      • sbt-conductr 플러그인 설정
      • 샌드 박스 내의 도커 사용 안내
    • ConductR CLI 사용
      • ConductR 버전 정보 확인
      • 배포된 번들 정보 확인
      • 번들 서비스 정보 확인
      • 번들 서비스 접근 제어 목록 확인
      • ConductR로 번들 로드
      • ConductR 내에 번들 시작
      • ConductR 내의 번들 종료
      • ConductR에서 번들 제거
      • ConductR 내에서 번들 관련 이벤트 확인
      • 번들 로그 확인
    • ConductR을 통한 서비스 준비
      • 배포를 위한 번들 생성
      • ConductR로 배포를 위한 코드 요구 사항
      • ConductR을 이용한 서점 애플리케이션 리팩토링
      • 서점 애플리케이션 분리
      • ConductR 지원을 위한 일반적인 수정
      • 서비스 모듈의 ConductR 번들 전환
      • 판매 주문 처리 리팩토링
      • 재고 관리 모듈 리팩토링
    • 서점 번들 빌드 및 배포
    • ConductR 내의 서점 애플리케이션 모듈 테스트
    • 요약

  • 10장. 문제 해결 및 모범 사례
    • 리팩토링 회고
      • 더 나은 액터 구현
      • 도메인 주도 설계 사용
      • 아카 퍼시스턴스 및 이벤트 소싱
      • 아카 퍼시스턴스 쿼리 및 CQRS
      • 아카 스트림
      • 아카 HTTP
      • 아카 리모팅 및 아카 클러스터링
      • ConductR을 통한 모듈 분리
    • 액터 문제 해결 및 모범 사례
      • 퓨처 사용 시 가변 상태 피하기
      • ActorSelection 사용 최소화
      • ask 대신 tell 사용하기
      • 많은 최상위 액터 생성 피하기
    • 아카 HTTP모범 사례 및 문제 해결
      • ~ 연산자 관련 문제
      • 인바운드 HTTP 요청 로그 구축
      • 아웃바운드 HTTP 요청 로그 구축
    • 아카 클러스터링 및 아카 리모팅 문제 해결 및 모범 사례
      • 구성 요소 설정 시, 호스트 이름 대신 IP 주소 사용 선호하기
      • 2개 이상의 시드 노드 구성
      • 로그의 Disassociated 예외는 정상일 수 있음
    • 추가 자료
      • Lagom
      • 아카 스트림 쿡북
      • 일반적인 패턴
      • 아카 퍼시스턴스 스키마 변경
      • 아카 관련 권장 도서
      • 에릭 에반스의 도메인 주도 설계
      • 마틴 파울러의 이벤트 소싱
    • 요약

도서 오류 신고

도서 오류 신고

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

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

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