소프트웨어 아키텍처 The Hard Parts

Book description

『소프트웨어 아키텍처 101』의 실무편에 해당하는 후속작이다. 분산 아키텍처를 구축할 때 서비스를 나눠야 하는 경우와 합쳐야 하는 경우를 각각 세분도(granularity) 분해인과 통합인이라는 두 가지 관점에서 바라보고, 어떻게 하면 아키텍트가 객관적으로 트레이드오프를 분석해서 올바른 의사 결정을 내릴 수 있는지 이야기한다. 전작이 소프트웨어 아키텍처의 중심 철학과 다양한 아키텍처의 세계를 빠르게 훑어보는 개론서였다면, 『소프트웨어 아키텍처 The Hard Parts』는 제목에 걸맞게 실무 아키텍처링을 할 때 가장 난해한, 그러나 한번 결정되면 바꾸기 어렵고 근본적인 영향을 미치는 부분(hard part)을 진지하게 살펴본다.

Table of contents

  1. ‘베스트 프랙티스’가 없다면?
    1. 1.1 왜 ‘하드 파트’인가?
    2. 1.2 소프트웨어 아키텍처에 관한 영원불변의 조언
    3. 1.3 아키텍처에서 데이터의 중요성
    4. 1.4 아키텍처 결정 레코드
    5. 1.5 아키텍처 피트니스 함수
      1. 1.5.1 피트니스 함수 사용하기 (1/2)
      2. 1.5.1 피트니스 함수 사용하기 (2/2)
    6. 1.6 아키텍처 vs. 설계: 정의는 간단명료하게
    7. 1.7 한빛가이버 사가
      1. 1.7.1 비티케팅 워크플로
      2. 1.7.2 티케팅 워크플로
      3. 1.7.3 현재 문제점
      4. 1.7.4 한빛가이버 아키텍처 컴포넌트
      5. 1.7.5 한빛가이버 데이터 모델 (1/2)
      6. 1.7.5 한빛가이버 데이터 모델 (2/2)
  2. 아키텍처 퀀텀
    1. 2.1 아키텍처 퀀텀
      1. 2.1.1 독립적으로 배포 가능
      2. 2.1.2 높은 기능 응집도
      3. 2.1.3 높은 정적 커플링 (1/2)
      4. 2.1.3 높은 정적 커플링 (2/2)
      5. 2.1.4 동적 퀀텀 커플링
    2. 2.2 한빛가이버 사가: 퀀텀의 이해
  3. 아키텍처 모듈성
    1. 3.1 모듈화 동인
      1. 3.1.1 유지 보수성
      2. 3.1.2 시험성
      3. 3.1.3 배포성
      4. 3.1.4 확장성
      5. 3.1.5 가용성/내고장성
    2. 3.2 한빛가이버 사가: 비즈니스 케이스 만들기
  4. 아키텍처 분해
    1. 4.1 분해 가능한 코드베이스인가?
      1. 4.1.1 구심/원심 커플링
      2. 4.1.2 추상도와 불안정도
      3. 4.1.3 메인 시퀀스로부터의 거리
    2. 4.2 컴포넌트 기반 분해
    3. 4.3 전술적 분기
      1. 4.3.1 트레이드오프
    4. 4.4 한빛가이버 사가: 어떤 방식으로 분해할 것인가?
  5. 컴포넌트 기반 분해 패턴
    1. 5.1 컴포넌트 식별 및 사이징 패턴
      1. 5.1.1 패턴 설명
      2. 5.1.2 관리용 피트니스 함수
      3. 5.1.3 한빛가이버 사가: 컴포넌트 사이징
    2. 5.2 공통 도메인 컴포넌트 수집 패턴
      1. 5.2.1 패턴 설명
      2. 5.2.2 관리용 피트니스 함수
      3. 5.2.3 한빛가이버 사가: 공통 컴포넌트 수집
    3. 5.3 컴포넌트 눌러 펴기 패턴
      1. 5.3.1 패턴 설명
      2. 5.3.2 관리용 피트니스 함수
      3. 5.3.3 한빛가이버 사가: 컴포넌트 눌러 펴기
    4. 5.4 컴포넌트 디펜던시 결정 패턴
      1. 5.4.1 패턴 설명
      2. 5.4.2 관리용 피트니스 함수
      3. 5.4.3 한빛가이버 사가: 컴포넌트 디펜던시 식별
    5. 5.5 컴포넌트 도메인 생성 패턴
      1. 5.5.1 패턴 설명
      2. 5.5.2 관리용 피트니스 함수
      3. 5.5.3 한빛가이버 사가: 컴포넌트 도메인 생성
    6. 5.6 도메인 서비스 생성 패턴
      1. 5.6.1 패턴 설명
      2. 5.6.2 관리용 피트니스 함수
      3. 5.6.3 한빛가이버 사가: 도메인 서비스 생성
    7. 5.7 정리하기
  6. 운영 데이터 분리
    1. 6.1 데이터 분해인
      1. 6.1.1 데이터 분해인
      2. 6.1.2 데이터 통합인
      3. 6.1.3 한빛가이버 사가: 데이터베이스 분해 정당화
    2. 6.2 모놀리식 데이터 분해 (1/2)
    3. 6.2 모놀리식 데이터 분해 (2/2)
      1.  데이터베이스 분석과 데이터 도메인 생성
      2.  데이터 도메인에 테이블 할당
      3.  데이터 도메인에 접속하는 데이터베이스 커넥션 분리
      4.  개별 데이터베이스 서버로 스키마 이전
      5.  독립적 데이터베이스 서버로 전환
    4. 6.3 데이터베이스 타입 선택
      1. 6.3.1 관계형 데이터베이스
      2. 6.3.2 키-값 데이터베이스
      3. 6.3.3 문서형 데이터베이스
      4. 6.3.4 컬럼형 데이터베이스
      5. 6.3.5 그래프 데이터베이스
      6. 6.3.6 NewSQL 데이터베이스
      7. 6.3.7 클라우드 네이티브 데이터베이스
      8. 6.3.8 시계열 데이터베이스
    5. 6.4 한빛가이버 사가: 폴리글랏 데이터베이스 (1/2)
    6. 6.4 한빛가이버 사가: 폴리글랏 데이터베이스 (2/2)
  7. 서비스 세분도
    1. 7.1 세분도 분해인
      1. 7.1.1 서비스의 범위와 기능
      2. 7.1.2 코드 변동성
      3. 7.1.3 확장성/처리량
      4. 7.1.4 내고장성
      5. 7.1.5 보안
      6. 7.1.6 신장성
    2. 7.2 세분도 통합인
      1. 7.2.1 데이터베이스 트랜잭션
      2. 7.2.2 워크플로와 코레오그래피
      3. 7.2.3 공유 코드
      4. 7.2.4 데이터 관계
    3. 7.3 적정 균형점 찾기
    4. 7.4 한빛가이버 사가: 티켓 배정 세분도
    5. 7.5 한빛가이버 사가: 고객 등록 세분도 (1/2)
    6. 7.5 한빛가이버 사가: 고객 등록 세분도 (2/2)
  8. 재사용 패턴
    1. 8.1 코드 복제
      1. 8.1.1 어떤 경우에 사용하는가?
    2. 8.2 공유 라이브러리
      1. 8.2.1 디펜던시 관리와 변경 관리
      2. 8.2.2 버저닝 전략
      3. 8.2.3 어떤 경우에 사용하는가?
    3. 8.3 공유 서비스
      1. 8.3.1 변경 리스크
      2. 8.3.2 성능
      3. 8.3.3 확장성
      4. 8.3.4 내고장성
      5. 8.3.5 어떤 경우에 사용하는가?
    4. 8.4 사이드카와 서비스 메시
      1. 8.4.1 어떤 경우에 사용하는가?
    5. 8.5 한빛가이버 사가: 공통 인프라 로직
    6. 8.6 코드 재사용: 어떤 경우에 가치 있는가?
      1. 8.6.1 플랫폼 기반의 재사용
    7. 8.7 한빛가이버 사가: 공유 도메인 기능
  9. 데이터 오너십과 분산 트랜잭션
    1. 9.1 데이터 오너십 할당
    2. 9.2 단독 오너십
    3. 9.3 공통 오너십
    4. 9.4 공동 오너십
      1. 9.4.1 테이블 분할 기법
      2. 9.4.2 데이터 도메인 기법
      3. 9.4.3 대리자 기법
    5. 9.5 서비스 통합 기법
    6. 9.6 데이터 오너십 요약
    7. 9.7 분산 트랜잭션
    8. 9.8 최종 일관성 패턴
      1. 9.8.1 백그라운드 동기화 패턴
      2. 9.8.2 오케스트레이티드 요청 기반 패턴
      3. 9.8.3 이벤트 기반 패턴
    9. 9.9 한빛가이버 사가: 티켓 처리 관련 데이터 오너십
  10. 분산 데이터 액세스
    1. 10.1 서비스 간 통신 패턴
    2. 10.2 컬럼 스키마 복제 패턴
    3. 10.3 복제 캐싱 패턴
    4. 10.4 데이터 도메인 패턴
    5. 10.5 한빛가이버 사가: 티켓 배정 관련 데이터 액세스
  11. 분산 워크플로 관리
    1. 11.1 오케스트레이션 통신 스타일 (1/2)
    2. 11.1 오케스트레이션 통신 스타일 (2/2)
    3. 11.2 코레오그래피 통신 스타일
      1. 11.2.1 워크플로 상태 관리
    4. 11.3 오케스트레이션과 코레오그래피의 트레이드오프
      1. 11.3.1 상태 오너 및 커플링
    5. 11.4 한빛가이버 사가: 워크플로 관리
  12. 트랜잭셔널 사가
    1. 12.1 트랜잭셔널 사가 패턴
      1. 12.1.1 에픽 사가(sao) 패턴
      2. 12.1.2 폰 태그 사가(sac) 패턴
      3. 12.1.3 페어리 테일 사가(seo) 패턴
      4. 12.1.4 타임 트래블 사가(sec) 패턴
      5. 12.1.5 판타지 픽션 사가(aao) 패턴
      6. 12.1.6 호러 스토리(aac) 패턴
      7. 12.1.7 패러렐 사가(aeo) 패턴
      8. 12.1.8 앤솔로지 사가(aec) 패턴
    2. 12.2 상태 관리와 최종 일관성
      1. 12.2.1 사가 상태 기계
    3. 12.3 사가 관리 기법
    4. 12.4 한빛가이버 사가: 원자적 트랜잭션과 보상 업데이트 (1/2)
    5. 12.4 한빛가이버 사가: 원자적 트랜잭션과 보상 업데이트 (2/2)
  13. 계약
    1. 13.1 엄격한 계약 vs. 느슨한 계약
      1. 13.1.1 엄격한 계약과 느슨한 계약의 트레이드오프
      2. 13.1.2 마이크로서비스에서의 계약
    2. 13.2 스탬프 커플링
      1. 13.2.1 스탬프 커플링으로 인한 오버 커플링
      2. 13.2.2 대역폭
      3. 13.2.3 워크플로 관리를 위한 스탬프 커플링
    3. 13.3 한빛가이버 사가: 티켓 계약 관리
  14. 분석 데이터 관리
    1. 14.1 예전 접근 방법
      1. 14.1.1 데이터 웨어하우스
      2. 14.1.2 데이터 레이크
    2. 14.2 데이터 메시
      1. 14.2.1 데이터 메시란?
      2. 14.2.2 데이터 프로덕트 퀀텀
      3. 14.2.3 데이터 메시, 커플링, 아키텍처 퀀텀
      4. 14.2.4 데이터 메시는 어떤 경우에 사용하는가?
    3. 14.3 한빛가이버 사가: 데이터 메시
  15. 자신만의 트레이드오프 분석
    1. 15.1 서로 연관된 차원 확인
      1. 15.1.1 커플링
      2. 15.1.2 결합점 분석
      3. 15.1.3 트레이드오프 평가
    2. 15.2 트레이드오프 기법
      1. 15.2.1 정성적 분석 vs. 정량적 분석
      2. 15.2.2 MECE 리스트
      3. 15.2.3 ‘콘텍스트 왜곡’ 함정
      4. 15.2.4 모델과 연관된 도메인 케이스
      5. 15.2.5 차고 넘치는 증거보다 한마디 결론이 낫다
      6. 15.2.6 터무니없는 말과 에반젤리즘은 금물
    3. 15.3 한빛가이버 사가: 에필로그 (1/6)
    4. 15.3 한빛가이버 사가: 에필로그 (2/6)
    5. 15.3 한빛가이버 사가: 에필로그 (3/6)
    6. 15.3 한빛가이버 사가: 에필로그 (4/6)
    7. 15.3 한빛가이버 사가: 에필로그 (5/6)
    8. 15.3 한빛가이버 사가: 에필로그 (6/6)

Product information

  • Title: 소프트웨어 아키텍처 The Hard Parts
  • Author(s): 이일웅, 닐 포드, 마크 리처즈, 프라모드 세달라지, 세막 데그하니
  • Release date: October 2022
  • Publisher(s): Hanbit Media, Inc.
  • ISBN: 9791169210294