분산 아키텍처를 위한 모던 트레이드오프 분석
“한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다.”
- 원제 : Software Architecture : The Hard Parts
- 저자 : Neal Ford, Mark Richards
- O’Reilly Media, 2021 / 한빛미디어, 2022
The Hard Parts
이 책은 지난 6월 서평했던 ‘소프트웨어 아키텍처 101’ 의 실전판이다. ‘소프트웨어 아키텍처 101 서평 보기’ 동일한 저자가 쓴 이 책은 먼저 출간된 책을 집필하면서 부터 같이 진행됐다고 한다. 전작이 분산 아키텍처의 소개와 설계상 어떤 특징을 가지는지, 팀 리팅을 어떻게 이끄는지 개괄적으로 설명하는 책이라면, 이 책은 그것을 실제하는 아키텍처를 집대성 해놓은 책이라고 보면 될 것 같다.
분산 아키텍처 적용의 실제
‘실제’ 라는 말과 어울리게 모놀리식 아키텍처의 서비스를 시나리오로 들어 문제점을 분석하고 분산 아키텍처로 전환하는 과정을 소개한다. 그리고 결정에 필요한 명분과 기술적 잇점에 대한 예시도 함께 제공한다. 어느것이 절대적으로 낫다는 맹목적인 주입보다 이것을 행함으로 인해 얻는 득과 잃는 실을 납득할 수 있게 설명한다.
서비스, 어플리케이션, 컴포넌트를 분리하기 위한 분석 과정과 그 실제를 보여준다. 특히 데이터베이스를 어떻게 분리 할 것인지에 대한 아이디어가 돋보인다. DB는 외래키와 트랜잭션 같은 독립적인 기능에 많이 의존하기 때문에 분리하는 것이 쉽지 않다. 이를 고려해 단일 DBMS 내에서 스키마를 분리하고, 결과적으로 별도의 DB로 분리해내는 절차를 설명한다.
서비스를 분리함으로써 재사용성에 대한 트레이드 오프와 함께 ‘공유 서비스’ 라는 절충안을 소개한다. 특히 공통 코드라고 일컫는 공유 라이브러리는 공유했을 경우 강한 의존성이 생기므로 REST나 gRPC로 공통 코드에 엑세스 하도록 하는것이다. 다만 단일 라이브러리, 공유 라이브러리, 공유 서비스에 대한 장단점이 공존하므로 적절한 트레이드 오프가 필요하겠다.
이 책에서 가장 흥미롭게 봤던 부분인 데이터 오너십이다. 분산 아키텍처에서 트랜잭션에 따른 데이터의 일관성을 어디서 오너십을 가지는가에 대한 내용을 다룬다. 이 파트를 보면서 쇼핑몰의 경우 주문 폭주에 따른 물류 마감으로 인한 주문 종료를 예시로 들 수 있겠다는 생각을 했다. 이 경우 주문 수 집계와 물류 가용성을 고려해야 할 것이다. 주문, 배송사, 물류 세가지 데이터를 어떻게 동기화 하고 상품의 주문 여부를 컨트롤 할 인지. 이 데이터를 어떻게 일관성을 이룰 것인지 패턴에 대해 아이디어를 많이 얻을 수 있었다. 백그라운드 동기와 패턴, 오케스트레이티드 요청 기반 패턴, 이벤트 기반 패턴을 소개한다.
그외 나머지 다 소개를 하지는 못했지만 데이터 엑세스, 분산 워크플로관리, 트랜잭셔널, 계약에 대한 많은 아키텍처 패턴 을 제공한다.
은탄환은 없다
그리고 마지막에는 트레이트 오프를 결정하는 방법론에 대해서도 설명한다. 앞서 설명한 여러 패턴들을 놓고 어느 것이 가장 적합한 아키텍처인가를 판단해야 할 때 각 패턴을 분석하고, 평가할 수 있는 기준을 어떻게 결정할 것인지 알려준다. 그리고 그러한 기준이 정해졌을때 판단 지표를 작성함에 있어 피해야할 태도나 편견에 대해서도 좋은 귀감이 된다. 결론을 한마디로 말하자면 ‘은탄환은 없다’ 라는 골자이나, 생각보다 뼈아픈 직언이 많으니 많은 생각을 들게 한다.
‘The Hard Parts’라는 말에 어렵다고 느낄 수 있으나 서비스를 운영하는 엔지니어 본인 입장에서는 그동안 해결하기 어려웠던 두루뭉술했던 이슈들이 교통정리가 되는 결과에 도달했다. 다시 정독하고 서비스에 어떻게 녹여낼 수 있을지 오히려 좋은 귀감이 된 책이였다.
“한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다.”