소프트웨어 설계 학습 로드맵
출발점: Top-Down의 한계를 인식한 후
순수 top-down 설계는 설계 공간(Design Space)을 완전히 아는 경우에만 작동한다. 현실에서는 구현해봐야 비로소 보이는 것들이 있다 — reqwest 크레이트의 존재, SAML 인증 체인, 리다이렉트 5단계 같은 것들. 이건 설계 능력 부족이 아니라 지식의 해상도(resolution) 문제다.
그래서 현실의 설계는 항상 왕복 운동이다:
대략적 설계 → 구현(Spike) → 발견 → 설계 수정 → 다시 구현
이 로드맵은 이 왕복 운동을 체계적으로 할 수 있게 해주는 자료들이다.
🥇 핵심 교재: Applying UML and Patterns — Craig Larman (3판)
이 한 권이 4개 영역(반복적 설계, 다이어그램 실무, Spike 개념, 패턴)의 70%를 커버한다.
제목에 속으면 안 된다 — UML 문법 책이 아니라, 반복적 설계 방법론을 케이스 스터디로 처음부터 끝까지 시연하는 책이다. Martin Fowler가 "OO 설계 입문서로 항상 이 책을 추천한다"고 말한 바로 그 책.
왜 이 책인가:
- 3번의 이터레이션으로 하나의 POS 시스템을 점진적으로 설계. "완벽한 설계 → 구현"이 아니라 "대략 설계 → 구현 → 발견 → 수정"의 실제 과정을 보여준다.
- 다이어그램 선택 기준을 가르친다. "시퀀스를 언제 그리고, 클래스 다이어그램은 언제 그리는가"를 상황별로 판단하는 능력.
- GRASP 패턴: "이 기능은 어떤 클래스가 담당해야 하는가?"를 판단하는 책임 할당 원칙. design-patterns과 연결되는 기초.
- Waterfall 사고 경고: 저자가 명시적으로 "waterfall 사고방식을 iterative에 끌고 오지 마라"고 경고하고, 대안을 제시한다.
- Agile과 XP를 Unified Process 안에서 가볍게 적용하는 방법도 다룬다.
단점: Java 기반. 하지만 설계 원리 자체는 언어 독립적이므로 C++ 프로젝트에 그대로 적용 가능.
🥈 영역별 보충 자료
1. Spike + 점진적 설계 (Agile/XP 실전)
"The Art of Agile Development" — James Shore (2판, 2021)
Spike를 정식 기법으로 다룬 거의 유일한 실전 서적. XP의 모든 실천법(TDD, 지속적 통합, 반복 계획)을 "왜 이렇게 하는가"부터 설명한다. 각 기법의 반대 의견과 대안까지 제시하는 점이 좋다.
핵심 챕터: Ch.9 Spike Solutions — Spike의 정의, 수행 방법, 스케줄링, 프로덕션 코드와의 분리를 30페이지로 압축.
"A spike solution, or spike, is a technical investigation. It's a small experiment to research the answer to a problem." — James Shore
보조: Kent Beck "Extreme Programming Explained" (2판) — 철학서에 가깝다. Shore가 더 실전적.
2. 다이어그램 빠른 참조
"UML Distilled" — Martin Fowler (3판)
200페이지 미만의 얇은 책. UML 다이어그램을 "이 상황에서 이걸 써라"는 식으로 실용적으로 정리. Larman이 깊이를 주고, 이 책은 빠른 참조를 준다. 프로젝트 중에 옆에 두고 보는 용도.
각 다이어그램 유형별로 "핵심 표기법 + 언제 쓰는가 + 흔한 실수"를 간결하게 다룬다.
3. 관계 대수 + DB 설계 이론
"Grokking Relational Database Design" — Qiang Hao (2024, Manning)
최신 서적. ER 다이어그램 → 정규화 → Relational_Algebra → SQL 변환 흐름을 실습 중심으로 다룬다. 프로그래밍 배경 없이도 읽을 수 있게 쓰여 있어 접근성이 좋다.
심화: C.J. Date "Database Design and Relational Theory" — 관계 대수를 SQL보다 먼저 가르치는 독특한 접근. Codd(관계형 모델 발명자) 옆에서 일한 사람이 저자. 근본적이지만 난이도 높음.
무료 온라인: A Practical Introduction to Databases — 관계 대수 챕터가 예제와 함께 잘 정리.
4. Spiral Model 원전
Barry Boehm 원 논문 (1986): A Spiral Model of Software Development and Enhancement
별도 책을 읽을 필요 없이, 이 논문 하나면 Spiral Model의 본질을 이해할 수 있다. Larman 책이 Spiral의 정신을 실전에 적용한 것이므로, 이론적 배경이 궁금할 때 읽으면 된다.
📅 읽는 순서: 프로젝트와 병행
핵심 원칙: 책을 다 읽고 시작하는 게 아니라, 프로젝트와 병행하면서 필요한 챕터를 당겨 읽는다. 그 자체가 반복적 설계의 실천이다.
Phase 1 — 지금 ~ 프로젝트 착수 (1~2주)
├─ Larman Ch.1-6: 반복적 개발, 유스케이스, 도메인 모델링
├─ 적용: Twin Project의 Level 0 시퀀스 다이어그램 그리기
└─ 산출물: 화살표 4개짜리 대략적 설계
Phase 2 — Spike 단계 (1~2주)
├─ Shore Ch.9: Spike Solutions (30페이지)
├─ 적용: llama.cpp, Qt6, MySQL Connector 스파이크 실행
└─ 산출물: 각 스파이크의 발견 사항 → 시퀀스 다이어그램 업데이트
Phase 3 — DB 설계 (1주)
├─ Grokking DB: ER → 정규화 → 관계 대수
├─ 적용: 수강신청 스키마 설계, 핵심 5개 질의 정식화
└─ 산출물: ER 다이어그램 + schema.sql + queries.sql
Phase 4 — 본격 구현 (진행 중)
├─ Larman Ch.7-25: 이터레이션 1,2,3 케이스 스터디
├─ Fowler UML Distilled: 다이어그램 문법 참조
├─ 적용: 설계→구현→수정 루프를 실제로 돌리기
└─ 산출물: 각 이터레이션의 시퀀스/클래스 다이어그램 + C++ 코드
한 줄 요약
Larman을 축으로, 나머지를 필요한 시점에 보충. 4권 전부 처음부터 읽으려 하면 top-down의 함정에 그대로 빠진다 — 프로젝트와 병행하면서 필요한 챕터를 당겨 읽는 것 자체가 반복적 설계의 실천이다.