올바른 소프트웨어 설계
저자

유발로이

저자:유발로이
IDesign의설립자인유발로이는시스템및프로젝트설계에특화된마스터소프트웨어아키텍트입니다.그는전세계수많은기업이일정과예산내에양질의소프트웨어를제공하도록도왔습니다.Microsoft에서세계최고의전문가이자업계리더중한명으로인정받아C#,WCF및관련기술에대한내부전략설계리뷰에참여했으며‘SoftwareLegend’로선정되었습니다.그는현대소프트웨어개발의거의모든측면에대해여러베스트셀러와수많은기사를발표했습니다.로이는주요국제소프트웨어개발회의에서자주연설하며전세계에서마스터클래스를진행하고수천명의전문가들에게현대소프트웨어아키텍트에게필요한기술과디자인,프로세스및기술리더로서의능동적인역할을수행하는방법을가르칩니다.

역자:남기혁
고려대학교컴퓨터학과학사,석사를졸업하고한국전자통신연구원에서책임연구원으로근무하고있다.번역서로는‘전문가를위한C++,4판,5판’(2019,2023),‘Go100가지실수패턴과솔루션’(2023),‘리팩토링2판’(2020),‘Go마스터하기’(2018,2021),‘스콧애론슨의양자컴퓨팅강의’(2021)등이있다.

목차

서문
감사의말

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>설계표준
핵심준수사항
준수사항
시스템설계권장사항
프로젝트설계권장사항
프로젝트추적권장사항
서비스계약설계권장사항

출판사 서평

여전히많은소프트웨어프로젝트가놀라운비율로실패하고있으며,출시된프로젝트중에서도결함이많은경우가많고심지어,'신뢰할수있는'소프트웨어시스템조차기대에미치지못하는경우가흔합니다.일반프로그래머들은단순한기술자로활동하며,소프트웨어아키텍트들은성공을위한충분한교육을받지못하고있습니다.그들에게제공되는정보는체계적이지않거나일관성이없거나잘못된경우가많습니다.유발로이는'올바른소프트웨어설계'에서시스템및프로젝트설계를위한구조화되고고도로공학적인접근방식을소개하여이러한문제를해결하는데도움을줍니다.

로이의소프트웨어설계방법론은두가지밀접하게연결된구성요소를통합합니다.시스템설계(일반적으로아키텍처라고함)와프로젝트설계입니다.이두가지를합쳐서소프트웨어설계라고합니다.시스템설계를위해그는시스템을더작은구성요소즉,서비스로분해하는공학적방법을제시하여현재대부분의소프트웨어아키텍트가실패하는영역을해결합니다.다음으로,시스템설계에서효과적인프로젝트설계를도출하는방법을보여주며프로젝트의기간,비용및위험을정확하게계산합니다.

'올바른소프트웨어설계'에담긴기술과아이디어는소프트웨어기술,플랫폼,프로젝트규모,회사규모또는도메인에관계없이적용가능하며,오늘날소프트웨어실패의주요원인을해결하는데특별히설계되었습니다.

추천사

프로젝트설계마스터클래스덕분에제경력을획기적으로바꿀수있었습니다.마감일과예산이제대로지켜지지않는환경에서제게유발(Juval)의강의는신의축복과같았습니다.그를통해프로젝트를제대로설계하기위한부품과도구를배웠고,그결과현대소프트웨어개발의역동적이면서혼란스럽기도한비용과일정을통제할수있게됐습니다.유발은납기초과와비용초과라는적과싸우는전쟁에서우위에설수있다면서,마치칼싸움에총을든기분을받게될거라고했습니다.엔지니어링기초와제조원칙을그대로소프트웨어에적용하는것에불과한것같지만,실제로는엄청난능력을갖추게될것입니다.
-매트로볼드(MattRobold),소프트웨어개발매니저,웨스틴고비나서비스그룹

아키텍트마스터클래스와프로젝트디자인마스터클래스에참석하기전까지,우리팀은아무리노력해도성공적인결과로이어지지않는이유를모른상태로이어지는죽음의행군을멈출방법을고민하고있었습니다.마스터클래스를통해소프트웨어개발역시다른엔지니어링분야와비슷한관점으로접근하면서보다전문가답고예측가능하며신뢰할수있는방식으로주어진일정과예산에맞게고품질소프트웨어를개발할수있게됐습니다.마스터클래스를통해매우값진지식을얻었습니다.끝없이변하는사용자요구사항으로부터견고하고바람직한아키텍처를만드는방법뿐만아니라,프로젝트를계획하고성공적으로마무리하는방법까지,모든내용을저자의프로다운실력을바탕으로설명하고있습니다.저자로부터배운모든내용이실전에서검증된만큼,소프트웨어아키텍트를지향하는사람이라면누구나막강한지식을갖출수있을것입니다.
-로센토테브(RossenTotev),소프트웨어아키텍트/프로젝트리드

놀라운경험이었습니다.소프트웨어개발을대하는내자세가완전히바뀌었습니다.그동안내가생각했던설계와코딩에대한원칙이옳다고생각했지만제대로표현할수없었는데,이제제대로말할수있습니다.소프트웨어설계뿐아니라다른종류의설계에대한생각에도큰영향을받았습니다.
-리메식(LeeMessick),리드아키텍트

유발로이에게배운뒤로제삶이달라졌습니다.다른분야에적용되던엔지니어링원칙을소프트웨어설계뿐만아니라제경력에도적용하면서단순한개발자에서진정한소프트웨어아키텍트로거듭났습니다.
-코리토거슨(KoryTorgersen),소프트웨어아키텍트

비교적경력초기에접어든당시20대후반인저는이과정을통해제삶과커리어경로를바라보는시각이달라졌다고자신있게말할수있습니다.제인생에서가장중요한계기가될것이라확신합니다.
-알렉스카르포비치(AlexKarpowich),소프트웨어아키텍트