엔지니어링 원칙을 적용한 현대 소프트웨어 개발의 시작
끊임없는 변화에 견고한 아키텍처와 검증된 프로젝트 설계 방법론
현재 수많은 소프트웨어 프로젝트가 놀라운 속도로 실패하고 있다. 끊임없이 변하는 요구사항으로 인해 시스템은 감당할 수 없을 정도로 복잡해지고 있다. 역동적이고 혼란스러운 환경에서 프로젝트의 마감일, 일정, 예산은 지켜지지 않다. 이 책은 검증된 아키텍처 및 프로젝트 설계 방법론을 도입하여 이러한 문제를 극복하는 데 도움을 준다.
먼저, 밀접하게 연결된 두 가지 구성 요소인 아키텍처 설계와 프로젝트 설계를 통합한다. 이 두 요소가 합쳐져 소프트웨어 설계를 구성한다. 아키텍처 설계에서는 더 작은 구성 요소나 서비스로 분해하는 방법을 제시하여, 현재 많은 소프트웨어 아키텍트가 실패하는 영역을 해결한다. 다음으로, 아키텍처 설계에서 효과적인 프로젝트 설계를 도출하는 방법을 보여주며, 프로젝트의 기간, 비용, 위험을 정확하게 계산한다. 이를 통해 얻은 방법과 원칙은 프로젝트나 회사 규모, 기술, 플랫폼 또는 도메인과 관계없이 적용할 수 있으며 개발자, 아키텍처, 팀장, 프로젝트 리더에게 고품질의 소프트웨어를 개발하는 가장 현대적이고 체계적인 접근 방식을 제시한다.
서문
감사의 말
1장 더 메서드
‘더 메서드’란 무엇인가
- 설계 검증
- 빠듯한 일정
- 분석 마비 피하기
- 커뮤니케이션
더 메서드가 제공하지 않는 것
〈1부 시스템 설계〉
2장 분해
기능 분해 금지
- 기능 분해의 문제점
- 기능 분해 돌아보기
- 도메인 분해 피하기
- 잘못된 의도
- 테스트 가능성과 설계
- 예제: 주식 거래 시스템
변동성 기반 분해
- 분해, 유지보수, 개발
- 보편 원칙
- 변동성 기반 분해와 테스팅
- 변동성 문제
변동성 파악하기
- 변동성과 가변성
- 변동성의 축
- 요구사항을 가장한 솔루션
- 변동성 목록
- 예: 변동성 기반 거래 시스템
- 세이렌의 노래에 홀리지 않기
- 변동성과 비즈니스
- 경쟁사를 위한 설계
- 변동성과 지속성
- 연습의 중요성
3장 구조
유스케이스와 요구사항
- 필수 동작
계층형 접근법
- 서비스 활용
대표적인 계층
- 클라이언트 계층
- 비즈니스 로직 계층
- 리소스 접근 계층
- 리소스 계층
- 유틸리티 바
분류 가이드라인
- 명명 규칙
- 네 가지 질문
- 매니저 대 엔진 비율
- 주요 특징
서브시스템과 서비스
- 점진적 구축
- 마이크로서비스
개방형 아키텍처와 폐쇄형 아키텍처
- 개방형 아키텍처
- 폐쇄형 아키텍처
- 반폐쇄형(semi-closed) / 반개방형(semi-open) 아키텍처
- 규칙 완화
- 설계할 때 “해선 안 되는 것”
- 대칭 추구
4장 조합
요구사항 변경
- 변경에 대한 분노
- 핵심 설계 원칙
조합형 설계
- 코어 유스케이스
- 아키텍트의 미션
기능은 따로 없다
변경 사항에 대처하기
- 변경 사항 가두기
5장 시스템 설계 사례
시스템 개요
- 레거시 시스템
- 새로운 시스템
- 회사
- 유스케이스
반설계 노력
- 모놀리스
- 과립형 구성 요소
- 도메인 분해
비즈니스와 일치
- 비전
- 비즈니스 목표
- 사명
아키텍처
- TradeMe 용어집
- TradeMe의 변동성 영역
- 정적 아키텍처
- 운영 방식
- 워크플로 매니저
설계 검증
- 유스케이스: 기술자/계약자 추가
- 기술자 요청 유스케이스
- 기술자 매칭 유스케이스
- 기술자 할당 유스케이스
- 기술자 종료 유스케이스
- 기술자 결제 유스케이스
- 프로젝트 생성 유스케이스
- 프로젝트 종료 유스케이스
다음 단계는?
〈2부 프로젝트 설계〉
6장 동기부여
프로젝트 설계가 필요한 이유
- 프로젝트 설계와 프로젝트 상태
- 조립 설명서
- 욕구 단계
7장 프로젝트 설계 개요
성공의 기준
- 성공 보고하기
프로젝트 초기 인력 구성
- 아키텍트는 한 사람
- 코어 팀
노련한 결정
- 계획은 하나가 아닌 여러 개로
- 소프트웨어 개발 계획 검토
서비스와 개발자
- 설계와 팀 효율
- 작업 연속성
공수 추정
- 전형적인 실수들
- 추정 기법
- 전체 프로젝트 추정
- 활동 추정
크리티컬 패스 분석
- 프로젝트 네트워크
- 크리티컬 패스
- 리소스 할당
활동 스케줄링
- 인력 투입 분포
프로젝트 비용
- 프로젝트 효율
획득 가치 계획
- 대표적인 실수
- 완만한 S 커브
역할과 책임
8장 네트워크와 플로트
네트워크 다이어그램
- 노드 다이어그램
- 애로우 다이어그램
- 애로우 다이어그램 VS 노드 다이어그램
플로트
- 토탈 플로트
- 프리 플로트
- 플로트 계산
- 플로트 시각화
플로트 기반 스케줄링
- 플로트와 리스크
9장 시간과 비용
소프트웨어 프로젝트 진행 속도 높이기
스케줄 압축
- 리소스 보강
- 병렬 작업
- 병렬 작업과 비용
시간-비용 곡선
- 시간-비용 곡선 상의 점
- 이산 모델링
- 흔히 저지르는 실수 피하기
- 프로젝트 타당성
- 정규 솔루션 찾기
프로젝트 비용 요소
- 직접 비용
- 간접 비용
- 비용과 가치
- 총비용, 직접 비용, 간접 비용
- 압축과 비용 원소
- 인력 투입과 비용 요소
- 고정 비용
네트워크 압축
- 압축 흐름
10장 위험
옵션 선택
시간-위험 곡선
- 실제 시간-위험 곡선
위험 모델링
- 위험 정규화
- 위험과 플로트
- 위험과 직접 비용
- 중요도 위험
- 피보나치 위험
- 활동 위험
- 중요도 vs 활동 위험
압축과 위험
- 실행 위험
위험 압축 해제
- 압축 해제 방법
- 압축 해제 타깃
위험 메트릭
11장 실전 프로젝트 설계
미션
- 정적 아키텍처
- 콜 체인
- 활동 목록
- 네트워크 다이어그램
- 계획 가정
정규 솔루션 찾기
- 무제한 리소스 (첫 번째 반복)
- 네트워크와 리소스 문제
- 인프라스트럭처 우선 (두 번째 반복)
- 제한된 리소스
- 서브크리티컬한 상태에 빠지기 (일곱 번째 반복)
- 정규 솔루션 선택하기
네트워크 압축
- 더 나은 리소스로 압축하기
- 병렬 작업 도입하기
- 압축 반복의 끝
- 처리량 분석
효율 분석
시간 - 비용 곡선
- 시간-비용 상관관계 모델
- 죽음의 영역
계획과 위험
- 위험 압축 해제
- 시간-비용 곡선 다시 만들기
- 위험 모델링
- 위험 포함과 배제
SDP 리뷰
- 옵션 제시
12장 고급 테크닉
신의 활동
- 신의 활동 처리하기
위험 교차 지점
- 교차 지점 도출하기
압축 해제 대상 찾기
기하 위험
- 기하 중요도 위험
- 기하 피보나치 위험
- 기하 활동 위험
- 기하 위험 동작
실행 복잡도
- 순환 복잡도
- 프로젝트 타입과 복잡도
- 압축과 복잡도
대규모 프로젝트
- 복잡계와 취약성
- 네트워크의 네트워크
- 네트워크의 네트워크 설계하기
소규모 프로젝트
계층 기반 설계
- 장점과 단점
- 계층과 구성
13장 프로젝트 설계 예제
추정
- 개별 활동 추정
- 전체 프로젝트 추정
의존성과 프로젝트 네트워크
- 동작 의존성
- 동작이 아닌 의존성
- 몇 가지 의존성 뒤집기
- 확인 절차
정규 솔루션
- 네트워크 다이어그램
- 예정된 진행
- 예정 인력 분포
- 비용과 효율
- 결과 요약
압축 솔루션
- 적합한 활동 추가하기
- 리소스 할당
- 예정 진행
- 예정 인력 분포
- 비용과 효율
- 결과 요약
계층형 설계
- 계층형 설계와 위험
- 인력 분포
- 결과 요약
서브크리티컬 솔루션
- 기간, 예정 진행, 위험
- 비용과 효율
- 결과 요약
대안 비교하기
계획과 위험
- 위험 압축 해제
- 비용 다시 계산하기
SDP 리뷰 준비하기
14장 결론
프로젝트 설계 시점
- 진짜 답변
- 앞서 나가기
일반적인 가이드라인
- 아키텍처 vs 추정
- 설계 자세
- 대안
- 압축
- 계획과 위험
프로젝트 설계에 대한 설계
관점
- 서브시스템과 타임라인
핸드오프
- 주니어 핸드오프
- 시니어 핸드오프
- 시니어 개발자를 주니어 아키텍트로
실전
프로젝트 설계 보고
품질에 대하여
- 품질 관리 활동
- 품질 보장 활동
- 품질과 문화
〈부록〉
〈부록A〉 프로젝트 추적
활동 생명 주기와 상태
- 단계 종료 기준
- 단계 가중치
- 활동 상태
프로젝트 상태
- 진행 상태와 획득 가치
- 누적 공수
- 누적 간접 비용
진행 상태와 공수 추적
투영
투영과 교정 조치
- 순조롭게 진행 중
- 과소 예측
- 리소스 누수
- 과대 예측
그 밖의 다른 고려 사항
- 프로젝트의 정수
- 조금씩 범위가 달라지는 것 처리하기
- 신뢰 구축
〈부록B〉 서비스 계약 설계
이것이 바람직한 설계인가?
모듈화와 비용
- 서비스별 비용
- 통합 비용
- 최소 비용 영역
서비스와 계약
- 계약과 측면
- 서비스 설계부터 계약 설계까지
- 좋은 계약의 속성
계약 팩터링
- 설계 예제
- 하향 팩터링
- 수평 팩터링
- 상향 팩터링
계약 설계 지표
- 계약 측정하기
- 크기 지표
- 속성 피하기
- 계약 수 제한하기
- 지표 활용하기
계약 설계의 어려움
〈부록C〉 설계 표준
핵심 준수 사항
준수 사항
시스템 설계 권장 사항
프로젝트 설계 권장 사항
프로젝트 추적 권장 사항
서비스 계약 설계 권장 사항