Files
softwaredesign/wiki/sources/EOS-endnotes-context.md
minsung 18b46520b8 feat: EOS 전 챕터 Vision 이미지 분석 삽입 (fig. 1.1–11.5, E.1–E.10)
- 9개 wiki 소스 페이지에 총 69개 JPEG 이미지 Vision 분석 결과 삽입
- fig. 2.1–2.8, 3.1, 3.3–3.5: EOS-part1-motivations (Backblaze·Dropbox 설계 결함)
- fig. 4.1, 4.3, 4.5–4.6: EOS-ch4-concept-structure (개념 5요소·상태 기계)
- fig. 5.1–5.10: EOS-ch5-concept-purposes (목적 기준·미스피트 사례)
- fig. 6.1, 6.4, 6.6, 6.9: EOS-ch6-concept-composition (시너지·동기화 문제)
- fig. 7.1–7.3: EOS-ch7-concept-dependence (의존 다이어그램)
- fig. 8.1–8.5, 8.7, 8.10–8.11: EOS-ch8-concept-mapping (UI 매핑·다크 패턴)
- fig. 9.1, 9.3–9.4, 9.6–9.9, 10.1–10.3, 11.1–11.2, 11.4–11.5: EOS-part3-principles
- fig. E.1–E.5: EOS-endnotes-formalism (상태 기계·관계형 모델·Photoshop layer)
- fig. E.6–E.9: EOS-endnotes-context (Bosch·Gmail·nail clipper·Photoshop crop)
- fig. E.10: EOS-part3-principles (Apple Pages '09 부분 스타일)
- 책 표지·챕터 헤더 이미지는 스킵

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-30 17:18:35 +09:00

196 lines
12 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
title: EOS 배경 맥락 — 역사, 철학, 비교
tags: [source, EOS, context]
source: Daniel Jackson (2021), Endnotes 142, 65114
updated: 2026-04-30
---
# EOS 배경 맥락 — 역사, 철학, 비교
> EOS 엔드노트의 역사적 기원, 철학적 배경, 관련 분야와의 비교를 정리한다.
## 소프트웨어 설계 vs. 소프트웨어 공학 (Note 5, 8)
### Dijkstra의 "즐거움 문제"
Dijkstra는 두 문제를 구분했다:
- **정확성 문제(correctness problem)**: 프로그램이 명세를 만족하는가 → 수학적 형식화 가능
- **즐거움 문제(pleasantness problem)**: 명세 자체가 적절한가 → "비과학적"이라 간주
Jackson의 반박: 즐거움 문제가 오히려 더 중요하다. 이름을 "설계 문제"로 바꾸고, "구현 문제"와 대비해야 했다. Dijkstra의 분리가 소프트웨어 연구를 버그 제거에만 집중하게 만들었다.
### David Liddle의 정의
> "Software design is the act of determining the user's experience with a piece of software. It has nothing to do with how the code works inside."
설계 = 사용자 경험의 전체 명세. 코드 구조가 아닌 사용자가 경험하는 것이 핵심.
## Alloy 언어 (Note 3)
Daniel Jackson이 설계한 언어 및 분석 도구:
- 관계(relation)에 기반한 단순하고 강력한 논리
- Alloy Analyzer: SAT 솔버로 컴파일, 유한 범위 내 완전 검사 보장
- 설계 탐색 용도: 속성 검증보다 **시나리오 시뮬레이션**이 더 유용
- 최신 버전: 선형 시제 논리(LTL) 포함, 무한 모델 체킹 지원
## 개념 설계와 관련 분야 비교 (Note 14, 44)
### 기존 개념 모델링 분야와의 차이
| 구분 | 전통적 개념 모델링 | EOS 개념 설계 |
|------|------------------|--------------|
| 목적 | 현실 세계 기술(descriptive) | 소프트웨어 설계·발명(inventive) |
| 초점 | 데이터 모델 (ER 다이어그램) | 행동 중심 |
| 개념 정의 | 엔티티-관계 | 이름+목적+상태+행동+운영원칙 |
| 범위 | 전역 데이터 모델 | 개별 개념에 국소화된 미니 데이터 모델 |
### Fowler 분석 패턴과의 차이 (Note 14)
Fowler의 "분석 패턴"은 재사용 가능한 개념 모델 — EOS 개념에 가장 가까운 선행 연구. 차이: 분석 패턴은 구조 중심이고 행동을 코드 레벨로 표현. EOS 개념은 구현 독립적으로 행동을 명세.
### Domain-Driven Design과의 차이 (Note 14)
Evans의 DDD: 문제 도메인 모델을 구현 기반으로 사용.
- **Bounded context**: 다른 영역에서 다른 도메인 모델 허용
- EOS 개념 설계: 각 개념이 자체 데이터 모델을 가짐 → DDD를 더 정밀화
### Abstract Types / Objects와의 차이 (Note 48)
| | 추상 타입 | EOS 개념 |
|--|----------|---------|
| 수준 | 코드 레벨 | 설계 레벨 |
| 상호 참조 | 타입 간 연결 어려움 | 조합(composition)으로 명확히 연결 |
| 의존성 방향 | OOP에서 역전되기 쉬움 | 개념 의존 다이어그램으로 명시적 표현 |
OOP에서의 문제: `Post``Comment`를 포함하는 구조 → 의존성 역전. 개념 설계에서는 `comment``post`에 의존 (올바른 방향).
## 개념의 역사적 기원 (Note 48)
| 개념 | 발명자/기원 | 연도 |
|------|-----------|------|
| **trash** | Apple (Macintosh 팀) | ~1983 |
| **folder/directory** | Multics 프로젝트 (Bell Labs) | 1960s |
| **style** | Larry Tesler, Tim Mott (Xerox PARC, Bravo 편집기) | 1970s |
| **reservation** (레스토랑) | 19세기 대도시 레스토랑 | 1880s |
| **social security number** | 미국 사회보장청 | 1936 |
| **song** (단위 판매) | Apple iPod/iTunes 팀 | 2001 |
개념은 **발명된다** — 자연계에 개와 고양이처럼 존재하는 것이 아니라 누군가가 특정 목적을 위해 창조한 것.
## 개념의 핵심 특성 요약 (Note 48)
1. **발명적(inventive)**: 개념은 발명된다. 세계에 있는 것을 분류하는 것이 아니다.
2. **진화한다(evolving)**: 시간이 지남에 따라 설계가 개선된다. `trash`에서 `group` 개념까지.
3. **목적 지향적(purposive)**: 목적 없는 개념 = 개념이 아니다.
4. **행동 중심(behavioral)**: 행동 없이는 개념 없다. `pixel`은 개념이 아닐 수 있다.
5. **풍부한 상태(rich states)**: 상태 구조가 행동을 가능하게 한다. David Wheeler: "모든 문제는 간접 수준을 추가함으로써 해결 가능."
6. **데이터 모델 국소화**: 각 개념은 자신의 미니 데이터 모델을 갖는다.
7. **일반적(generic)**: 타입 변수로 인스턴스화 가능. `trash`는 파일도, 이메일도.
8. **독립적(freestanding)**: 다른 개념 없이 정의 가능. 가장 중요한 특성.
## 분리의 원칙 (Note 31)
Dijkstra가 1974년 명명한 "concerns의 분리":
> "어떤 측면을 고립시켜 그 자체의 일관성을 위해 깊이 연구하는 것."
**분리 ≠ 분할정복**: 분할정복은 재조합 가능한 문제를 나누는 것. 분리는 서로 다른 관심사를 독립적으로 다루는 것.
Michael Jackson: 하향식 개발은 개발자가 가장 이해가 부족할 때 (시작 시점에) 가장 결정적인 분해를 강요하기 때문에 보통 실패한다.
## 개념 재사용 플랫폼 (Note 32)
**Déjà Vu** (Santiago Perez De Rosso):
- 전스택(full-stack) 개념 재사용 플랫폼
- GUI + 백엔드 서비스 포함한 개념
- HTML 변형으로 조합 — 최소한의 프로그래밍으로 조합 가능
- 액션 동기화로 개념 연결
기존 프레임워크의 문제: 너무 작은 컴포넌트(날짜 선택기) 또는 너무 크고 경직된 플러그인.
## Latour의 기입 이론 (Note 65)
Bruno Latour의 "inscription(기입)": 기계는 이전에 수동으로 수행되던 작업을 구현한 것.
소프트웨어 개념에의 적용: 레스토랑 예약, 소셜 미디어 팔로우 등 많은 개념이 원래 인간 프로토콜로 시작해 소프트웨어에 기입된다. 이것은 은유가 아니라 **문자 그대로의 동일한 개념**이다.
## 작은 설계 결함과 더 큰 고통 (Note 89)
"작은 결함처럼 보이는 설계 문제도 개발자에게는 코드 복잡성이라는 큰 고통을 유발한다." 소프트웨어 설계 결함은 사용자에게 미묘하게 보이더라도, 그것을 구현하거나 유지하는 개발자에게는 심각한 내부 복잡성을 초래한다.
> **fig. E.6** (*트레파닝: 작은 설계 결함의 은유 — Hieronymus Bosch,* The Extraction of the Stone of Madness, ~14941516): 원형 패널화. 돌팔이 외과의가 환자 두개골에서 "광기의 돌"을 수술하는 장면 — 왼쪽 수도사는 깔때기 모자를, 오른쪽 여인은 책을 머리에 올리고 있다. Jackson의 인용: 발굴된 두개골의 트레파닝 구멍은 작아 보이지만 그것이 형성될 당시의 극심한 고통을 상기시킨다 — 설계의 작은 결함도 코드에는 엄청난 복잡성과 고통을 남긴다.
## 설계 비판 vs. 사용자 테스트 (Note 38)
**Jackson의 입장**: 경험적 평가는 과대평가되어 있다.
- 사용자 테스트의 한계: 설계 공간 탐색에 너무 비용이 크다. 매개변수화된 설계만 테스트 가능.
- **전문가 비판(critique)**: 경험과 원칙을 기반으로 설계 탐색 중 평가 — 더 비용 효율적.
- 제안: 원칙에 기반한 비판 → 사용자 테스트 순서. 한 번에 하나의 개념씩.
Google의 Douglas Bowman (첫 시각 디자이너, 2009 퇴사): "모든 결정을 데이터로만 판단하다 보면 회사가 어떤 대담한 설계 결정도 내리지 못하게 된다."
## 특정성 원칙의 보충 (Note 94-102)
### Gmail label vs. category 혼동 (Note 94)
Google이 label 개념 도움말을 작성하면서 첫 문장에 "categories"를 사용 — label과 category가 실은 중복 개념임을 공식 문서가 스스로 드러낸 비의도적 유머.
> **fig. E.7** (*Gmail 도움말 "Using labels" 화면*): "Labels help you organize your messages into categories work, family, to do, read later, jokes, recipes, any category you want. Labels do all the work that folders do, but with an added bonus: you can add more than one to a message." — label을 설명하면서 categories로 시작. label과 category가 모두 메시지 분류를 위한 중복 개념임을 구글 공식 문서가 의도치 않게 확인.
### 오버로딩의 종류
| 오버로딩 유형 | 설명 | 예 |
|------------|------|-----|
| **목적 부정(denied purpose)** | 새 목적이 원래 목적을 약화 | Facebook like → recommendation |
| **창발 목적(emergent purpose)** | 의도치 않은 목적으로 사용 | Twitter star → 읽기 목록 |
| **거짓 수렴(false convergence)** | 다른 두 개념을 하나로 합침 | Epson 용지 크기 + 급지 방향 |
| **편승(piggybacking)** | 기존 개념에 무관한 기능 추가 | Photoshop 크롭 + 리샘플링 |
**Photoshop 크롭 사례(Note 101)**: `cropping``resampling`이 편승 → CS6에서 분리. 설계 개선의 좋은 예.
> **fig. E.8** (*손톱깎이: 기능 공유(좌) vs. 기능 분리(우) — Ulrich [145]*): 좌: 일반 손톱깎이 스케치 — 단일 금속 스트립이 스프링(탄성)과 절단날(날카로운 모서리) 두 기능을 겸함. 우: Karl Ulrich가 상상한 "부품당 하나의 기능" 원칙 설계의 손톱깎이 단면도 — 스프링과 날이 분리된 복잡한 기계 구조. 결론: 기계 설계의 과부하는 소형화·비용 절감에 유리하지만, 소프트웨어에서는 이점이 없고 두 직교 개념이 단일 과부하 개념보다 이해하기 쉽다 (Note 98).
> **fig. E.9** (*Photoshop CS5 cropping 인터페이스*): 상단 툴바: Width 6 in, Height 4 in, Resolution [빈칸], pixels/inch. 벽돌 건물·나무 이미지에 크롭 핸들 표시. Resolution 필드의 존재가 핵심 — cropping 개념에 resampling 개념이 편승: 크롭 프레임 설정이 동시에 출력 해상도·치수를 지정하게 되어, 전체 이미지를 선택한 "빈 크롭"도 파일을 변경할 수 있는 반직관적 동작 발생. CS6(2012)에서 두 개념이 분리됨 (Note 101).
### 사회적 오버로딩 (Note 99)
대학 멘토 제도: 지원/조언 역할 + 승진 평가 역할 → 근본적 이해충돌.
학회 논문 심사: 피드백 제공 목적 + 채택 결정 목적 → 상충.
Kieran Egan: 교육의 세 목적(사회화, 진리 추구, 자아실현)이 근본적으로 양립 불가.
## 무결성 원칙의 보충 (Note 109-110)
### 강건한 멘탈 모델의 조건
de Kleer & Brown (1981): 사용자가 신뢰할 수 있는 멘탈 모델은 **"구조 속 기능 없음(no-function-in-structure)"** 원칙을 만족해야 한다.
= 컴포넌트 행동 설명이 다른 컴포넌트의 기능을 참조하지 않아야 한다.
이것이 개념의 독립성 원칙과 정확히 일치한다.
### 피처 상호작용과 개념 무결성 (Note 110)
통신 피처 상호작용 정의: "피처 A의 존재가 피처 B의 명세를 더 이상 유효하지 않게 만들 때."
이것이 정확히 개념 무결성 위반의 정의와 같다. 다만 개념 설계에서는 이를 허용하지 않는다.
## Parnas의 uses 관계와 개념 의존 (Note 81)
| | Parnas uses 관계 | 개념 의존 |
|--|----------------|---------|
| 정의 방식 | 코드에서 추론 (A가 B를 호출하면 의존) | 설계자가 선언 |
| 의미 | A의 올바른 실행이 B에 의존 | A를 포함하면 B도 포함해야 일관성 있음 |
| 하위 집합 | 의존에서 도출됨 | 하위 집합이 의존을 정의함 |
Parnas 방법론: "B 없이 A가 포함되는 합리적인 하위 집합이 없는 경우에만 A가 B를 사용하도록 설계하라."
## 관련 페이지
- [[EOS-endnotes-formalism]] — 개념의 수학적 형식 의미론
- [[EOS-ch4-concept-structure]] — 개념 구조 본문
- [[EOS-ch6-concept-composition]] — 개념 조합 본문
- [[EOS-ch7-concept-dependence]] — 개념 의존 본문
- [[EOS-part3-principles]] — 특정성·친숙성·무결성 원칙 본문