platanu***
2026-04-27

이 책은 IBM 펠로를 포함한 수십 년 경력의 아키텍처 전문가들이 정립한 70여 개의 패턴을 통해 클라우드 환경에 최적화된 애플리케이션을 설계하고 구축하는 방법을 소개한다.
한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다.
이 책은 시작부터 애플리케이션 아키텍처가 무엇인지 분명히 한다. 애플리케이션 아키텍처는 애플리케이션의 기능을 정의하는 것이 아니라, 그 기능을 어떻게 개발하고 실행할 것인가를 정의하는 것이라고 말한다. 그래서 아키텍처를 변경하면 기능을 개발하고 실행하는 방법이 바뀐다. 책은 모든 아키텍처를 세 가지 핵심 패턴으로 압축한다. 커다란 진흙 덩어리, 모듈러 모놀리식, 분산 아키텍처. 이 세 가지가 책 전체의 좌표축이다.
가장 카운터인투이티브한 메시지가 진흙 덩어리에 있다. 책은 진흙 덩어리를 "아키텍처가 없는 아키텍처"라고 부른다. 모든 구성 요소가 서로 얽혀 있고 순환 참조가 발생하며, 공유 데이터는 전부 전역 변수로 사용되는 형태다. 이 정의만 보면 안티 패턴 같지만 책은 다른 결론으로 간다. "장기간 유지 보수해야 할 애플리케이션에 커다란 진흙 덩어리 아키텍처를 적용하는 것은 재앙이겠지만 단기간 개발해야 할 애플리케이션에는 커다란 진흙 덩어리가 최적의 아키텍처다." 페이팔도 1999년 CGI 한 덩어리로 시작했고, 2007년에는 도메인 로직을 담은 C++ 클래스 하나가 5,000개가 넘는 메서드와 50만 줄짜리 코드를 갖고 있었다. 거기서 출발해서 2,500개 이상의 마이크로서비스로 진화했다. 진흙 덩어리에서 출발했기 때문에 망한 게 아니라 거기서 출발해서 진화했기 때문에 살아남은 흐름이다.
책이 클라우드 네이티브를 정의하는 방식이 흥미로웠다. IBM과 마이크로소프트의 정의를 함께 가져온 다음 책의 정의를 만든다. "클라우드 네이티브는 클라우드 컴퓨팅의 강점을 최대로 활용함과 동시에 클라우드 컴퓨팅의 한계를 피하거나 보완함으로써 클라우드에서 잘 동작할 수 있는 애플리케이션을 설계하는 접근 방식이다." 강점의 활용과 한계의 보완을 동시에 요구하는 정의다. 클라우드 네이티브 아키텍처의 구조 자체는 단순하다. 애플리케이션과 서비스 두 부분으로 나뉜다. 애플리케이션은 개발 팀이 만드는 도메인 로직이고, 서비스는 클라우드 플랫폼이나 서드파티가 제공하는 백엔드 서비스다. 미들웨어를 외부 서비스 카탈로그에 위임하라는 입장이다.
마이크로서비스의 정의도 명료하다. "마이크로서비스 아키텍처는 분산 아키텍처와 클라우드 네이티브 아키텍처의 결합으로 실현한다." 분산만 있으면 SOA에 가깝고 클라우드 네이티브만 있으면 클라우드 위에 올린 모놀리식일 뿐이다. 둘 다 갖춰야 마이크로서비스다.
마이크로서비스 설계 원칙으로 책은 IDEALS를 제시한다. SOLID의 마이크로서비스판이라고 부른다. 인터페이스 분리는 클라이언트 유형마다 다른 API를 제공하라는 원칙이다. 배포 가능성은 좋은 설계와 구현만으로 마이크로서비스의 성공을 보장할 수 없으니 컨테이너화, 서버리스, 블루-그린/카나리/롤링 같은 배포 전략이 동시에 따라와야 한다는 입장이다. 이벤트 주도는 가능한 한 동기식 호출 대신 비동기 메시지로 서비스를 활성화하라는 권장이다. 일관성보다 가용성은 CAP에서 가용성을 우선하겠다는 선언이다. 느슨한 결합은 의존성 많은 마이크로서비스가 사실상 분산형 모놀리식이라는 경고로, 책은 이런 형태를 매크로서비스 또는 마이크로덩어리서비스라고 부른다. 단일 책임은 적정 크기를 모델링하는 원칙인데, 하한은 최소 1개 애그리거트, 상한은 바운디드 콘텍스트라는 두 줄로 적절한 크기에 대한 토론이 정리된다.
마지막은 모놀리식 점진적 대체에 관한 이야기다. 책은 모놀리식 대체를 두 가지 상호 보완적인 활동으로 정의한다. 기능과 컴포넌트를 버리는 것과 이전하는 것. 모든 코드를 다 옮기겠다는 욕심부터 내려놓으라는 뜻이다. 전략의 순서는 길 닦기, 작게 시작하기, 모놀리식 감싸기, 가느다란 실금 찾기, 컴포넌트 추출, 리팩터링 후 추출, 플레이백 테스트의 순서로 패턴 카탈로그로 정돈되어 있다. 길 닦기는 컨테이너화, 모니터링, 분산 추적, CI/CD 같은 인프라 준비 단계이고, 모놀리식 감싸기는 흔히 스트랭글러 파사드라고 부르는 패턴이다. 가느다란 실금 찾기는 모놀리식 안에서 분리할 수 있는 경계 지점을 찾는 단계인데, 비즈니스 기능이 코드에 잘 정의되지 않은 경우 데이터에서 시작해 코드로 거슬러 올라가라는 조언이 따라온다. 컴포넌트 추출과 리팩터링 후 추출은 큰 기능 조각을 일단 매크로 서비스로 한 덩어리 추출한 뒤, 거기서부터 더 작은 마이크로서비스로 리팩터링하는 재귀적인 프로세스를 권한다. 플레이백 테스트는 의외의 발견이었다. 원 시스템의 입력과 동작을 캡처해서 새 시스템에서 같은 입력을 재생해 결과를 비교하는 단순한 방법인데, "기존 시스템의 미묘한 버그조차 워크플로우와 UI에 고착되어 사실상 숨겨지거나 문서화되지 않은 기능이 되었을 수도 있다"는 한 문장이 핵심을 짚는다.
책의 흐름을 한 호흡으로 정리하면 이렇다. 애플리케이션 아키텍처의 세 좌표축에서 출발해, 클라우드의 강점을 활용하기 위해 클라우드 네이티브 아키텍처가 등장하고, 분산과 클라우드 네이티브가 결합한 자리에 마이크로서비스가 자리 잡으며, 그 설계는 IDEALS와 도메인 중심 모델링으로 다듬어진다. 마지막으로 이미 존재하는 모놀리식을 어떻게 이 새 좌표계로 옮길지를 점진적 대체 패턴으로 이어간다. 70개의 패턴이 한 줄로 묶이지는 않지만 각 패턴이 어디에 자리 잡는지 동선이 그려져 있다. 작업이 막힐 때마다 해당 챕터를 펼쳐서 패턴 이름과 그림만 보고 돌아가는 방식이 자리 잡혔다. 패턴 사전이라고 생각하면 이 책을 가장 잘 쓰는 방법은 그 방식이라는 생각이 든다.
한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다.