Files
softwaredesign/wiki/sources/EOS-ch5-concept-purposes.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

116 lines
13 KiB
Markdown
Raw 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 Ch5 — 개념의 목적"
tags: [source, EOS]
source: "The Essence of Software, Daniel Jackson (2021)"
chapter: "Ch5 Concept Purposes"
updated: 2026-04-30
---
# EOS Ch5 — 개념의 목적
## 핵심 아이디어
모든 개념에는 명확한 목적(purpose)이 있어야 한다. 목적은 개념의 설계를 정당화하고, 사용자가 개념을 배울 수 있게 하며, 개념이 제대로 동작하는지 평가하는 기준이 된다. 목적이 불명확하거나 없거나 사용자에게 숨겨진 경우, 개념은 혼란·오용·악용의 원인이 된다. "미스피트(misfit)"는 개념이 맥락에서 목적을 충족하지 못하는 현상이다.
## 좋은 목적의 기준 4가지
| 기준 | 설명 |
|------|------|
| **Cogent (명확)** | 사용자의 이해 가능한 필요를 명확히 표현해야 한다 |
| **Need-focused (필요 중심)** | 행동 자체가 아닌 사용자의 필요를 표현해야 한다 |
| **Specific (구체적)** | 다른 개념과 구별될 만큼 구체적이어야 한다 |
| **Evaluable (평가 가능)** | 운영 원칙이 이 목적을 충족하는지 판단 가능해야 한다 |
**나쁜 예**: bookmark의 목적 = "페이지를 저장하다" (행동 반복)
**좋은 예**: bookmark의 목적 = "나중에 페이지를 쉽게 재방문하기 위해"
## 목적이 설계 퍼즐을 해결한다: 통화 전환
*call forwarding* 개념 설계 문제: A→B, B→C로 전환 설정 시 A에 온 전화는 B에 가는가, C에 가는가?
목적을 분리하면 두 개의 다른 개념임이 드러난다:
- **delegate forwarding**: "다른 사람에게 전화를 위임한다" — A→B→C로 두 단계 전환 (연쇄 적용)
- **follow-me forwarding**: "내가 다른 장소로 이동했다" — A에서 B 위치로만 전환 (단일 전환)
> **fig. 5.1** (*Call forwarding: a design puzzle (top) and two solutions (below). If A is forwarded to B, and B is forwarded to C, does a call to A get forwarded to B or to C?*): 위 다이어그램은 발신자 → A → B → C 연쇄 전환을 보여주며, A에 온 전화가 B로 가는지 C로 가는지의 설계 퍼즐을 제시한다. 가운데 "delegate forwarding" 다이어그램은 발신자가 A를 건너뛰고 C까지 직접 연결되는 2단계 전환을 보여준다. 아래 "follow-me forwarding" 다이어그램은 발신자가 A를 건너뛰고 B에만 연결되는 1단계 전환을 보여준다. 두 개념의 목적 차이(위임 vs. 위치 이동)가 서로 다른 전환 행동을 정당화함을 시각화한다.
하나의 개념에 두 목적을 섞으면 불합리한 동작이 나온다.
## 목적 없는 개념
### 수도꼭지 비유
구식 혼합 수도꼭지(온수·냉수 별도 손잡이): 각 손잡이에 명확한 목적이 없다. 사용자가 원하는 것은 온도와 수량의 조절인데, 두 손잡이는 그 필요에 직접 대응하지 않는다.
신식 단일 손잡이: 회전 = 온도, 상하 = 수량. 목적과 제어가 1:1 대응한다.
> **fig. 5.2** (*A physical analogy: do faucet controls have purposes?*): 왼쪽은 온수·냉수 두 개의 십자형 손잡이가 달린 구식 혼합 수도꼭지, 오른쪽은 단일 레버 손잡이가 달린 신식 수도꼭지. 구식의 각 손잡이는 "온도"나 "수량"이라는 사용자 목적에 직접 대응하지 않지만, 신식의 단일 레버는 회전(온도)과 상하(수량)로 사용자 목적과 1:1 대응한다. 목적 없는 개념(구식 핸들)이 사용성 문제를 일으키는 물리적 유비로 사용된다.
### 에디터 버퍼
*editor buffer* 개념: 메모리에 텍스트를 유지하다가 저장 명령으로 디스크에 씀. 이 개념의 목적은 사용자가 아닌 구현의 필요에서 비롯됐다. Apple은 OS X Lion(2011)에서 이 개념을 제거했다. "저장"은 이제 파일에 이름을 붙이는 것이 됐고, "다른 이름으로 저장"도 사라졌다.
> **fig. 5.3** (*Apple file menu: the "save as" action in the old menu (left) reflected the buffer concept, no longer present in the new menu (right).*): 왼쪽은 구 Apple File 메뉴로 New, Open, Save, Save As, Rename, Move To, Revert To 등의 항목이 나열돼 있다. 오른쪽은 새 File 메뉴로 "Save As…"가 사라지고 Close, Save, Duplicate, Rename, Move To, Revert To로 대체됐다. "Save As"의 제거가 *editor buffer* 개념의 소멸을 반영하며, 이제 파일 복사는 "Duplicate"(파일을 복제)로 대체됨을 보여준다.
**원칙**: 개념은 내부 구현 메커니즘이 아닌 사용자 필요에서 비롯되어야 한다.
## 목적이 불명확한 개념: Twitter의 favorite
Twitter의 *favorite* 개념 문제: 사용자들이 개념을 "나중에 볼 트윗 저장"으로 잘못 이해했다. 실제 목적은 "공개적으로 승인 표시"(like/upvote에 해당). 2018년 Twitter는:
- *favorite* → *like*로 이름 변경 (목적과 일치)
- *bookmark* 개념 신규 도입 (사적 저장 목적)
> **fig. 5.4** (*An unflattering tweet unintentionally endorsed due to a misunderstanding over the purpose of Twitter's favorite concept.*): Andy Ostroy(@AndyOstroy)가 트럼프와 영부인의 관계를 조롱한 트윗 스크린샷으로, 하트 8,221개와 2017년 5월 2일 날짜가 표시돼 있다. 이 트윗에 MELANIA TRUMP가 "liked your Tweet" 알림을 받은 화면이 오른쪽(fig. 5.4의 두 번째 이미지)에 표시된다. 영부인이 *favorite*(하트 클릭)의 목적이 공개 승인 표시임을 인지하지 못하고 "저장"으로 오해해 발생한 실수로, 개념 목적 불명확성의 실제 파급 사례다.
> **fig. 5.5** (*Twitter's response to problems with the "favorite" concept: a new "bookmark" concept, accessible through the share menu (on the right), and the original concept, renamed "like," still represented by a heart icon (on the left).*): 왼쪽은 The Boston Globe 트윗에 하트(좋아요) 94개가 표시된 일반 트윗 화면, 오른쪽은 공유 버튼을 누르면 나타나는 드롭다운 메뉴로 "Send via Direct Message", "Add Tweet to Bookmarks", "Copy link to Tweet", "Share Tweet via…" 항목이 보인다. *favorite* 개념의 목적 혼란을 해결하기 위해 Twitter가 두 개념으로 분리한 결과 — 공개 승인은 *like*(하트), 사적 저장은 *bookmark*(공유 메뉴 내)로 명확히 구분됐다.
## 기만적 목적: Nanny Scam
*available funds* 개념과 *cleared check* 개념이 혼동됨. 은행 앱이 수표 처리 전에 일부 금액을 "사용 가능"으로 표시하는 것은 의회 법령에 따른 것인데, 사용자들은 이를 "수표가 청산됐다"고 오해한다. 사기꾼들은 이 개념 오해를 악용해 먼저 "수표 받기" → "초과분 반환 요청" → 수표 부도로 피해를 입힌다.
## 분명한 목적을 숨기는 설계들
| 앱/개념 | 표명된 목적 | 실제 목적 |
|---------|-----------|-----------|
| Facebook *notification* | 사용자에게 알림 | 사용자 참여(engagement) 증가 |
| Facebook *tag* | 게시물 검색 편의 | 소셜 그래프 확장 |
| Quora 로그인 강제 | "커뮤니티 기여" | 사용자 데이터 수집·광고 타겟팅 |
| Direct flight 개념 | 편의성 | 예약 시스템 검색 우선 노출 |
> **fig. 5.6** (*Image size dialog in Photoshop. If you check the resample box (top left), and change the resolution from 300 to 600, the pixel dimensions double (bottom left). If you change the resolution with the resample box unchecked (top right), the pixel dimensions stay the same but the width and height are halved (bottom right).*): 4개의 Photoshop Image Size 다이얼로그 스크린샷. 왼쪽 상단(Resample 체크됨): 6000×4000px, 20인치, 300 ppi. 왼쪽 하단(해상도를 600으로 변경 후): 12000×8000px로 픽셀 수가 두 배로 증가. 오른쪽 상단(Resample 체크 해제): 동일한 6000×4000px, 300 ppi. 오른쪽 하단(해상도를 600으로 변경 후): 픽셀 수는 그대로지만 인쇄 크기가 10×6.7인치로 절반. Resample 유무에 따라 해상도 변경의 의미가 달라지는 *image size* 개념의 복잡성을 4분할 비교로 시각화한다.
> **fig. 5.7** (*The tagging concept in Facebook: no mention of why you should do this.*): Facebook의 "Who Is in These Photos?" 화면으로, "To tag your friends, review the suggested names and click Save Tags…" 안내문 아래 두 사람의 얼굴 사진과 "Who is this?" 텍스트 박스가 표시돼 있다. 태그를 *왜* 해야 하는지에 대한 설명이 전혀 없다 — "If someone doesn't like a photo, they can untag themselves" 같은 단서는 있지만 태그의 목적(소셜 그래프 확장)은 숨겨져 있다. 기만적 목적의 전형적 예시다.
> **fig. 5.8** (*Quora's disingenuous explanation for why reading posts requires sign-in.*): Quora 로그인 화면으로, "Continue with Google"과 "Continue with Facebook" 버튼 아래 "Why do I need to sign in?" 섹션에 "Quora is a knowledge-sharing community that depends on everyone being able to pitch in when they know something."이라는 설명이 표시돼 있다. 실제 목적(사용자 데이터 수집·광고 타겟팅)을 숨기고 커뮤니티 기여라는 이타적 이유를 내세우는 기만적 목적 표현의 사례다.
> **fig. 5.9** (*A flight reservation app showing non-stop and direct options: note the parenthetic explanation of the direct flight concept next to the checkbox at the bottom left.*): Southwest Airlines 항공편 검색 결과 화면(Boston → Chicago, 2016년 2월 26일). 하단 "Filter My Results" 영역에 "Nonstop"과 "Direct (No plane change, with stops)" 체크박스가 나란히 있다. *Direct flight* 개념에 "(No plane change, with stops)"라는 괄호 설명이 붙어 있어, 환승 없이 논스톱이라는 사용자의 잘못된 기대를 바로잡는다. 기만적 목적이 있는 개념에 대해 UI에서 명시적 설명을 추가해 오해를 방지하는 사례다.
## 미스피트(Misfits): 목적이 실현되지 않을 때
소프트웨어 설계는 "형태(form)"를 "맥락(context)"에 맞추는 것이다. 미스피트는 이 맞춤이 실패하는 지점이다. 미스피트는 예측하기 어렵다:
1. **설계 결함으로 인한 미스피트**: PLGR GPS 기기 — 배터리 교체 후 재부팅 시 좌표가 기기 자신의 위치로 리셋됨 → 오폭 사고. *battery* 개념과 *target* 개념의 상호작용을 설계 시 고려했다면 방지 가능했다.
> **fig. 5.10** (*A GPS receiver (left) similar to the one that caused the accident in Afghanistan in which the operator unwittingly set the target of a bombing run to his own position, and the warning messages (right) that are now displayed.*): 왼쪽은 DAGR GPS 수신기 실물 사진으로, 현재 위치(MGRS 좌표), 고도, 속도, 날짜 등이 표시된 도트 매트릭스 화면과 F1/F2/F3, PWR/QUIT, BAT/MENU 등의 버튼이 보인다. 오른쪽 상단에는 "DANGER! TARGET POSITION SAME AS YOUR POSITION! RE-CHECK!" 경고, 하단에는 "WARNING! TARGET IS 123.44m FROM YOU!" 경고가 표시돼 있다. 배터리 교체 후 목표 좌표가 자신의 위치로 리셋되는 *battery*·*target* 개념 상호작용 결함을 사후 경고 메시지로 보완한 것을 보여주는 사례다.
2. **맥락 변화로 인한 미스피트**: 팬데믹으로 화상 회의가 일반화되자, *slideshow* 개념의 전체 화면 모드가 화상 회의 앱의 패널을 가리는 문제 발생. Apple Keynote는 "창 모드로 재생" 옵션 추가로 해결.
3. **구버전에서 작동했던 것이 다시 안 됨**: Apple Numbers의 *range* 개념 — 구버전은 범위 마지막 행 아래에 행 추가 시 범위에 포함됐지만, 새 버전에서는 포함되지 않아 실무에 큰 불편. Microsoft Excel도 동일한 결함.
**교훈**: 개념 카탈로그에 설계 통찰을 기록해야 버전 업데이트 시 지식이 유실되지 않는다.
## 핵심 인용
> "Purposes matter in all aspects of life because they help us set direction, explain ourselves to others, and reach consensus in collaborations."
> "In software especially, with its capacity for boundless complexity, it's easy to get mired in details and lose track of the big picture. Thinking about purposes helps you draw back and regain your bearings."
> "Concepts, unlike internal mechanisms, are always user-facing, and must have purposes that make sense not only to the programmer but also to the user."
## 관련 개념
- [[EOS-ch4-concept-structure]] — 개념 구조 (purpose가 5요소 중 하나)
- [[EOS-part3-principles]] — Ch9 특정성: 목적과 개념의 1:1 대응
- [[EOS-ch6-concept-composition]] — 목적 단위로 개념을 분리하면 조합이 쉬워짐
- [[EOS-overview]] — 전체 개요