엔지니어링 접근 방식으로 배우는 소프트웨어 아키텍처 기초
“한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다.”
- 원제 : Fundamentals of Software Architecture
- 저자 : Mark Richards, Neal Ford
- O’Reilly Media, 2020 / 한빛미디어, 2021
서비스 구현이 고도화 되고 시스템이 복잡해지는 시대다. 소프트웨어 개발 생태계가 빠르게 발전함과 동시에 소프트웨어 아키텍트의 역할도 변화무쌍하고 범위도 넓어지고 있다. 이 책에서는 요즘의 소프트웨어 아키텍트는 과거와 어떻게 다른지, 소프트웨어 아키텍처에서 변하지 않는 것은 무엇 인지 설명한다.
책은 아키텍처 기본, 아키텍처 스타일, 아키텍트가 가져야 할 소프트스킬로 크게 3파트로 나뉜다. 기본 파트에서는 아키텍처에서 측정할 수 있는 응집도, 결합도, 추상도, 불안정도, 커네이선스 등을 소개 하며 이런 메트릭이 결국 트레이드-오프를 하기 위한 수단이라고 설명한다.
아키텍처를 구축하거나 타당성을 검증할때 특성을 식별하는 작업이 선행되야 한다. 5장에서 시나리오를 들어 요구사항의 비즈니스 언어를 엔지니어링 언어로 해독한 명시적 특성과 요구사항엔 없지만 당연히 지원되야 할 가용성, 신뢰성, 확장성 등을 내포한 암묵적 특성을 도출하는 방법을 소개한다.
아키텍트에게 중요한 역할 중 하나는 거버넌스 메커니즘을 프로젝트 전반에 뿌리내리는 것이다. 아키텍처 거버넌스는 개발 프로세스 전반의 여러 기준을 포괄한다. 기준을 판단하기 위해 CI, 데브옵스 등 많은 자동화가 이루어지고 있다.
과거에는 아키텍처 특성을 이야기할때 그 범위를 시스템 레벨에 두는것이 일반적이였다. 오늘날 마이크로서비스 같은 아키텍처 스타일이 등장하면서 포커스가 시스템에서 컴포넌트로 옮겨가고 있다. 여기서 컴포넌트의 결합도를 측정하기 위해 아키텍처 퀀텀에 대해 소개한다. 아키텍처 퀀텀이란, 높은 기능 응집도와 동기적 커네이선스를 가진, 독립적으로 배포 가능한 아티팩트 라고 설명한다.
그리고 아키텍처 스타일에 대해서 소개한다. 크게 모놀리식과 분산형 두가지로 나뉘며 레이어드, 파이프라인, 마이크로커널이 모톨리식 아키텍처. 서비스 기반, 이벤트 기반, 공간 기반, 서비스 지향, 마이크로서비스를 분산형 아키텍처라고 한다. 그러나 분산형 아키텍처에도 트레이드-오프가 있다는 것을 꼭 설명한다.
마이크로서비스는 DDD의 영향을 많이 받았다고 설명한다. 디커플링 스타일인 경계 콘텍스트 개념이 그 영향이다. 이는 마이크로서비스의 주된 목표다. 재사용성을 트레이드-오프 하고 중복을 허용해 고도의 디커플링을 가져간다. 다른 분산 아키텍처와 다르게 목적이 단순하기 때문에 서비스 규모가 작다. 리소스나 코드를 공유하면서 생기는 문제들을 자체 프로세스로 분리하면서 해결한다는 골자다. 전반적으로 확장성, 탄력성, 진화성을 주안점으로 두는 아키텍처다.
그러나 이러한 세분화가 무조건 좋은 결과를 가져다 주지 않는다. 비즈니스의 성격에 따라 트랜잭션 단위를 고려해야 하고 코레오그래피와 오케스트레이션 전략을 어떻게 가져가야 할 지 적절히 결정해야한다. 이를 적절히 조합해 트랜잭션을 중재하는 서비스가 따로 트랜잭션을 관리하는 사가 패턴도 있으나 롤백의 경우를 생각하면 개발의 난이도가 수직상승 하는것이다. 마이크로서비스에서 서비스 호출을 위한 네트웍 리소스는 무한하지 않고 절대적 안정성을 보장하지도 않기 때문에 이에 대한 고찰도 필요할 것이다.
마지막으로 소프트 스킬에 대한 내용을 다룬다. 아키텍트가 팀을 리딩하고 비즈니스 이해관계자들과 소통하기 위한 아키텍처의 정량적, 정성적 분석 방법들을 소개한다.
요즘의 소프트웨어 아키텍처 추세와 그 방법론에 대해서 잘 소개하고 있다고 생각한다. 개인적으로는 마이크로서비스 아키텍처가 왜 근래의 대표적인 서비스 구조로 자리 잡았나 궁금했는데 많은 부분 해소가 되었다.
“한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다.”