본문 바로가기
도서리뷰/IT 도서

[한빛미디어] <소프트웨어 아키텍처> 리뷰

by james_janghun 2025. 12. 28.

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

총평

- 책의 난이도  : ★★★★★
- 추천 별점     : ★★★★
- 추천 독자     : 소프트웨어 아키텍처를 고민하고 있는 사람들
- 지은이         : 마크 리처즈, 닐 포드 지음 / 류광, 307번역랩 옮김
- 출판사         : 한빛미디어
 


이 책은 난이도에 별 5개를 준 것처럼 매우 어렵다. 천천히 곱씹으면서 읽어야 한다.

한 페이지, 한 개념마다 멈춰서 생각해야 한다. “나라면 이걸 어떻게 설계할까?”, “우리 서비스에 이 개념을 그대로 적용할 수 있을까?”

이 질문을 계속 던지면서 읽어야 한다.

 

특히 내용이 워낙 방대하고, 다양한 아키텍처 스타일 예시를 제공한다.

- 계층형 아키텍처 스타일 (10장)

- 모듈형 모놀리스 아키텍처 스타일 (11장)

- 파이프라인 아키텍처 스타일 (12장)

- 마이크로커널 아키텍처 스타일 (13장)

- 서비스 기반 아키텍처 스타일 (14장)

- 이벤트 주도 아키텍처 스타일 (15장)

- 공간기반 아키텍처 스타일 (16장)

- 오케스트레이션 주도 서비스 지향 아키텍처 (17장)

- 마이크로서비스 아키텍처 (18장)

 

이렇게 9개의 세부적인 아키텍처 까지 제시하고 있어 사실 모든 것을 읽는 것은 힘들다.

나도 이 중에서 관심이 제일 많고 친숙한(?) 15장의 이벤트 주도 아키텍처 스타일로 내용을 작성해보겠다.

다만 책의 내용을 전부 요약하기에는 아직 이해도가 많이 부족하여 핵심으로 눈에 들어오는 몇개만 적어봤다.

 

이벤트 주도 아키텍처

이벤트 주도 아키텍처(EDA)는 현대적인 소프트웨어 엔지니어링에서 가장 인기 있는 분산 비동기 아키텍처 스타일이다. 대규모 복합 애플리케이션부터 소규모 서비스까지, 높은 적응성을 제공한다.

비동기적으로 이벤트를 발생시키고 이에 반응하는 컴포넌트들로 구성되어 있다. 대부분의 애플리케이션은 "데이터를 달라"고 요청하는 요청 기반(Request-based) 모델을 따르지만, 이벤트 주도 아키텍처는 "어떤 일이 일어났다"는 이벤트에 반응하여 행동을 취한다.

 

이벤트 주도 아키텍처는 제어 방식에 따라 크게 두 가지 형태로 나뉜다.
1) 브로커(Broker) 토폴로지: 중앙 집중식 제어 없이, 이벤트가 브로커를 통해 흘러가며 각 처리기가 비동기적으로 반응하는 방식이다. "발사 후 망각(fire-and-forget)" 방식을 활용해 매우 높은 응답성을 제공한다.
2) 중재자(Mediator) 토폴로지: 이벤트 중재자가 전체적인 작업 흐름을 관리하고 통제한다. 복잡한 비즈니스 로직이나 오케스트레이션이 필요할 때 적합하다.

 

이벤트에 어떤 내용을 담을지 이벤트 페이로드(Payload)를 설계하는 것은 매우 중요하다.
데이터 기반(Data-based): 필요한 모든 정보를 담아 보낸다. 처리기는 DB를 조회할 필요가 없어 성능에 유리하지만, 데이터 일관성 유지와 대역폭 사용량 증가라는 단점이 있다.
키 기반(Key-based): ID 같은 최소한의 정보만 보낸다. 일관성 유지가 쉽지만, 처리기가 매번 DB를 조회해야 하므로 성능에 부하를 줄 수 있다.
 

우리가 피해야 할 안티패턴에는 이런 것들이 있다. 

빈혈성 이벤트(Anemic Event): 페이로드에 정보가 너무 부족해 처리기가 의사결정을 내릴 수 없는 상태를 말한다.
하루살이 떼(Swarm of Gnats): 너무 세분화된 파생 이벤트를 수 없이 발생시켜 시스템이 포화되고 흐름을 파악하기 어렵게 만드는 현상을 말한다.

 

결국 이래저래 종합하면 이벤트 주도 아키텍처는 성능, 확장성, 내결함성이 뛰어나다는 이점이 있지만 비동기 통신의 특성상 테스트가 어렵고, 전반적인 상태 관리가 복잡하다는 단점이 있어 이를 서로 잘 조율하는게 가장 중요한게 아닌가 싶다.

 

 

총평

이 책은 처음부터 끝까지 독자에게 답을 떠먹여주지 않는다. 대신 계속 질문을 던진다.

  • 우리는 무엇을 만들고 있는가
  • 이 시스템은 누구를 위한 것인가
  • 이 구조는 정말로 확장 가능한가, 아니면 지금만 돌아가는 구조인가

단순히 이러한 장점이 있다고 전달하는게 아니라 왜 그렇게 설계해야 하는지를 구체적으로 다뤄주는 책이다.

아키텍처 설계에 고민이 많은 개발자라면 꼭 한 번 읽어보시길 바란다!