이미 소장하고 있다면 판매해 보세요.
|
1장. 분산 컴퓨팅 아키텍처 환경
__시스템 아키텍처 ____메인프레임 아키텍처 ____클라이언트-서버 아키텍처 ____3계층 아키텍처 ____N계층 아키텍처 __네트워크 아키텍처 ____지점 간 ____허브와 스포크 ____엔터프라이즈 메시지 버스 ____엔터프라이즈 서비스 버스 __소프트웨어 아키텍처 ____애플리케이션 계층 ____애플리케이션 레이어 __애플리케이션 아키텍처 환경 ____일반적인 애플리케이션 아키텍처 ____일반적인 배포 아키텍처 __확장성 딜레마 ____애플리케이션 상태 ____의존성의 어려움 ____모놀리스 애플리케이션 __확장 가능한 아키텍처 ____상태 비저장 설계 ____분할과 정복 __요약 2장. 마이크로서비스 소개 __모듈식 모놀리스 ____모듈식 조직 ____모놀리스 애플리케이션 ____모놀리스 애플리케이션 경계 ____모놀리스 모듈 간 의존성 ____확장성 딜레마 ____모놀리스 기술 제약 __마이크로서비스 소개 ____독립 모듈 ____모듈 간 통신 ____마이크로서비스 __요약 3장. 심층 마이크로서비스 __마이크로서비스의 겉모습 ____전자상거래 마이크로서비스 ____무계층, 분산형 ____마이크로모놀리스 ____자체 포함 마이크로서비스 ____마이크로서비스와 SOA의 유사성 ____메시지 기반 마이크로서비스 __고급 마이크로서비스 기능 ____마이크로서비스 안전장치 ____마이크로서비스 확장성 ____마이크로서비스 가변성 __요약 4장. 마이크로서비스 아키텍처 __디지털 비즈니스를 위한 아키텍처 ____디지털 시대 ____디지털 앱 ____메시 앱과 서비스 아키텍처 __마이크로서비스에 대한 컨텍스트 ____서비스의 세분성 ____게이트웨이 ____도메인 중심 파티션 ____클라우드 네이티브 전환 ____웹 스케일 컴퓨팅 __없어서는 안 될 클라우드 ____클라우드 아키텍처 모델 ____클라우드 서비스 모델 ____SaaS 성숙도 모델 ____가상화 ____가상화 서버와 컨테이너 __마이크로서비스 아키텍처 ____아키텍처의 역전 ____내부 아키텍처 관점 ____외부 아키텍처 관점 ____MASA의 큰 그림 __요약 5장. 마이크로서비스를 위한 필수 패턴 __서비스의 직교 스케일아웃 ____쓰기 대 읽기 트랜잭션 ____조회 후 예약 과제 __CQRS: 명령과 조회 책임 분리 ____전통적 방식과 CQRS 기반 소프트웨어 시스템 ____CQRS의 명명법 __이벤트 기반 CQRS 아키텍처 ____이벤트 기반 CQRS 설계를 위한 메타모델 ____이벤트를 사용한 명령 조회 분리 ____CQRS 기반 마이크로서비스의 확장 __요약 6장. 분산 메시징 __메시징의 복원력 ____메시지 지속성 ____마이크로서비스의 다양한 운영 특성을 위한 설계 ____사슬의 강도는 가장 약한 고리에 달렸다 __동기식 또는 비동기식 ____마이크로서비스 간의 동기식 상호작용 ____마이크로서비스 간의 비동기 상호작용 __단일 노드 RabbitMQ 브로커로 메시지 송수신 ____RabbitMQ 메시지 발송자 ____RabbitMQ 메시지 수신자 ____RabbitMQ 예제 빌드와 실행 __스프링 AMQP를 사용해 RabbitMQ에 메시지 송수신 ____스프링 AMQP 메시지 리스너 ____스프링 AMQP 메시지 생산자 ____스프링 AMQP RabbitMQ 예제 빌드와 실행 __다중 노드 RabbitMQ 클러스터로 메시지 송수신 __소비자와 생산자 연결 ____상관관계 ID ____대량의 부하를 동시에 처리하게 커스텀 네트워크 서버 코딩 ____동시 전시 게임 ____메시지 상관관계와 마이크로서비스 __요약 7장. 스프링 부트 __스프링 부트와 몽고DB를 사용해 데이터 작업 수행 ____스프링 이니셜라이저를 사용해 스프링 부트 프로젝트 템플릿 생성 ____엔티티 도메인 설계와 코딩 ____리포지터리 코딩 ____실행 가능 부트 애플리케이션 코딩 ____스프링 부트 애플리케이션 빌드와 패키징 ____스프링 부트 애플리케이션 실행과 테스트 __스프링 HAL 브라우저, HATEOAS를 사용한 개발 ____HAL 브라우저 ____RestTemplate을 사용한 HAL REST 엔드포인트 테스트 __RESTful 웹 서비스 개발 ____REST 기초 ____CRUD 리소스에 대한 HTTP 메서드 ____스프링 부트에서 REST 컨트롤러 개발 ____RestTemplate을 사용한 REST 컨트롤러 테스트 __요약 8장. 스프링 클라우드 __마이크로서비스 아키텍처를 위한 스프링 클라우드 __스프링 클라우드의 페인 클라이언트 사용 ____페인 클라이언트 시나리오 설계 ____페인 클라이언트 사용 코드 ____페인 클라이언트 빌드와 테스트 __히스트릭스 폴백 ____히스트릭스 폴백 시나리오 설계 ____히스트릭스 폴백 시나리오 코딩 ____히스트릭스 폴백 시나리오 빌드와 테스트 __히스트릭스 대시보드 ____히스트릭스 폴백 메서드 재설계 ____히스트릭스의 새로운 설계로 코딩 ____히스트릭스 폴백 시나리오 빌드와 테스트 ____히스트릭스 대시보드 검사 __리본: 클라이언트 측 로드밸런서 ____리본 클라이언트 시나리오 설계 ____리본 클라이언트를 사용한 코드 ____리본 클라이언트 빌드와 테스트 __유레카: 서비스 레지스트리 ____유레카 사용 시나리오 설계 ____유레카 사용 코드 ____유레카 예제 빌드와 테스트 ____부트스트랩 서버 __주울: API 게이트웨이 ____부트스트랩 URL ____주울 지원 시나리오 설계 ____주울 사용 코드 ____주울 예제 빌드와 테스트 __구성 서버 ____구성 시나리오 설계 ____구성 서버 사용 코드 ____구성 서버 빌드와 테스트 __요약 9장. 고가용성과 마이크로서비스 __고가용성 ____고가용성 측정 ____고가용성 기준 설정 __고가용성 분해 ____DNS 이중화 ____DNS 부하 분산 ____ISP 이중화 ____애플리케이션 아키텍처 이중화 ____데이터와 스토리지 이중화 __마이크로서비스의 고가용성 __스프링 클라우드 마이크로서비스 고가용성 시연 ____마이크로서비스 고가용성 시나리오 설계 ____마이크로서비스의 고가용성을 보여주는 코드 ____마이크로서비스 고가용성 빌드와 테스트 __요약 10장. 마이크로서비스 성능 __외부 아키텍처를 통한 커뮤니케이션 __비동기 HTTP ____HTTP의 부족한 부분과 좋지 않은 부분 ____비동기 HTTP 처리를 위한 API ____마이크로서비스 간 비동기 HTTP 시연 시나리오 설계 ____스프링 부트에서 비동기 HTTP를 사용한 코드 ____마이크로서비스 간 비동기 HTTP 빌드와 테스트 __스프링 부트 마이크로서비스 간 구글 프로토콜 버퍼 ____프로토콜 버퍼 ____마이크로서비스 간의 프로토콜 버퍼를 시연하는 시나리오 ____스프링 부트에서 프로토콜 버퍼를 사용하는 코드 ____마이크로서비스 간 프로토콜 버퍼 빌드와 테스트 ____프로토콜 버퍼 사용의 영향 __요약 11장. 이벤트와 결과적 일관성 __이벤트 기반 아키텍처 ____이벤트 ____EDA 구성 요소 __마이크로서비스와 이벤트 기반 아키텍처 ____마이크로서비스의 진화 ____결과적 일관성과 마이크로서비스 __마이크로서비스와 CAP 정리 ____스케일 큐브 ____CAP 정리 ____BASE 시스템 ____CAP 피라미드 __요약 12장. CQRS 아키텍처를 위한 Axon __CQRS 프레임워크 Axon 소개 ____Axon은 무엇일까? ____Axon을 사용할 수 있는 곳 ____Axon을 실행할 때 필요한 것 __동일한 JVM에서 명령과 이벤트 처리 ____예제 시나리오 ____예제 시나리오 코딩 ____예제 시나리오 빌드와 테스트 __분산 명령과 이벤트 처리 ____예제 시나리오 ____예제 시나리오 코딩 ____예제 시나리오 빌드와 테스트 __요약 13장. 분산 트랜잭션 __두 장군의 역설 ____두 장군의 역설 설명 ____솔루션 접근법 ____장군으로서의 마이크로서비스 ____TCP/IP, 장군 사이의 계곡 __트랜잭션 ____트랜잭션의 핵심에 있는 하드웨어 지침 ____트랜잭션의 ACID ____트랜잭션 모델 ____EJB와 스프링의 트랜잭션 속성 비교 ____트랜잭션 격리 메커니즘 ____트랜잭션 격리 수준 ____트랜잭션 동시성 ____트랜잭션 격리 제어 방법 __엔터프라이즈 트랜잭션 범주 ____ACID 트랜잭션 ____BASE = ACID를 조각으로 나누기 ____BASE 트랜잭션 ____완화된 BASE 트랜잭션 __ACID와 BASE 비교 __분산 트랜잭션 재검토 ____로컬 트랜잭션 ____분산 트랜잭션 ____자바에서 분산 트랜잭션 __MySQL, ActiveMQ, Derby, 아토미코스를 사용한 분산 트랜잭션 예제 ____예제 시나리오 ____예제 시나리오 코딩 ____예제의 정상 흐름 빌드와 테스트 ____트랜잭션 롤백 시나리오 테스트 ____완화된 BASE 이상 시뮬레이션 ____일반적인 메시징 함정 __요약 14장 트랜잭션과 마이크로서비스 __파티셔닝과 마이크로서비스 ____마이크로서비스와 분산 데이터 ____멱등성 운영과 마이크로서비스 ____글로벌 대 로컬 리소스 __분산 트랜잭션 예제: 더 적은 ACID로 리팩토링 ____완화된 BASE를 향해: 메시지 중복과 비순차적 메시지 처리를 위한 재설계 ____완화된 예제 시나리오 코딩 ____메시지 중복 전송 시나리오 빌드와 테스트 ____메시지 중복 소비 시나리오 테스트 ____메시지 수신 순서가 맞지 않는 시나리오 테스트 __트랜잭션 옵션 선택 ____메시지 대기열, 미리보기, 클라이언트 확인 __요약 15장. 마이크로서비스에 최적화된 트랜잭션 __마이크로서비스 트랜잭션을 위한 사가 ____사가 설명 ____분산형 사가 __Axon을 사용한 사가 예제 코드 ____사가 예제 시나리오 설계 ____사가 예제 시나리오 코딩 ____사가 예제 빌드와 테스트 __요약 16장. 고급 고가용성과 확장성 __오라클 DB를 참고로 하는 고가용성과 확장성 템플릿 ____단순한 초기 아키텍처 ____단순하고 확장된 아키텍처 ____데이터베이스 병목 현상을 해결하기 위한 아키텍처 ____효율성 향상을 위한 독립적인 읽기와 쓰기 확장성 ____웹 확장성 아키텍처를 위한 샤딩 ____좋은 아키텍처지만 더 좋고 더 단순한 것이 필요 __Axon의 고가용성과 확장 가능한 CQRS 예제 ____예제 시나리오 설계 ____예제 시나리오 코딩 ____고가용성 시나리오 빌드와 테스트 __Axon CQRS용 쓰기 노드에서 에그리게이트 루트 엔티티 확장 ____동일한 엔티티의 복제 요청을 동시에 수정 ____낙관적 잠금 ____Axon의 충돌 탐지와 해결 __Axon CQRS에서 낙관적 잠금을 보여주는 예제 ____예제 시나리오 설계 ____예제 시나리오 코딩 ____예제 시나리오 빌드와 테스트 __요약 17장. Axon CQRS 마이크로서비스 전자상거래 __전통적인 전자상거래 애플리케이션 복습 ____전자상거래 비즈니스 요약 ____전자상거래 아키텍처 복습 __전자상거래 마이크로서비스 애플리케이션 ____마이크로서비스 기반 전자상거래 아키텍처를 위한 논리적 아키텍처 ____BASE 내의 ACID ____전자상거래 마이크로서비스의 설계 ____마이크로서비스 기반 전자상거래 아키텍처를 위한 기술 아키텍처 __전자상거래 마이크로서비스 애플리케이션 설계와 코딩 ____상품 카테고리와 상품 나열 ____재고 데이터와 함께 상품 세부 정보 나열 ____장바구니에 상품 추가 ____새 주문 생성 ____주문 취소 ____받은 주문 배송 ____주문 배달 ____배송된 주문에 대한 배달 실패 ____주문 이력 보기 검색 __전자상거래 마이크로서비스 인프라 설계와 코딩 ____구성 서버 ____서비스 레지스트리 ____API 게이트웨이 __전자상거래 마이크로서비스 애플리케이션 구성 __전자상거래 마이크로서비스 애플리케이션을 위한 인프라 환경 설정 __전자상거래 마이크로서비스 애플리케이션 구축과 실행 __전자상거래 마이크로서비스 사용 사례 테스트 ____상품 카테고리와 상품 세부 정보보기 ____장바구니에 담기 ____사용자 프로필 생성 ____새 주문 생성 ____새 주문 배송 ____배송 주문을 성공적으로 배달 ____배송 주문에 대한 배달 실패 ____새 주문 취소 ____재고 원복 __요약 18장. 마이크로서비스 보안 __OAuth 2.0과 마이크로서비스 ____OAuth 2.0 ____OAuth 2.0의 역할 ____OAuth 2.0 클라이언트와 사용자 에이전트 ____신뢰할 수 있는 클라이언트와 신뢰할 수 없는 클라이언트 ____인증 코드 부여 유형 __확장 가능한 API 호출을 위한 토큰 ____세션 ID ____토큰 ____JSON 웹 토큰(JWT) __예제 마이크로서비스 애플리케이션에 대한 보안 설계 ____마이크로서비스를 위한 보안 아키텍처 ____비대칭 서명과 참조 토큰 __마이크로서비스 전자상거래 애플리케이션에 대한 코드 보안 ____웹 앱이 보안을 처리하게 설정 ____OAuth 클라이언트로서의 API 게이트웨이 주울 ____권한 부여 서버 ____리소스 서버 __전자상거래 마이크로서비스 애플리케이션 설정 ____애플리케이션 구성 ____환경 인프라 설정 ____애플리케이션 빌드와 실행 ____애플리케이션 테스트 __요약 19장. Axon 마이크로서비스와 BASE 트랜잭션 __Axon 3을 사용해 동일한 JVM에서 명령과 이벤트 처리 ____예제 시나리오 설계 ____예제 시나리오 코딩 ____예제 시나리오 빌드와 테스트 __Axon 3을 사용한 분산 명령과 이벤트 처리 ____스프링 클라우드를 사용한 분산 명령 버스 설계 ____예제 시나리오 코딩 ____예제 시나리오 빌드와 테스트 __BASE 트랜잭션을 사용하는 Axon 3 CQRS 전자상거래 마이크로서비스 ____주문과 재고 도메인 사이의 ACID 매듭 제거 ____주문과 재고 도메인을 별도의 마이크로서비스로 분할 ____결정론적 결과적 일관성을 위한 사가 ____전자상거래 마이크로서비스 애플리케이션 구성 ____전자상거래 마이크로서비스 애플리케이션 구축과 실행 __Axon 4를 사용해 동일한 JVM에서 명령과 이벤트 처리 __Axon 4를 사용한 분산 명령과 이벤트 처리 __요약 부록A 몽고DB 설치, 구성, 실행 __몽고DB 소개 ____몽고DB 문서 __몽고DB 설치와 구성 ____몽고DB 커뮤니티 에디션 다운로드 ____몽고DB 설치와 구성 __몽고DB 사용 시작 ____몽고DB 시작과 연결 ____몽고DB로 기본 데이터 조작 실행 __Robomongo: 몽고DB용 GUI ____Robomongo 커뮤니티 에디션 다운로드와 설치 ____Robomongo를 사용한 몽고DB 시작과 연결 ____몽고DB로 기본 데이터 조작 실행 __요약 부록B RabbitMQ 클러스터 설치, 구성, 실행 __RabbitMQ 소개 __RabbitMQ 설정 ____Erlang 다운로드와 설치 ____RabbitMQ 설치와 구성 __RabbitMQ 사용 시작 ____관리 플러그인 활성화 ____RabbitMQ 서버 시작 ____RabbitMQ 관리 콘솔보기 __RabbitMQ 클러스터 설정 ____RabbitMQ 클러스터 구성 ____RabbitMQ 클러스터 불러오기 ____RabbitMQ 클러스터 다시 시작 __클라이언트에서 RabbitMQ 클러스터에 연결 |
Binildas Christudas
황주필의 다른 상품
|
◈ 이 책에서 다루는 내용 ◈
◆ 모놀리스 아키텍처에서 마이크로서비스로 전환 ◆ ACID 호환 데이터베이스 없이 견고한 아키텍처 구축 ◆ 분산 트랜잭션 시스템 작업 ◆ 마이크로서비스의 고가용성 원칙 ◈ 이 책의 대상 독자 ◈ 마이크로서비스를 설계할 때 다룰 많은 아키텍처 복잡성을 드러내며, 까다로운 시나리오를 해결하는 데 코드 예제를 사용하는 책이다. 아키텍트를 위한 책이지만 개발자와 기술 관리자도 활용할 수 있다. 일반적으로 심각한 분산 서버 측 애플리케이션, 특히 마이크로서비스를 구축하려는 자바 설계자를 염두에 두고 작성했다. 이벤트 기반 시스템, 트랜잭션 무결성, 데이터 일관성 등과 같은 측면에서 설계자가 알아야 할 사항에 중점을 뒀다. 개발자들도 일상적인 작업에 유용한 완전한 코드를 찾을 수 있다. 예제를 빠르게 시작하고 실행하려면 자바, 스프링, 약간의 HTTP에 대한 실무 지식이 필요할 것으로 가정한다. 자바와 스프링에 대한 배경 지식이 없는 경우에도 유틸리티 구축 스크립트와 단계별 지침이 도움이 될 것이다. 또한 예제가 자바로 돼 있더라도 모든 아키텍처 측면과 많은 장이 자바에 국한되지 않으므로 분산 시스템을 다루는 기술 배경이 있는 설계자는 이 책이 도움이 될 것이다. ◈ 이 책의 구성 ◈ 우리는 약 20년 동안 분산 애플리케이션을 개발하고 배포해 왔다. 마이크로서비스는 분산 애플리케이션을 개발, 배포, 유지 관리하는 데 있어 많은 부족한 점을 이용해 아키텍처 원칙과 패턴을 제시한다. 마이크로서비스 아키텍처라고도 하는 마이크로서비스(Microservice)는 유지 관리와 테스트가 가능하며 비즈니스 기능을 중심으로 구성되는, 느슨하게 결합되고 독립적으로 배포 가능한 서비스 모음으로 애플리케이션을 구조화하는 아키텍처 방식이다. 이 책은 스프링 부트, 스프링 클라우드, Axon과 같은 가볍고 일반적인 기술을 사용해, 자바로 마이크로서비스를 작성하는 실용적인 방법을 소개한다. 또한, 학습한 내용을 바로 사용할 수 있는 형태로 자료를 제시한다. 이를 위해 모든 주요 개념에 대한 코드 예제를 포함하고, 이를 빌드하고 실행하는 방법을 정확하게 보여준다. 이 책은 완전한 마이크로서비스 예제인 전자상거래 애플리케이션을 소개한다. 독자는 이를 템플릿으로 사용해 운영 시스템의 구축을 바로 시작할 수 있다. 자바 세계에서 사용할 수 있는 모든 책 중에서, 이 책은 완전한 코드와 함께 XA 트랜잭션 관리자와 2개의 서로 다른 XA 트랜잭션 리소스를 활용하는 2단계 커밋 트랜잭션의 모든 성공과 실패 시나리오 시뮬레이션을 독점적으로 보여주는 첫 번째 책이다. XA 트랜잭션을 자세히 보여준 다음 ACID 방식 트랜잭션을 파티션 및 도메인 내로 제한해 파티션 및 도메인에 걸쳐 BASE 트랜잭션이라고 하는 것을 채택함으로써 (최종) 트랜잭션 무결성을 달성하는 데 사용할 수 있는 코드와 기술을 다룬다. BASE 방식 분산 트랜잭션의 가장 잘 알려진 패턴 중 하나인 사가(Saga)에 대한 작업 예제도 소개한다. 또한 마이크로서비스의 고가용성, 보안, 성능도 다룬다. 여기에 묘사된 많은 개념, 아키텍처, 코드들은 경험이 풍부한 아키텍트들만 갖고 있는, 밖에서 쉽게 얻을 수 없는 비법들이지만 이제는 이 책의 형태로 압축돼 있다. ◈ 옮긴이의 말 ◈ 많은 기업에서 이제는 마이크로서비스 아키텍처로 애플리케이션을 개발하는 것이 필수인 시대가 된 것 같다. 하지만 여전히 마이크로서비스 아키텍처를 기반으로 애플리케이션을 개발하는 것은 어려운 일이며, 고려해야 할 사항이 많다. 이 책에서는 다양한 마이크로서비스 아키텍처 패턴을 소개하면서 각 패턴들이 어떠한 의미를 갖는지, 어떻게 구현할 수 있는지 샘플 코드로 쉽게 이해할 수 있게 제공한다. 이 책에서는 이벤트 기반 아키텍처에서 CQRS나 분산 트랜잭션, 고가용성을 확보하는 방법 등을 자세히 소개하고 있어 마이크로서비스 아키텍처, 특히 이벤트 기반 아키텍처를 도입하려고 하는 개발자나 아키텍트들에게 추천하고 싶다. |
|
이 책은 소프트웨어 엔지니어와 아키텍트의 수년간 실무 경험의 산물이 분명하다. 저자는 분산 시스템 아키텍처 영역에서 복잡한 개념적 결정을 위해 소프트웨어 엔지니어와 소프트웨어 아키텍트를 안내하는 포괄적인 책을 썼다. 각 장은 논리적 방식으로 구성돼 있어 독자는 모든 대규모 분산 시스템 프로젝트에서 제기돼야 하는 중요한 질문들을 통해 안내받을 수 있다. 특히 저자가 마이크로서비스 활용을 고려한 프로젝트에 착수하기 전에 소프트웨어 아키텍트와 소프트웨어 엔지니어가 질문해야 하는 모든 질문을 상세히 설명하며, 모놀리스 아키텍처에서 마이크로서비스 기반 아키텍처로의 전환을 설계하는 데 상당 부분을 사용한다는 점을 강조할 필요가 있다. 또한 이 책에서는 클라우드 배포와 관련된 문제도 다루며, 이는 이러한 시스템의 중요한 측면을 구성한다. 이 책에서 설명하는 흥미로우며 수준 높은 문제는 마이크로서비스의 기초부터 트랜잭션, 결과적 일관성, 클라우드 배포, CAP 정리 관련 문제에 이르는 광범위한 주제를 다룬다. 마이크로서비스와 관련된 모든 문제에 대한 지침서 역할을 할 수 있는 책으로, 마이크로서비스 기반 분산 시스템을 구현하려면 어떤 질문을 해야 할지, 이후에 취해야 할 단계는 무엇인지에 대한 단계별 매뉴얼이다. - 챠람 더스트다르(Schahram Dustdar) (IEEE 연구원, 책임자, 분산 시스템 그룹, WEIN(비엔나 기술 대학교) 기술 대학)
|
|
소프트웨어 엔지니어링의 영역은 빠르게 진화한다. 기업은 시장의 신규 이민자와 법률 및 고객 기대치의 변화로 인해 지속적인 도전을 받고 있다. 스타트업은 빠르게 진화하고 성공할수록 증가하는 서비스 수요를 처리해야 한다. 이러한 과제를 해결하려면 소프트웨어를 설계하고 구축하는 방법을 철저히 검토해야 한다. 마이크로서비스 아키텍처는 이러한 요구에 직면한 시스템을 위한 좋은 기반을 제공한다. 그러나 마이크로서비스에는 고유한 과제가 있다. 비닐다스는 소프트웨어 개발 영역에서 쌓은 광범위한 실무 경험과 새로운 기술 및 아키텍처 방식에 대한 열린 마음을 결합해 훌륭한 성과를 냈다. 이 책 전반에 걸쳐 마이크로서비스 시스템과 관련된 다양한 아키텍처 패턴을 도입하는 실용적인 접근법을 취하며, 기존부터 확립되어 있던 공통 패턴과 CQRS 같은 일부 새로운 패턴을 설명한다. 마이크로서비스 여정을 시작하기를 원한다면 이 책이 당신의 여행 가이드가 되어줄 것이다. - 알라드 뷔제(Allard Buijze) (AxonIQ의 CTO겸 설립자, Axon 프레임워크 제작자)
|
|
몇 년 전의 SOA가 그랬듯이, 오늘날 새로운 소식의 중심에는 마이크로서비스가 있다. 어떤 사람들은 마이크로서비스가 바로 제대로 구현된 SOA라고 말한다. 이제 무거운 WS-* 표준 대신 REST가 제공되며, ESB 대신 ActiveMQ와 같은 경량 브로커가 있다. 트랜잭션은 어떨까? 아마존과 같은 업계 거대 기업에서는 모든 마이크로서비스를 아우르는 글로벌 ACID 트랜잭션을 필수적으로 사용하지 않는다(권장하지도 않는다). 대신 요즘은 BASE와 사가에 대한 이야기뿐이다.
BASE는 모든 마이크로서비스에 걸친 거대한 ACID 트랜잭션(하나의 거대한 커밋 포함)이 아니라 시스템으로 파급되는 여러 개의 작은 ACID 트랜잭션을 의미하므로 결론적 일관성이 생긴다. 이를 위해 메시징이 중요하다. 이러한 각각의 작은 ACID 트랜잭션은 XA와 같은 입증된 기술로 제어할 수 있으므로 문제가 발생하더라도 실제로는 ACID다. 안타깝게도 BASE는 XA 지원이 부족한 최신 프레임워크나 기술/플랫폼에서 사용하는 잘못된 변명일 뿐이다. BASE 구현 방식이 핵심이며, XA가 없으면 메시지 중복 처리나 손실에 신경 쓰지 않는 한 올바르게 수행하기가 매우 어렵다. 중복은 종종 문제가 발생할 수 있으며 임시 수정으로 해결될 수 있다. 손실된 메시지는 장기적인 데이터 불일치를 제외하면 전혀 감지되지 않을 수 있기 때문에 근본 원인을 찾기가 매우 어렵다. 소비자 측뿐만 아니라 생산자 측에서도 문제가 발생할 수 있는 것이다. BASE를 수행하는 간단하고 안전한 방법은 13장에 나와 있다. 모험심이 강하지 않다면 이러한 방식을 고수하는 것이 좋다. 금융 서비스에 종사하면 XA에서 제공하는 강력한 보증과 더불어 코드 단순성을 무료로 제공하는 혜택을 받을 수 있다. 14장에서 알 수 있듯이 XA 트랜잭션에서 기본적으로 제공되는 보증을 모방하려면 많은 추가 코딩과 테스트가 필요하다. 14장의 조정은 대부분 내가 주로 다루는 수준을 훨씬 뛰어넘는 내용이지만, 비닐다스는 얼마나 많은 것을 고려해야 하는지를 훌륭하게 지적해주었다. 그것은 공원에서 산책하는 것처럼 쉬운 것이 아니었으며, 그와 거리가 멀었다. 사가와 같은 고급 코딩(15장)은 격리를 포기하고 스스로 보상을 감당해야 하는 다른 수준의 트랜잭션을 도입할 수 있다. 아토미코스(Atomikos)에는 Try-Confirm/Cancel(줄여서 TCC이라는 다소 유사한 모델이 있다. 롤백을 해야 하는(보상을 프로그래밍하는) 부담이 있기 때문에 우리가 만나 본 많은 사람이 별로 좋아하지는 않지만 개념은 훌륭하다. - 가이 파르돈 박사(Guy Pardon, PhD) (atomikos.com 설립자) |