교재 학습 - 스프링 부트를 활용한 마이크로 서비스 개발 (3)

Kyu0·2023년 3월 2일
0

도입 🎬

이번 챕터에서는 드디어 책의 주요 개념인 마이크로서비스를 도입하는 챕터입니다.

마이크로서비스 간 데이터 교환을 위해 이벤트 중심 아키텍처RabbitMQ를 활용하는 챕터이기도 합니다.


이벤트 중심 아키텍처 🎇

MSA에서 각 마이크로 서비스들간 정보를 교환하기 위해 Spring AMQP와 RabbitMQ를 활용한 이벤트 중심 아키텍처를 채택했습니다.

이벤트 중심 설계에는 아래와 같이 3가지 큰 개념이 있습니다.

  • 이벤트 : 마이크로서비스 간 주고받는 데이터
  • 생산자(Producer) : 이벤트를 생성하여 보내는 쪽
  • 소비자(Consumer) : 생성된 이벤트를 받는 쪽

각 개념을 교재의 프로젝트와 대치한다면, 이벤트-문제 풀기, 생산자-Multiplication 서비스, 소비자-Gamification 서비스 입니다.

이벤트 중심 아키텍처에 대한 자세한 설명은 다음 게시글에서 다룰 예정입니다.


관련된 개념들 ✍🏻

아래는 이벤트 중심 아키텍처와 관련된 개념들입니다.

반응형 시스템 🕴🏻

이벤트를 구독한 마이크로서비스는 각자의 비즈니스 로직을 수행하고 다른 이벤트를 발행(publish)할 수도 있습니다. 이런 작용-반작용 패턴을 기반으로 하는 시스템을 반응형 시스템이라고 합니다.

출처 : 교재 p.88

그저 이벤트를 구독하고 발행하는 것이 아니라 구독한 이벤트가 발생했을 때 또다른 이벤트를 발행해 연쇄적으로 작동하는 것이 반응형 시스템인 것 같습니다.

또한, 이벤트 중심 설계는 이벤트 소싱(Event sourcing), 도메인 주도 설계, CQRS(Command and Query Responsibility Segregation) 과 밀접한 연관이 있다고 합니다.

이벤트 소싱

이벤트 소싱은 비즈니스 개체를 저장하는 방식입니다. 시간이 지나면서 변하는 정적 상태로 모델링하는 대신 변경할 수 없는 일련의 이벤트로 모델링하는 것입니다.
Customer 같은 일반적인 예제에서는 고객 테이블 대신 CustomerChanged 이벤트 시퀀스가 있습니다.
이름이 John인 고객이 있다고 합시다. 실수로 이름을 Jhonas로 바꿔서 다시 John으로 바꿨습니다. 기존의 데이터를 조회하는 방식으로는 이름이 John인 상태만 조회할 수 있습니다.
이벤트 소싱을 이용하면 개체는 다음과 같은 이벤트 시퀀스의 최종 상태가 됩니다. CustomerChanged → name: John (생성), CustomerChanged → name: Jhonas (실수), CustomerChanged → name: John (수정).
출처 : 교재 p.89

상당히 새로운 개념이었습니다. 기존에 데이터를 다루던 방식은 그저 데이터베이스에 레코드를 생성, 수정, 삭제하는 방식이었기 때문에 레코드의 변경 시퀀스는 별도로 로그로 기록해야 알 수 있었기 때문입니다.

CQRS

CQRS는 데이터를 조회하는 쿼리 모델과 데이터를 업데이트하는 커맨드 모델을 분리하는 패턴입니다. 따라서 훨씬 복잡한 시스템을 사용하는 대신 데이터를 매우 빠르게 읽어올 수 있습니다. 저장 모델을 이벤트 저장 모델로 하면 이벤트 소싱과 함께 사용할 수 있습니다.

CQRS는 데이터베이스, 소스코드, API, 시스템 등 여러 수준에서 적용할 수 있기 때문에 해당 단어를 사용하는 맥락을 파악하는 것이 중요하다고도 합니다.

데이터베이스 수준에서 적용한 예로는 유튜브가 있습니다.


학습 결과 및 마무리 👏🏻

이번 챕터에서는 주로 RabbitMQ 를 활용하여 마이크로서비스 간 데이터 교환을 하는 방법에 대해 학습했습니다.

이전에 마이크로서비스 아키텍처를 다룬 프로젝트를 개발할 때는 REST API 요청을 통해 데이터를 주고 받았는데, API의 요구사항이 달라지게 되면 연관된 모든 마이크로서비스에서 수정이 이뤄졌기 때문에 번거로웠습니다.

이벤트 중심 아키텍처를 도입하면 이러한 의존성을 깰 수 있어 좋은 것 같습니다.

또한, 이번 챕터에서는 오류 없이 개발했기 때문에 해당 항목은 제외되었습니다..!


예제 프로젝트 깃허브 주소 : https://github.com/Kyu0/microservices-book/tree/b978790c14981bd08cc5ca3c9e7da2f0b30ea39d

잘못된 내용이나 오타 지적 언제나 환영입니다.

profile
개발자

0개의 댓글