책소개
소프트웨어 아키텍처의 핵심 원리를 배우는 입문서!소프트웨어 아키텍처는 단순한 설계 기술이 아니라 시스템의 성공을 좌우하는 핵심 사고 방식이다. 이 책은 건축과 아키텍처의 비유에서 출발해 아키텍처 특성, 의사결정, 컴포넌트, 아키텍처 스타일까지 단계적으로 풀어내며, 복잡한 개념을 독자가 직접 이해하고 적용할 수 있도록 돕는다.레이어드 아키텍처, 모듈러 모놀리스, 마이크로서비스, 이벤트 기반 아키텍처 등 다양한 스타일을 실제 사례와 함께 비교하며, 각 방식의 장점과 한계를 균형 있게 제시한다. 또한 [난&팝], [트립이지], [고잉 그린] 같은 스토리 기반 프로젝트를 통해 독자가 실제 아키텍트로 참여하듯 학습할 수 있게 구성했다. 단순히 이론을 나열하는 것이 아니라, ‘왜 이런 결정을 내려야 하는가’를 끊임없이 묻고 답하게 함으로써 아키텍처적 사고를 훈련한다.이 책은 코드를 작성하는 개발자에서 시스템을 설계하는 아키텍트까지, 모든 소프트웨어 엔지니어가 한 단계 성장할 수 있는 지도를 제공한다. 기술을 외우는 책이 아니라, 더 나은 시스템을 만들기 위한 질문과 선택의 과정을 안내하는 책이다.
저자소개
라주는 아키텍트이자 컨설턴트, 저자, 교사로 전 세계의 컨퍼런스에서 정기적으로 초청받는 연사입니다. 그는 매사를 간단하게 유지해야 한다고 믿으며, 항상 ‘어떻게’보다는 ‘왜’를 이해하고 설명하는 접근 방식을 취합니다.
목차
Chapter 00 들어가며 | 이 책을 읽는 방법_이 책의 독자_이 책이 이렇게 된 이유_이 책의 구성_여러분의 두뇌를 정복하는 방법_일러두기 _테크니컬 리뷰어_감사의 글Chapter 01 소프트웨어 아키텍처 쉽게 이해하기 | 시작하기_건축 계획과 소프트웨어 아키텍처_소프트웨어 아키텍처 차원들_차원들의 퍼즐 맞추기_첫 번째 차원: 아키텍처 특성_두 번째 차원: 아키텍처 결정_세 번째 차원: 논리적 컴포넌트_네 번째 차원: 아키텍처 스타일_설계 관점_아키텍처 관점_아키텍처와 설계 사이_여러분이 내린 결정은 스펙트럼에서 어디에 위치하나요?_전략적 vs. 전술적_높은 수준 vs. 낮은 수준의 노력_중대한 vs. 덜 중대한 트레이드오프_모두 합하기_해냈습니다!Chapter 02 아키텍처 특성 | 네 역량을 알라_래프터 유발하기_아키텍처 특성은 무엇인가요?_아키텍처 특성 정의하기_아키텍처 특성은 비도메인 설계 고려사항을 명시한다_아키텍처 특성은 아키텍처 구조에 영향을 준다_오버엔지니어링을 막기 위해 아키텍처 특성을 제한한다_명시적과 암묵적 기능을 고려하세요_~성의 국제 동물원_프로세스 아키텍처 특성_구조적 아키텍처 특성_운영 아키텍처 특성_아키텍처 공통 특성_문제 도메인에서 아키텍처 특성 찾기_환경 인식을 통해 아키텍처 특성 도출하기_전체적인 도메인 지식을 활용하여 아키텍처 특성 도출하기_복합 아키텍처 특성_우선순위는 맥락을 따릅니다_해석에 빠지다_아키텍처 특성과 논리적 컴포넌트_도메인 고려사항과 아키텍처 특성 사이에서 균형 잡기_아키텍처 특성의 개수 제한하기Chapter 03 소프트웨어 아키텍처의 두 가지 법칙 | 모든 것은 트레이드오프다_스니커즈 앱으로 시작합니다_지금까지 무엇을 알았나요?_하위 서비스와 통신하기_트레이드오프 분석하기_트레이드오프 분석: 큐_트레이드오프 분석: 토픽_소프트웨어 아키텍처의 제1법칙_항상 트레이드오프로 돌아옵니다_아키텍처 결정하기_아키텍처를 결정하는 다른 요소는 무엇인가요?_소프트웨어 아키텍처의 제2법칙_아키텍처 결정 기록(ADR)_ADR 작성하기: 올바른 제목 선택하기_ADR 작성하기: 여러분의 상태는?_ADR 작성하기: 맥락 설정하기_ADR 작성하기: 결정 전달하기_ADR 작성하기: 결과 고려하기_ADR 작성하기: 거버넌스 보장하기_ADR 작성하기: 노트로 마무리하기_ADR의 이점_[투 매니 스니커즈]는 성공했다Chapter 04 논리적 컴포넌트 | 구성 요소_논리적 컴포넌트 다시 보기_모험적인 경매가 온라인으로 진행됩니다_논리적 아키텍처 vs. 물리적 아키텍처_논리적 아키텍처 만들기_1단계: 초기 핵심 컴포넌트 식별하기_워크플로우 접근법_액터/액션 접근법_엔티티 함정_2단계: 요구사항을 컴포넌트에 할당하기_3단계: 역할과 책임 분석하기_응집력 유지하기_4단계: 아키텍처 특성 분석하기_입찰 수집 컴포넌트_컴포넌트 결합_내부 결합_외부 결합_결합도 측정_강하게 결합된 시스템_디미터의 법칙 적용하기_균형 잡기_컴포넌트에 대한 마무리Chapter 05 아키텍처 스타일 | 분류와 철학_아키텍처 스타일은 정말 다양합니다_아키텍처 스타일의 세계_기술 관점 vs. 도메인 관점_배포 모델: 모놀리식 vs. 분산_모놀리식 배포 모델: 장점_모놀리식 배포 모델: 단점_분산 배포 모델: 장점_분산 배포 모델: 단점_이제 마무리입니다!Chapter 06 레이어드 아키텍처 | 관심사 분리하기_[난&팝]: 신생 레스토랑 요구사항 정리하기_헤드 퍼스트 디자인 패턴(개정판) 다시 읽기_MVC 레이어화_레이어링하기_레이어를 코드로 변환하기_도메인, 컴포넌트와 레이어들_레이어드 아키텍처를 선택하는 이유_레이어, 현실 세계를 만나다: 물리적 아키텍처_물리적 아키텍처의 트레이드오프_도메인 변경에 대한 마지막 주의 사항_레이어드 아키텍처의 슈퍼파워_레이어드 아키텍처의 크립토나이트_레이어드 아키텍처 등급표_마무리하기Chapter 07 모듈러 모놀리스 | 도메인 중심으로 생각하기_모듈러 모놀리스?_도메인 변경의 어려움_왜 모듈러 모놀리스인가요?_코드를 보여주세요!_모듈을 모듈러하게_모듈성을 데이터베이스까지 확장하기_조인을 주의하기_모듈러 모놀리스의 슈퍼파워_모듈러 모놀리스의 크립토나이트_모듈러 모놀리스 등급표_[난&팝]에서 피자를 배달합니다!Chapter 08 마이크로커널 아키텍처 | 맞춤형으로 제작하기_[고잉 그린]의 혜택_마이크로커널 아키텍처의 두 부분_마이크로커널-성의 스펙트럼_기기 평가 서비스 코어_캡슐화된 플러그인 vs. 분산된 플러그인_플러그인 통신_플러그인 계약_[고잉 그린]이 친환경을 실천하다_마이크로커널의 슈퍼파워_마이크로커널의 크립토나이트_마이크로커널 등급표_마무리하기Chapter 09 직접 해보기 | [트립이지] 여행 앱_여행을 더 쉽게 만들기_[트립이지] 사용자 워크플로우_아키텍처 계획하기_아키텍트의 로드맵_1단계: 아키텍처 특성 식별하기_2단계: 논리적 컴포넌트 식별하기_3단계: 아키텍처 스타일 선택하기_4단계: 여러분의 결정을 문서화하기_5단계: 아키텍처 다이어그램 그리기_옳은 답도 틀린 답도 없습니다Chapter 10 마이크로서비스 아키텍처 | 조금씩 단계별로_몸은 괜찮으세요?_마이크로서비스란?_이건 나만의 데이터입니다_마이크로서비스에서 마이크로는 얼마나 작은 걸까요?_세분화 분해 인자_왜 마이크로서비스를 더 작게 만들어야 할까요?_세분화 결합 인자_왜 마이크로서비스를 더 크게 만들어야 할까요?_모두 균형에 관한 것입니다_기능 공유하기_공유 서비스로 코드 재사용하기_공유 라이브러리로 코드 재사용하기_워크플로우 관리하기_오케스트레이션: 마이크로서비스 지휘하기_코레오그래피: 춤을 춥시다_마이크로서비스 아키텍처의 슈퍼파워_마이크로서비스 아키텍처의 크립토나이트_마이크로서비스 등급표_마무리하기Chapter 11 이벤트 기반 아키텍처 | 비동기 모험_너무 느려요_속도 높이기_[데어 나일]은 어느 때보다 빠르게 흐릅니다_이벤트란 무엇인가요?_이벤트 vs. 메시지_시작 이벤트와 파생 이벤트_누구 듣고 있나요?_비동기 통신_파이어 앤드 포겟_비동기가 최고예요_동기 방식이 최고예요_데이터베이스 구성_모놀리식 데이터베이스_도메인 분할 데이터베이스_서비스별 데이터베이스_EDA vs. 마이크로서비스_하이브리드: 이벤트 기반 마이크로서비스_이벤트 기반 아키텍처의 슈퍼파워_이벤트 기반 아키텍처의 크립토나이트_이벤트 기반 아키텍처 등급표_모두 모으기_마무리하기Chapter 12 직접 해보기 | 지식 테스트_메이크 더 그레이드를 환영합니다_학생 시험 워크플로우_아키텍처 계획하기_아키텍처의 로드맵_1단계: 아키텍처 특성 식별하기_2단계: 논리적 컴포넌트 식별하기_3단계: 아키텍처 스타일 선택하기_4단계: 여러분의 결정을 문서화하기_5단계: 아키텍처 다이어그램 그리기_옳은 답도 틀린 답도 없습니다부록 A: 미처 다루지 못한 것들 | 다루지 못한 여섯 가지 주요 주제#1 코딩 아키텍트#2 아키텍트에 대한 기대#3 아키텍처의 소프트 스킬#4 다이어그램 기법#5 지식의 깊이 vs. 넓이#6 카타로 아키텍처 연습하기카타를 수행하는 방법