엔터프라이즈 환경을 위한 마이크로서비스 [마이크로서비스 아키텍처의 개념 이해부터 적용, 구현까지]
- 원서명Microservices for the Enterprise: Designing, Developing, and Deploying (ISBN 9781484238578)
- 지은이카순 인드라시리(Kasun Indrasiri), 프라바스 시리와데나(Prabath Siriwardena)
- 옮긴이이상근
- ISBN : 9791161754055
- 35,000원
- 2020년 03월 31일 펴냄
- 페이퍼백 | 508쪽 | 188*235mm
- 시리즈 : 소프트웨어 아키텍처
책 소개
소스 파일은 아래 깃허브 페이지에서 내려 받으실 수 있습니다.
(https://github.com/AcornPublishing/microservices-enterprise)
요약
마이크로서비스 아키텍처의 기본 개념과 기존의 서비스 지향 구조, ESB 등을 비교해 차이점을 설명한다. 또한 실제 구현에 개념을 어떻게 적용할지, 사용할 수 있는 오픈소스에는 어떤 것이 있는지도 자세히 알려준다. 이 책은 국내에서 마이크로서비스 아키텍처 구현에 사용되는 거의 모든 오픈소스를 다루고 있어, 해당 내용의 개요만 참고해도 큰 도움이 될 것이다.
이 책에서 다루는 내용
■ 자신 있게 마이크로서비스 아키텍처를 설계하고 개발하기
■ 현대적인 메시징 기술 적용하기
■ 서비스 메시 패턴을 적용해 서비스 간 통신 문제 극복하기
■ 실전 테스트를 거친 마이크로서비스 보안 패턴을 적용해 실제 시나리오 해결하기
■ API 관리, 분산 데이터 관리, 관찰 가능성 처리하기
이 책의 구성
이 책을 통해 엔터프라이즈 애플리케이션 환경에서 마이크로서비스를 구축하는 것을 둘러싼 주요 과제와 솔루션을 이해할 수 있도록 구성했다. 이 책은 마이크로서비스 아키텍처의 원칙과 실제 시나리오에서 마이크로서비스를 사용하는 방법을 포괄적으로 설명한다.
서비스 통합 및 API 관리와 함께 마이크로서비스를 사용하는 아키텍처 문제가 제시되고, 복합/통합 마이크로서비스를 사용해 ESB(Enterprise Service Bus)와 같은 중앙 집중식 통합 제품을 사용하지 않는 방법을 배운다. 각 개념은 사용 사례와 함께 설명하며, 대부분의 사용자는 비즈니스 중단을 최소화하면서 레거시 애플리케이션과 함께 마이크로서비스를 구현해야 하는 ‘브라운필드(brownfield)’ 환경에서 구현하고 있다는 사실을 강조한다.
마이크로서비스 메시징, 서비스 개발 및 설명, 서비스 발견, 거버넌스, 데이터 관리 기술에 관한 최신 기술을 다루고 마이크로서비스 디자인 프로세스를 안내한다. 또한 핵심 대 원자, 복합 대 통합, API 대 에지(edge)로 서비스를 구성하는 것의 중요성과 이러한 조직이 중앙 ESB의 사용을 제거하고 API 게이트웨이를 통해 서비스를 노출하는 데 도움될 방법도 알려준다.
목차
목차
- 1장. 마이크로서비스의 사례
- 모노리스에서 마이크로서비스 아키텍처로
- 모놀리식 애플리케이션
- SOA와 ESB
- API들
- 마이크로서비스는 무엇인가?
- 비즈니스 기능 지향
- 자율성: 개발, 배포, 확장의 독립성
- 중앙 ESB 부재: 스마트 엔드포인트와 멍청한 파이프
- 실패 내결함성
- 분산화된 데이터 관리
- 서비스 거버넌스
- 관찰 가능성
- 마이크로서비스: 장점과 단점
- 장점
- 단점
- 마이크로서비스의 적용 방법과 적용 시기
- 요약
- 모노리스에서 마이크로서비스 아키텍처로
- 2장. 마이크로서비스 디자인
- 도메인 주도 설계
- 바운디드 컨텍스트
- 컨텍스트 맵
- 관계형 패턴
- 설계 원리
- 높은 응집도와 느슨한 결합
- 복원력
- 관찰 가능성
- 자동화
- 12 팩터 앱
- 코드베이스
- 종속성
- 설정
- 백엔드 서비스
- 빌드, 릴리스, 실행
- 프로세스
- 무공유 아키텍처
- 포트 바인딩
- 동시성
- 폐기 가능
- 개발/프로덕션 환경 일치
- 로그
- 어드민 프로세스
- 12 팩터 앱을 넘어서
- 요약
- 도메인 주도 설계
- 3장. 서비스 간 통신
- 마이크로서비스 통신의 기초
- 동기식 통신
- REST
- gRPC
- GraphQL
- 웹소켓
- 스리프트
- 비동기식 통신
- 단일 수신자
- 다중 수신자
- 동기식 통신 대 비동기식 통신
- 메시지 포맷/타입
- JSON과 XML
- 프로토콜 버퍼
- 에이브로
- 서비스 정의 및 계약
- 요약
- 4장. 서비스 개발
- 개발자 도구와 프레임워크
- 넷플릭스 OSS
- 스프링 부트
- 이스티오
- 드롭위저드
- Vert.x
- Lagom
- 스프링 부트 시작하기
- Hello World!
- 스프링 부트 액추에이터
- 구성 서버
- 구성 소비하기
- 서비스 간 통신
- gRPC 시작하기
- gRPC 서비스 구축
- gRPC 클라이언트 구축
- 카프카를 이용한 이벤트 기반 마이크로서비스
- 카프카 메시지 브로커 설정
- 게시자(이벤트 소스) 구축하기
- 소비자 구축하기(이벤트 싱크)
- GraphQL 서비스 구축
- 요약
- 개발자 도구와 프레임워크
- 5장. 데이터 관리
- 모놀리식 애플리케이션과 공유 데이터베이스
- 마이크로서비스당 데이터베이스
- 마이크로서비스 간 데이터 공유
- 공유 테이블 제거
- 공유 데이터
- 데이터 조합
- 마이크로서비스의 트랜잭션
- 2단계 커밋을 통한 분산 트랜잭션 피하기
- 로컬 트랜잭션을 사용한 이벤트 개시
- 데이터베이스 로그 마이닝
- 이벤트 소싱
- 사가
- 폴리글랏 지속성
- 캐싱
- 요약
- 6장. 마이크로서비스 거버넌스
- 왜 마이크로서비스 거버넌스인가?
- 마이크로서비스 거버넌스 측면
- 서비스 정의
- 서비스 레지스트리 및 검색
- 서비스 수명 주기 관리
- 서비스 품질
- 서비스 관찰 가능성
- 마이크로서비스 거버넌스 구현
- 서비스 레지스트리 및 검색
- 개발 수명 주기 관리
- API 관리/API 게이트웨이
- 관찰 가능성
- 서비스 레지스트리 및 검색
- 컨설
- 유레카
- etcd
- 쿠버네티스를 통한 서비스 검색
- 요약
- 7장. 마이크로서비스 통합
- 마이크로서비스를 통합해야 하는 이유
- 스마트 엔드포인트와 멍청한 파이프
- 마이크로서비스 통합의 안티 패턴
- 마이크로서비스 통합을 위한 모놀리식 API 게이트웨이
- ESB와 마이크로서비스 통합
- 모든 마이크로서비스 구축에 동종 기술 사용
- 마이크로서비스 구성하기
- 핵심 서비스
- 통합 서비스
- API 서비스
- 마이크로서비스 통합 패턴
- 능동형 조합 또는 오케스트레이션
- 반응성 조합 또는 코레오그래피
- 능동형 조합과 반응형 조합의 하이브리드
- 손상 방지 계층
- 스트랭글러 파사드
- 통합 서비스의 주요 요구 사항
- 네트워크 통신 추상화
- 복원력 패턴
- 능동형 또는 반응형 조합
- 데이터 형식
- 컨테이너 네이티브 및 데브옵스 지원
- 통합 서비스 거버넌스
- 상태 없음, 상태 저장, 또는 장기 실행 서비스
- 통합 서비스 구축을 위한 기술
- 스프링 부트
- 드롭위저드
- 아파치 카멜과 스프링 통합
- Vert.x
- 아카
- Node, Go, 러스트, 파이썬
- 발레리나
- 워크플로 엔진 솔루션
- 서비스 메시의 시작
- 요약
- 8장. 마이크로서비스의 배포 및 실행
- 컨테이너와 마이크로서비스
- 도커 소개
- 도커를 사용해 마이크로서비스 배포
- 도커 컴포즈
- 컨테이너 오케스트레이션
- 쿠버네티스 소개
- 쿠버네티스 핵심 개념
- 쿠버네티스 환경에서 마이크로서비스 배포
- 마이크로서비스 배포 패턴
- 호스트당 다중 서비스
- 호스트당 서비스
- 가상 머신당 서비스
- 컨테이너당 서비스
- 컨테이너 네이티브 마이크로서비스 프레임워크
- Metaparticle
- 지속적인 통합, 전달, 배포
- 지속적인 통합
- 지속적인 전달
- 지속적인 배포
- 요약
- 컨테이너와 마이크로서비스
- 9장. 서비스 메시
- 왜 서비스 메시인가?
- 서비스 메시란 무엇인가?
- 비즈니스 로직
- 기본 네트워크 기능
- 애플리케이션 네트워크 기능
- 컨트롤 플레인
- 서비스 메시의 기능
- 서비스 간 통신을 위한 복원력
- 서비스 검색
- 라우팅
- 관찰 가능성
- 보안
- 배포
- 서비스 간 통신 프로토콜
- 이스티오
- 이스티오 아키텍처
- 이스티오 사용
- 링커디
- 서비스 메시를 사용해야 할까?
- 장점
- 단점
- 요약
- 10장. API, 이벤트, 스트림
- API와 API 관리
- API 게시자/API 수명 주기 관리자
- API 게이트웨이
- API 저장소/개발자 포털
- API 분석/관찰 가능성
- API QoS
- API 수익 창출
- OpenAPI를 사용한 API 정의
- API 쿼리 언어: GraphQL
- API 관리와 서비스 메시
- API 관리 구현
- 이벤트
- 이벤트 알림
- 이벤트-전달 상태 전이
- 이벤트 소싱
- 명령 질의 책임 분리
- 스트림
- 스트림 처리
- API, 이벤트, 스트림이 포함된 마이크로서비스 아키텍처
- 요약
- API와 API 관리
- 11장. 마이크로서비스 보안의 기본 사항
- 모놀리스 대 마이크로서비스
- 서비스 간 통신 보호
- JSON 웹 토큰
- TLS 상호 인증
- 에지 보안
- OAuth 2.0
- 접근 제어
- XACML
- 내장형 PDP
- 보안 사이드카
- 요약
- 12장. 마이크로서비스 보안
- OAuth 2.0으로 마이크로서비스 보안
- TLS 사용
- OAuth 2.0 인가 서버 설정
- OAuth 2.0으로 마이크로서비스 보호
- 자체 포함 액세스 토큰(JWT)으로 마이크로서비스 보안
- JWT를 발행하도록 인가 서버 설정
- JWT로 마이크로서비스 보호
- 마이크로서비스에 대한 접근 제어
- 범위 기반 접근 제어
- 역할 기반 접근 제어
- 서비스 간 통신 보호
- JWT로 보호된 서비스 간 통신
- TLS 상호 인증으로 보호된 서비스 간 통신
- 액추에이터 엔드포인트 보안
- 요약
- OAuth 2.0으로 마이크로서비스 보안
- 13장. 관찰 가능성
- 관찰 가능성의 세 기둥
- 스프링 클라우드를 사용한 분산 추적
- 스프링 클라우드 슬루스
- 스프링 부트 마이크로서비스에 스프링 클라우드 슬루스 사용
- 스프링 클라우드 슬루스를 사용해 여러 마이크로서비스 간의 메시지 추적
- 집킨을 통한 데이터 시각화와 상관관계
- 이벤트 기반 로그 집계 아키텍처
- 오픈 트레이싱 소개
- 스프링 부트 마이크로서비스와 집킨을 사용한 오픈 트레이싱으로 분산 추적
- 스프링 부트 마이크로서비스와 예거를 사용한 오픈 트레이싱으로 분산 추적
- 프로메테우스가 포함된 메트릭
- 스프링 부트 마이크로서비스 메트릭 노출하기
- 프로메테우스 설정
- 프로메테우스를 사용한 그래프 작성
- 그라파나를 사용한 분석과 모니터링
- 그라파나로 대시보드 구축
- 그라파나로 경고 생성
- 도커와 함께 Fluentd 로그 수집기 사용
- 도커 컨테이너로 Fluentd 시작
- 도커 컨테이너에서 실행되는 마이크로서비스에서 Fluentd에 로그 게시
- 작동 원리
- 마이크로서비스 배포에서 Fluentd 사용하기