소프트웨어 설계와
개발 프로세스의 핵심 원리
소프트웨어는 단순히 코드를 작성하는 기술이 아니라 복잡한 문제를 체계적으로 해결하기 위한 공학적 활동입니다. 그러나 많은 개발 학습은 언어나 프레임워크 중심으로 이루어지며, 이러한 방법이 왜 필요한지에 대한 근본적인 공학적 원리는 충분히 다루어지지 않는 경우가 많습니다. 이책은 소프트웨어의 본질과 소프트웨어 위기에서 출발하여 분할과 정복, 추상화, 모듈화와 같은 핵심 설계 원리와 다양한 개발 프로세스의 진화 과정을 체계적으로 설명합니다. 또한 아키텍처 중심 개발, 컴포넌트 기반 개발, 품질 관리와 같은 공학적 실천 방법을 통해 좋은 소프트웨어를 지속적으로 만들어내는 방법을 소개합니다. 아울러, 이론적 배경과 실제 개발 현장에서 사용되는 개념을 균형 있게 연결하여 소프트웨어 개발을 단순한 기술이 아닌 하나의 공학적 학문 분야로 이해할 수 있도록 도울 것입니다.
STEP 1 소프트웨어 공학의 본질 이해하기
소프트웨어의 특성과 복잡성, 그리고 소프트웨어 공학이 등장한 배경을 이해합니다.
STEP 2 공학적 설계 원리 익히기
분할과 정복, 추상화, 모듈화 등 좋은 소프트웨어 설계를 위한 핵심 원리를 학습합니다.
STEP 3 소프트웨어 개발 프로세스 이해하기
다양한 개발 모델과 프로세스를 이해하고 프로젝트에 적합한 개발 방법을 파악합니다.
STEP 4 현대 소프트웨어 개발 실천 방법 살펴보기
아키텍처 중심 개발과 컴포넌트 기반 개발을 통해 공학적 개발 방법을 이해합니다.
첫째마당 소프트웨어 공학의 기반(The Foundation)
1장 | 소프트웨어의 본질과 공학의 태동
1.1 소프트웨어의 4가지 본질적 특성
1.2 소프트웨어 위기(Crisis)와 공학의 탄생
1.3 소프트웨어 공학의 정의와 목표
1.4 소프트웨어 생명주기(SDLC)의 논리
1.5 좋은 소프트웨어의 품질 기준
1.6 연습문제
2장 | 공학적 설계의 핵심 원리
2.1 복잡성을 이기는 힘: 분할과 정복
2.2 추상화와 정보 은닉
2.3 모듈화의 척도 1: 결합도(Coupling)
2.4 모듈화의 척도 2: 응집도(Cohesion)
2.5 아키텍처 스타일과 패턴
2.6 연습문제
둘째마당 프로세스의 진화: 구조적 완성에서 가치 중심으로(The Logic)
3장 | 폭포수 모델의 변형과 한계
3.1 폭포수 모델(Waterfall): 순차적 개발의 정석
3.2 V-모델: 테스트 활동의 조기화
3.3 프로토타이핑 모델: 요구사항의 가시화
3.4 나선형 모델(Spiral): 위험 관리의 도입
3.5 통합 프로세스(UP)와 반복적 개발의 시작
3.6 연습문제
4장 | 컴포넌트 기반 개발(CBD)
4.1 CBD의 철학: 소프트웨어 IC와 조립
4.2 CBD 개발 절차 상세 분석: 3차원적 분할과 통합
4.3 산출물 중심 관리와 추적성(Traceability)
4.4 아키텍처 중심 개발(Architecture-Centric Development)
4.5 CBD의 한계와 붕괴 원인
4.6 연습문제
5장 | 요구공학의 이상과 현실
5.1 소프트웨어의 첫 단추: 요구사항의 결정적 중요성
5.2 요구공학(Requirements Engineering)의 탄생: 체계화된 분석의 추구
5.3 분석의 늪(Analysis Paralysis)과 실무적 중압감
5.4 통제할 수 없는 불확실성: 변화 비용 곡선(Cost of Change Curve)
5.5 장기 계획에서 빠른 순환으로의 전환
5.6 연습문제
6장 | 패러다임의 전환: 애자일 혁명
6.1 계획 중심에서 가치 중심으로
6.2 애자일가치 중심의 선언: 애자일의 4가지 가치
6.3 애자일 개발의 12가지 원칙
6.4 애자일 실천의 핵심: 경험적 프로세스 제어
6.5 연습문제
셋째마당 애자일 실무: 민첩한 프로세스와 협업(The Practice)
7장 | 스크럼(Scrum) 프레임워크 상세 가이드
7.1 스크럼의 개요와 3-5-3 구조
7.2 스크럼 팀의 역할과 책임
7.3 스크럼 이벤트 1: 계획과 실행
7.4 스크럼 이벤트 2: 점검과 개선
7.5 스크럼 산출물: 투명성의 실체
7.6 연습문제
8장 | 사용자 스토리와 가치 중심 기획
8.1 가치 중심의 요구사항 정의: 사용자 스토리
8.2 사용자 스토리 도출 프로세스
8.3 제품 백로그 관리와 우선순위 결정
8.4 애자일 추정과 계획
8.5 대규모 애자일과 확장
8.6 연습문제
9장 | 칸반(Kanban)과 린(Lean) 개발
9.1 린 소프트웨어 개발의 원칙
9.2 칸반의 시각화
9.3 WIP 제한의 과학
9.4 스크럼과 칸반의 비교
9.5 연습문제
넷째마당 구현과 품질: 엔지니어링 프랙티스(Engineering)
10장 | 익스트림 프로그래밍(XP)과 기술적 실천
10.1 XP의 필요성과 5가지 핵심 가치
10.2 짝 프로그래밍(Pair Programming)
10.3 리팩토링(Refactoring)의 기술
10.4 지속적 통합(CI)과 공동 소유권
10.5 연습문제
11장 | 테스트 주도 개발(TDD)과 자동화
11.1 TDD의 메커니즘: Red-Green-Refactor
11.2 xUnit 프레임워크와 단위 테스트
11.3 테스트 피라미드와 전략
11.4 BDD(Behavior Driven Development)
11.5 연습문제
12장 | 데브옵스와 현대적 아키텍처
12.1 데브옵스(DevOps) 문화와 CAMS
12.2 CI/CD 파이프라인 자동화
12.3 마이크로서비스 아키텍처(MSA)
12.4 클라우드 네이티브와 인프라의 코드화(IaC)
12.5 연습문제
다섯째마당 미래의 소프트웨어공학: AI와 인간(The Future)
13장 | AI 기반 소프트웨어 개발
13.1 생성형 AI와 개발 패러다임의 변화
13.2 AI 페어 프로그래밍 실무
13.3 자연어로 쓰는 요구사항 명세
13.4 테스팅과 리팩토링의 지능형 자동화
13.5 AI 시대, 소프트웨어 공학의 본질과 인간의 책임
13.6 연습문제
14장 | AI 시대, 인간 엔지니어의 핵심 역량
14.1 코더(Coder)에서 아키텍트(Architect)로
14.2 ‘Why’를 묻는 능력: 기획과 가치 판단
14.3 도메인 지식과 소통 능력
14.4 시스템 사고(Systems Thinking)
14.5 연습문제
15장 | 소프트웨어 공학의 미래와 윤리
15.1 소프트웨어 안전성과 책임
15.2 구현의 자동화: LCNC와 바이브 코딩
15.3 평생 학습하는 엔지니어
15.4 연습문제
필요한 자료를 선택하세요.
독자의견 남기기