---
title: "EOS Part I — 동기: 왜 개념 설계인가"
tags: [source, EOS]
source: "The Essence of Software, Daniel Jackson (2021)"
chapter: "Part I (Ch1–3)"
updated: 2026-04-30
---

# EOS Part I — 동기: 왜 개념 설계인가

## 핵심 아이디어

Part I(Ch1~3)은 왜 소프트웨어 설계의 핵심이 "개념"이어야 하는지를 동기 부여한다. Ch1은 저자의 연구 여정과 문제 의식을, Ch2는 구체적인 개념 예시와 설계 3 수준을, Ch3는 개념이 소프트웨어 설계 전반에서 수행하는 다양한 역할을 설명한다.

## Ch1 — Why I Wrote This Book

### 소프트웨어 설계의 공백

저자는 Alloy(소프트웨어 설계 언어·분석 도구) 연구자로서, 공식 명세보다 설계(design) 자체에 더 흥미를 느꼈다. 설계는 "형태(form)를 맥락(context)에 맞추는" 활동이다(Christopher Alexander).

소프트웨어 공학과 HCI(인간-컴퓨터 상호작용) 연구 모두 설계 자체보다 결함 제거·경험적 방법으로 이동했다. 결과적으로 소프트웨어 설계는 이론적 토대 없이 일화적 경험칙에 의존해 왔다.

### 명료함(Clarity)의 중요성

소프트웨어 개발 성패를 결정하는 것은 언어, 도구, 관리 방법론이 아니다. **무엇을 만들려고 하는지 명확히 아는 것**이다. 설계가 명확하면 코드도 명확하고, 문제도 명확히 진단된다.

### 개념의 기원

1960년대부터 "개념적 모델(conceptual model)"의 중요성은 인정받았다. 그러나 개념적 모델을 사용자의 멘탈 모델로 전달하는 것에만 집중했지, 그 자체를 설계 대상으로 다루지 않았다.

## Ch2 — Discovering Concepts

### 개념이란

> "A software product… is made of *concepts*, each a self-contained unit of functionality."

개념은 앱의 "분자"다. 화학 혼합물처럼 결합되지만, 각 개념의 속성과 행동은 어디에서나 동일하다.

### 예시 1: Backblaze 백업 개념의 오해

저자는 파일이 지속적으로 업로드·복원 가능하다고 가정했지만, 실제 Backblaze의 *backup* 개념은: (1) 주기적 스캔으로 변경 파일 목록 작성 → (2) 목록 기반 업로드 → (3) 스테이징 영역에서 복원 영역으로 이동의 세 단계를 거친다. 멘탈 모델과 실제 개념 간의 불일치가 혼란을 유발했다.

### 예시 2: Dropbox의 unix folder 개념

Dropbox는 이름(name)을 파일 자체의 메타데이터가 아닌, 부모 폴더의 항목(entry)에 귀속시키는 *unix folder* 개념을 사용한다. 이로 인해:
- 최상위 공유 폴더 이름 변경 → 본인에게만 변경
- 중첩 공유 폴더 이름 변경 → 모두에게 변경
- 삭제 시 동작도 이에 따라 달라짐

이것은 버그가 아니라 *개념 설계* 문제다.

### 설계의 3 수준

| 수준 | 내용 | 관심사 |
|------|------|--------|
| 물리(Physical) | 버튼, 레이아웃, 접근성 | 인간의 물리·인지 능력 |
| 언어(Linguistic) | 아이콘, 메시지, 용어 | 문화·언어적 차이 |
| 개념(Conceptual) | 행동과 상태의 본질 | 개념 구조의 설계 |

개념 수준이 가장 근원적이다. 언어·물리 수준의 문제처럼 보여도 사실 개념 수준의 결함인 경우가 많다.

### 멘탈 모델과 개념 설계

- 사용자의 멘탈 모델이 소프트웨어 실제 개념과 불일치할 때 사용성 문제가 생긴다.
- 해법은 사용자 교육이 아니라 **단순·유연·명확한 개념을 설계**하고, 사용자 인터페이스가 그 개념을 올바르게 표현하도록 하는 것이다.

## Ch3 — How Concepts Help

### 개념이 앱을 정의한다

앱을 설명하는 가장 좋은 방법은 핵심 개념을 나열하는 것이다. Facebook = *post* + *comment* + *like* + *friend*; Gmail = *email* + *label* + *conversation*; Web = *url* + *html* + *cache* + *bookmark*.

앱 간 차이도 개념으로 설명된다. 문자 메시지 앱은 *conversation* 개념을 쓰고, 이메일은 *mailbox*/*folder* 개념을 쓴다.

### 개념이 제품 차별화 요소

| 앱/서비스 | 핵심 차별화 개념 |
|-----------|-----------------|
| Apple Macintosh (1984) | *trash* — 삭제의 취소 |
| Photoshop | *layer* + *mask* — 비파괴 편집 |
| VisiCalc (스프레드시트) | *formula* + *reference* |
| Calendly | *event type* |
| World Wide Web | *url* — 전역 고유 명칭 |

### 개념이 복잡성을 드러낸다

Photoshop의 *layer*·*mask*, 브라우저의 *certificate*·*private browsing*·*page cache* 같은 복잡한 개념들이 무엇인지 알면, 파워 유저가 되기 위해 무엇을 배워야 하는지 명확해진다.

### 디지털 전환에서의 개념

디지털 전환의 핵심은 새 기술 도입이 아니라 **핵심 비즈니스 개념을 식별·통합·확장**하는 것이다. Apple의 *song* 개념처럼, 개념 하나가 전체 고객 경험을 통합할 수 있다.

### 개념이 관심사를 분리한다

*group* 하나에 모든 기능을 넣는 대신, *group*(멤버십) + *post*(메시지 작성) + *invitation*(초대) + *notification*(알림) + *moderation*(관리) 등으로 분리하면:
- 설계자가 한 번에 하나의 측면에 집중할 수 있다
- 팀원들이 병렬로 작업할 수 있다
- 각 개념을 독립적으로 재사용할 수 있다

### 개념이 안전·보안을 담보한다

보안 설계의 핵심은 *authentication*, *authorization*, *auditing* 등의 개념을 올바르게 설계하는 것이다. 예: two-factor authentication의 *capability* 개념과의 상호작용이 피싱 취약점을 만든다.

## 핵심 인용

> "Concepts characterize individual apps, app classes, and entire product families."

> "Investing in core concepts is less flashy but likely to be more effective."

> "Concepts are the essence of design for safety and security, where picking the right concepts and understanding their implications is paramount."

## 관련 개념

- [[EOS-overview]] — 전체 책 개요
- [[EOS-ch4-concept-structure]] — 개념 구조 정의 (Part II 시작)
- [[SDF-ch1-flexibility]] — SDF의 가산적 프로그래밍 철학과 비교
