--- title: "The Essence of Software — 전체 개요" tags: [source, EOS] source: "The Essence of Software, Daniel Jackson (2021)" chapter: overview updated: 2026-04-30 --- # The Essence of Software — 전체 개요 ## 핵심 아이디어 소프트웨어의 복잡도 근원은 "개념(concept)"의 혼재와 뒤엉킴에 있다. 개념을 명확히 분리·정의하고 그 목적(purpose)을 정확히 지정하면, 사용하기 쉽고 설계하기 좋은 소프트웨어를 만들 수 있다. 저자 Daniel Jackson은 Alloy 언어 연구에서 출발해, 소프트웨어 설계의 "개념 수준(conceptual level)"이 물리·언어 수준과 독립적으로 다루어져야 한다는 이론을 제시한다. ## 책 구조 | 파트 | 챕터 | 주제 | |------|------|------| | Part I: Motivations | Ch1–3 | 왜 개념 설계인가; 개념의 발견과 활용 | | Part II: Essentials | Ch4–8 | 개념의 구조, 목적, 조합, 의존, 매핑 | | Part III: Principles | Ch9–11 | 특정성, 친숙성, 무결성 원칙 | | Resources | Explorations & Digressions | 심화 주석·참고문헌 | ## 설계의 3 수준 저자는 소프트웨어 설계를 세 수준으로 분류한다: 1. **물리 수준(Physical level)** — 버튼 레이아웃, 제스처, 접근성 등 물리적 속성 2. **언어 수준(Linguistic level)** — 아이콘, 메시지, 용어 등 의사소통 관련 속성 3. **개념 수준(Conceptual level)** — 사용자가 상호작용하는 행동과 상태의 본질 개념 수준이 가장 중요하다. 물리·언어 수준의 문제는 종종 사실 개념 수준의 설계 결함에서 비롯된다. ## 개념(Concept)이란 소프트웨어는 개념들의 합성으로 이루어진다. 각 개념은: - **자기완결적 기능 단위** — 다른 개념과 독립적으로 이해할 수 있다 - **목적(purpose)** — 개념이 존재하는 이유 - **상태(state)** — 개념이 기억하는 정보 구조 - **행동(actions)** — 상태를 변경하는 동작들 - **운영 원칙(operational principle)** — 목적이 어떻게 달성되는지를 보여주는 전형적 사용 시나리오 예시 개념: *trash*, *style*, *reservation*, *label*, *todo*, *email*, *upvote*, *friend*, *bookmark*, *folder* 등. ## 주요 원칙 요약 | 챕터 | 원칙 | 핵심 내용 | |------|------|----------| | Ch9 | 특정성(Specificity) | 개념과 목적은 1:1 대응이어야 한다 | | Ch10 | 친숙성(Familiarity) | 기존에 알려진 개념을 재사용하라 | | Ch11 | 무결성(Integrity) | 개념 조합 시 각 개념의 명세를 위반하지 마라 | ## 책의 목표 1. 소프트웨어 설계자가 즉시 적용할 수 있는 실용적 기법 제공 2. 소프트웨어를 기능 덩어리가 아닌 개념의 체계적 조합으로 바라보는 새 관점 제공 3. 소프트웨어 설계가 지적으로 충분한 독자적 분야임을 증명 ## 핵심 인용 > "A software product—from the smallest app that runs on your phone to the largest enterprise system—is made of *concepts*, each a self-contained unit of functionality." > "Clarity is good not only for finding design flaws after the fact. It is also the key to good design in the first place." > "The real problem runs deeper. It's in the very essence of how files and folders are named… This is what I call a *conceptual* design issue." ## 관련 개념 - [[EOS-part1-motivations]] — Part I: 동기 챕터들 - [[EOS-ch4-concept-structure]] — 개념의 구조 정의 - [[EOS-ch5-concept-purposes]] — 개념의 목적 - [[EOS-ch6-concept-composition]] — 개념 조합 - [[EOS-ch7-concept-dependence]] — 개념 의존 - [[EOS-ch8-concept-mapping]] — 개념 매핑 - [[EOS-part3-principles]] — Part III: 원칙들 - [[SDF-overview]] — "Software Design for Flexibility" 개요 (같은 선반)