본문 바로가기
리뷰/도서

이벤트 기반 마이크로서비스 구축(Building Event-Driven Microservices) - 한빛미디어

by Remover 2021. 5. 14.
반응형

"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

 

책 소개


실시간 데이터 활용을 위한 새로운 시스템 아키텍처 가이드

 

이벤트 기반 마이크로서비스 아키텍처를 소개하는 실무 개론서다. 구조, 통신, 통합, 배포 등 기본 개념을 그림과 함께 구체적으로 설명한다. 따라서 이벤트 기반 시스템 구축 방식을 마이크로서비스로 전환하고자 하는 입문 개발자도 쉽게 읽을 수 있다. 넷플릭스, 링크드인, 스포티파이, 우버 등 세계 IT 기업들이 도입한 실제 데이터 사용법과 서비스 접근법을 익혀보자.

 

https://www.hanbit.co.kr/store/books/look.php?p_code=B6410605208 

 

이벤트 기반 마이크로서비스 구축

이벤트 기반 마이크로서비스 아키텍처를 소개하는 실무 개론서다. 구조, 통신, 통합, 배포 등 기본 개념을 그림과 함께 구체적으로 설명한다. 이벤트 기반 시스템 구축 방식을 마이크로서비스로

www.hanbit.co.kr

 

 

리뷰


 DDD(Domain-Driven Design), EDD(Event-Driven Design) 등 많은 시스템 설계 방법들이 존재하고 있습니다. 저도 실무에서 EDD, DDD를 모두 적용한 시스템을 구축하여 사용하고 있어서 이번 책을 통해 다시 한번 정리하고차 책을 읽어보았습니다.

 

이벤트 기반 마이크로서비스란 무엇일까요?

 

책에서는 '이벤트 기반 마이크로서비스 아키텍쳐에서는 시스템이 이벤트를 생산/소비하는 식으로 서로 통신합니다. 이벤트를 소비해도 메시지를 전달한 시스템에서 바로 사라지는 건 아니고 같은 메시지를 필요로 하는 다른 컨슈머도 가져갈 수 있도록 보관됩니다.' 라고 정의하고 있습니다.

 

Kafka, Pulsar, RabbitMQ 등 많은 메시징 시스템들이 존재하는데요. 이런 시스템들은 메시지를 발행하는 Producer(프로듀서), 메시지를 소비하는 Consumer(컨슈머)로 나누어져있습니다. 컨슈머는 프로듀서의 존재를 알 수 없기 때문에 느슨한 결합을 가지게 됩니다. 이러한 특징은 메시징 시스템의 장점이라고 할 수 있습니다.

 

 이벤트 기반 마이크로서비스(event-driven microservice)는 특정한 경계 콘텍스트를 구현하기 위해 개발된 작은 애플리케이션입니다. 서비스는 상태 비저장 서비스(5장)와 상태저장 서비스(7장)가 있고, 동기식 요청 응답 API(13장)가 포함된 서비스도 있습니다.

 

 이벤트 브로커 시스템은 다음과 같은 필수적인 기능을 제공합니다.

- 확장성(scalability) : 이벤트 브로커의 인스턴스를 추가하면 클러스터의 생산/소비 및 데이터 스토리지 용량을 늘릴 수 있습니다.

- 보존성(durability) : 노드 간에 이벤트 데이터가 복제되므로 어느 한 브로커에 장애가 발생해도 데이터는 보존되며 서비스도 계속 할 수 있습니다.

- 고가용성(high availability) : 이벤트 브로커를 클러스터링하면 한 브로커에 장애가 발생해도 클라이언트는 다른 노드에 접속할 수 있어서 풀 가동 상태를 유지할 수 있습니다.

- 고성능(high-performance) : 여러 브로커 노드가 생산/소비 부하를 분담합ㄴ디ㅏ. 초당 수십만 회 정도의 쓰기/읽기를 처리하려면 각 브로커 노드 성능이 우수해야 합니다.

 

3장에서는 통신 및 데이터 규약에 대해서 다룹니다. 주고 받을 데이터의 포맷과 그 생성 로직을 정하는 것을 의미하며,  데이터를 생산하는 프로듀서와 이를 소비하는 컨슈머가 모두 준수하는 일종의 계약서인 셈입니다.

 

규약의 호환성에는 3가지가 존재합니다.

- 정방향 호환성(Forward Compatibility) : 새 스키마로 생성한 데이터를 마치 옛 스키마로 생성한 것처럼 읽을 수 있습니다.

- 역방향 호환성(Backend Compatibility) : 옛 스키마로 생성한 데이터를 새 스키마로 생성한 것처럼 읽을 수 있습니다.

- 양방향 호환성(Full Compatibility) : 정방향 호환성과 역방향 호환성의 조합이야 말로 가장 강력한 보증 수표입니다. 나중에 호환성 요건을 완화하기는 어렵지만 반대로 높이는 것은 훨씬 더 어렵기 때문에 양방향 호환성은 가능한 한 항상 적용하는 것이 좋습니다.

 

책의 내용을 읽다보면 이벤트 처리에 대한 자세한 내용들을 알 수 있습니다. 데이터를 저장하기 위한 파티셔닝 내용, 파티션 할당에 있어서의 전략(라운드 로빈, 정적 할당, 맞춤할당)등에 대한 내용들도 다루고 있습니다.

 

또한, 스트림에 대한 내용을 다루면서 아파치 Kafka Streams, 아파치 Samza 등에 대해서도 다루고 있고 추가적으로 컨슈머가 소비하지 못하는 이벤트 메시지를 어떻게 모니터링 할 것인지 등엘 대한 내용을 다루면서 Burrow에 대한 내용을 다루고 있습니다. 실제로 Kafka Consumer Lag를 모니터링 하기 위해 Burrow를 많이 사용하고 있습니다.

 

책 전반적에서 이벤트를 통한 마이크로서비스에 대한 내용을 너무나도 잘 다루고 있어서 놀랐습니다. 파티셔닝에 대한 내용들, 추가적으로 전략 등에 대한 내용들도 자세히 다루고 있습니다. EDD를 이해하기 너무나도 좋은 책이 아닐까 생각됩니다. 기회가 된다면 책을 통해 Event-Driven Microservices에 대해 경험해볼 수 있었으면 좋겠습니다.

댓글