---
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" 개요 (같은 선반)
