티스토리 뷰

생활/책

[책] Microservices Up & Running

Jaeyeon Baek 2021. 9. 5. 23:58

한빛미디어에서 아주 재밌는 책이 발간되었다. Microservices Up & Runing 처음 시작하는 마이크로서비스인데 마이크로서비스 초심자를 위해 정말 많은 것을 가득 차린 준비된 밥상 느낌이다. 마이크로서비스 개론부터 쿠버네티스, 헬름, 깃옵스 배포 도구로 Argo CD, 그리고 Infrastructure as Code(IaC) 도구인 테라폼까지. 단숨에 훌훌 넘어간다. 

처음 시작하는 마이크로서비스

소프트웨어 구축의 결정을 기록하는 아키텍처 결정 기록(Architecture Decision Record:ADR) 작성을 시작으로 마이크로서비스 팀 설계, 팀 토폴로지를 만들기까지 아주 자세하게 다룬다. 또한 마이크로서비스를 구축, 운영하는 데 있어서 아주 중요한 핵심 요소가 책 구석구석에 드러나 있다.

마이크로서비스 소유권 - 각 마이크로서비스는 단일 팀이 소유하며 해당 팀은 마이크로서비스를 설계, 구축, 실행한다. 이 팀은 서비스 수명 동안 마이크로서비스를 담당한다

 

혹시 여러분의 조직이 마이크로서비스를 진행하고 있다면 생각해보시라. 혹시 팀 외부에서 마이크로서비스를 같이 소유하고 있지는 않은가? 이커머스를 예로 든다면, 결제 파트에서 배송 서비스를 넘나들고 있지는 않은지 생각해보면 좋다. 

책에서 마이크로서비스를 설계하는 방법으로 서비스 설계를 위한 7가지 본질적 진화( Sevent Essential Evolutions of Design for Services:SEED(S) )를 소개한다.

  • 액터 식별
  • 액터가 수행하는 작업 식별
  • 시퀀스 다이어그램을 사용하여 상호작용 패턴 발견
  • JTBD(Jobs To Be Done)와 상호작용 패턴을 기반으로 높은 수준의 작업 및 쿼리 도축
  • 개방형 표준(OpenAPI 규격 또는 GraphQL 스키마)을 사용하여 각 액션 및 쿼리를 스펙으로 설명
  • API 사양에 대한 피드백 받기
  • 마이크로서비스 구현

마이크로서비스는 간 통신에 사용 가능한 방법은 RESTful API, GraphQL, gRPC, 비동기 이벤트 통신이 있는데 이 책은 많은 개발자에게 친근한 RESTful API로 구현된다. 부수적인 설명이 필요 없을 정도로 간단하니까. 비동기 이벤트 통신을 설명하고자 하면 이벤트 큐(짧지만 책에서 다뤄진다)에 대한 설명이 필연적으로 따라오고 gRPC는 Protocol Buffers에 대한 이야기가 풀려야 한다. 이런 관점에서 봤을 때 독자층을 넓게 가져가기 위한 선택으로 볼 수도 있고 책이 더 두꺼워지지 않기를 바랐을지도 모르겠다. 

이 책은 이론만 구구절절 있는 다른 책과는 조금 다르다. 항공편 예약 플랫폼이라는 예제를 마이크로서비스로 구축하는 모든 단계를 다루고 있다. 심지어 테라폼으로 인프라를 구축하는 과정까지 지면을 할애한다. 이는 모놀리스를 마이크로서비스로 마이그레이션 하는 과정과는 또 다른 재미가 있다. 마이그레이션의 경우 기존 시스템에 대한 지원, 데이터베이스 분리 기법, 배포 방식이 주를 이루는 반면, '업 앤 러닝'은 첫 단추부터 마이크로서비스로 가는 방향을 안내한다. 그 과정은 꽤나 흥미진진하다.

마이크로서비스를 구축하면서 가장 가려웠던 부분이 책을 통해 시원하게 긁혔다. 바로 업스트림 마이크로 서비스와 다운스트림 간에 콘텍스트가 변경되는 것을 어떻게 처리하는 것이 이상적인가"였는데, 이 책은 두 가지 방법을 제시해주고 있다. 부패 방지 계층(anti-corruption layer)과 오픈 호스트 서비스(open host service)였다. 결국 하위 호환성 문제를 어떻게 다룰 것인지에 대한 이야기다.

마이크로서비스의 적절한 크기를 정하는데 DDD만큼 강력한 기준은 없다. 하지만 DDD의 방대한 내용을 완전히 수행하려면 많은 지식과 경험이 필요하다 또한 DDD는 팀 활동이기 때문에 DDD에 정통한 소수 개발자를 보유하는 것만으로는 충분하지 않다고 책은 이야기한다(이 책은 DDD에 대한 내용은 다루지 않는다). 이렇게 DDD를 사용할 수 없는 경우에 대안으로 이벤트스토밍을 사용한다. 아래와 같은 단계로 이벤트 스토밍은 진행되는데 아주 흥미진진하다. 

  • 1단계 (~30분) : 도메인 이벤트 검색
  • 2단계 (~45분) : 타임라인 적용
  • 3단계 (~60분) : 역방향 서술 및 명령 식별
  • 4단계 (~30분) : 집합체 / 제한된 콘텍스트 식별
  • 5단계 (~15분) : 경쟁 분석

이 과정을 통해 마이크로서비스의 적절한 크기를 도출해보길 바란다. 많은 개발팀이 처음부터 완벽한 마이크로서비스 구축하려고 하지만 현실적으로 가능하지 않다. 그 경계를 정하는데 어려움이 있기도 하지만 아키텍처는 진화가 필요한 부분이기 때문이다. 성공적인 마이크로서비스 도입 사례의 경우도 마찬가지다. 유명세를 타서 아키텍처가 공개된 시점에는 수백 개의 마이크로서비스가 아주 매끄럽게 굴러가는 것으로 보이지만 처음부터 그런 아키텍처는 아니었다는 걸 명심해야 한다. 

마이크로서비스를 구축할 때 데이터를 저장해야 한다면 필연적으로 트랜잭션을 신경써야 한다. 여기서는 분산 아키텍처에 적합한 사가(saga pattern)를 사용한 분산 트랜잭션을 소개한다. 이어 소개되는 프로젝션(projection)은 이벤트 소싱에서 현재와 같은 특정 시점의 상태를 계싼하는 작업을 나타내는데 이렇게 데이터를 다루는 내용이 아주 흥미롭기 때문에 자연스럽게 몰입된다. 책의 후반부에는 마이크로서비스를 배포하는 방식으로 블루-그린, 카나리, 다중 버전 방식이 소개된다. 셋 다 아주 유명한 패턴이기 때문에 혹시 잘 모르고 있다면 이 책을 통해 익혀보시길 바란다.

 소프트웨어 개발의 고전적인 문제는 오버엔지니어링과 조기 최적화다

 

마이크로서비스에 변경을 가해야 하는 시점이 온다면 이 문구를 기억하시라. 책에서 충분히 설명되고 있지만 사실 이건 마이크로서비스만 해당하는 이야기는 아니다. 

 

# 마무리

책의 제목은 "처음 시작하는..."이지만 일부 독자에게는 결코 쉬운 책은 아닐 거다. 마이크로서비스의 개념만 설명한다면 그럭저럭 입문하려는 독자에게 충분한 도움이 됐겠지만 앞서 말했듯이 테라폼, 쿠버네티스, 헬름, Argo CD 등 아주 다양한 개념들이 속출한다. MSA를 하겠다면 한번쯤은 튀어나오는게 정상적인 개념이지만 입문서적이라 글쎄... 그럼에도 불구하고 마이크로서비스를 지탱하는 다양한 기술을 맛볼 수 있다는 점에서 나는 합격 점수를 주고 싶다. 특히 다른 책들과 다르고 풍부한 예제를 다루고 있으니까. 이 책을 빠르게 훑어보고 여러 마이크로서비스 아키텍처 책을 만나시길 바란다.

 


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

댓글
댓글쓰기 폼