--- title: "EOS Part III — 개념 설계 원칙: 특정성·친숙성·무결성" tags: [source, EOS] source: "The Essence of Software, Daniel Jackson (2021)" chapter: "Part III (Ch9–11)" updated: 2026-04-30 --- # EOS Part III — 개념 설계 원칙: 특정성·친숙성·무결성 ## 핵심 아이디어 Part III(Ch9~11)는 좋은 개념 설계를 위한 세 가지 핵심 원칙을 제시한다. **특정성(Specificity)**: 개념과 목적은 1:1로 대응해야 한다. **친숙성(Familiarity)**: 새 개념보다 기존 친숙한 개념을 재사용하라. **무결성(Integrity)**: 개념 조합 시 각 개념의 명세가 훼손되지 않아야 한다. 이 세 원칙의 그림 요약은 Ch11 마지막의 Fig.11.5에 도식화돼 있다. --- ## Ch9 — 개념 특정성(Concept Specificity) ### 원칙 개념과 목적은 **1:1 대응**이어야 한다: - 모든 개념에 정확히 하나의 목적이 있어야 한다 - 모든 목적에 정확히 하나의 개념이 대응해야 한다 이 원칙은 네 가지 위반 유형을 낳는다: 목적 없는 개념, 개념 없는 목적, 중복 개념, 과부하 개념. ### 목적 없는 개념(Concepts without purposes) 내부 구현 메커니즘이 사용자에게 노출될 때 발생한다(예: *editor buffer*). 이미 Ch5에서 다루었으므로 Ch9에서는 간략히 언급. ### 개념 없는 목적(Purposes without concepts) 명백히 필요하지만 구현되지 않은 개념들: - **Email *correspondent* 개념 부재**: 발신자를 고유하게 식별하는 개념이 없어 Apple Mail에서 동일인을 여러 이름으로 검색해야 함. 오픈 이메일 시스템에서 구현이 어렵다는 기술적 제약이 있다. - **백업의 삭제 경고 개념 부재**: 대부분의 백업 유틸리티는 원본 기기에서 삭제된 파일이 30일 후 클라우드에서도 삭제된다. 의도치 않은 삭제를 탐지·경고하는 개념이 없다. - **PowerPoint의 *style* 개념 부재**: Keynote는 최근 추가했지만 PowerPoint는 여전히 없어 일관된 서식 유지가 어렵다. - **Squarespace의 *template* 개념 퇴화**: 버전 7.1에서 템플릿 전환 기능을 제거해, 개념의 핵심 목적(콘텐츠와 시각 설계 분리)이 훼손됨. ### 중복 개념(Redundant concepts) 두 개 이상의 개념이 동일한 목적을 서비스할 때. **Gmail *category* vs. *label*** 중복: - *category*: 받은 편지함을 Primary/Social/Promotions 등으로 자동 분류 - *label*: 이미 메시지 분류를 담당하는 기존 개념. 시스템 레이블(*sent*, *trash*)로도 자동 분류가 가능했다 - 결과: 두 개념 간 임의적 제약(카테고리만 탭 할당 가능, 레이블만 받은 편지함 외 분류 가능 등)으로 사용자 혼란 **Zoom *broadcast* vs. *chat*** 중복: - *chat*: 참가자 간 메시지 교환 - *broadcast*: 호스트가 전체 참가자(브레이크아웃 룸 포함)에게 메시지 전송 - 두 개념이 같은 목적인데 서로 다른 기능(지속성, 클릭 가능한 링크, 복사 불가 등) 차이가 임의적 **Apple Mail *filter* vs. *rule*** 중복: - *filter*: 표시할 메시지 부분집합 정의 - *rule*: 조건에 맞는 메시지에 액션 적용 - 공통 목적(메시지 필터링)인데 기능이 불완전하게 겹침. Gmail은 이를 단일 개념으로 통합. ### 과부하 개념(Overloaded concepts) 하나의 개념이 여러 목적을 가질 때. 4가지 원인: | 원인 | 설명 | 사례 | |------|------|------| | **False convergence** | 두 목적이 하나라고 착각 | Facebook *friend* = 필터링(봐야 할 것) + 접근 제어(봐도 될 것) | | **Denied purpose** | 설계자가 사용자의 목적을 무시 | Twitter *favorite* = 승인 표시 + 저장(사용자가 원했지만 무시됨) | | **Emergent purpose** | 시간이 지나며 새 목적이 생김 | 이메일 *subject line* = 요약 → listserv 출처 표시 → 대화 그룹화 | | **Piggybacking** | 기존 개념에 새 목적 얹기 | Epson 프린터 드라이버: *paper size* 개념에 *paper feed* 붙이기 | ### Facebook *like* 개념 분석 Facebook *like*는 세 목적을 동시에 가진다: 1. **감정 반응 전달** (저자, 친구에게) 2. **뉴스피드 큐레이션** (사용자 자신에게) 3. **광고 프로파일링** (Facebook과 광고주에게) 일관성 테스트를 통한 복합 목적 판별: - **재표현 가능성**: "게시물에 반응하기"로 통합하기 어려움 - **공통 이해관계자**: 각 부분이 다른 집단에 혜택 - **공통 미션**: 각 부분의 미션이 다름 (관계 구축 / 콘텐츠 참여 / 광고 수익) - **비충돌성**: "화남(angry)" 반응이 좋아요로 해석되는 모순 **해결책**: 세 개념으로 분리 — *reaction* + *recommendation* + *profiling* --- ## Ch10 — 개념 친숙성(Concept Familiarity) ### 원칙 기존에 알려진 개념이 목적을 충족하면, 새 개념을 발명하지 마라. 친숙한 개념을 사용하면: - 사용자가 이미 개념을 알기 때문에 배우는 비용이 없다 - 기존 개념의 검증된 설계 지식을 활용할 수 있다 - 미스피트 가능성이 줄어든다 ### 성공적 재사용: Twitter *follower* Twitter는 *follower* 개념을 소개하면서 이미 알려진 *subscription* 개념임을 명시한다: "Following someone means you've chosen to **subscribe** to their Twitter updates." — 운영 원칙을 직접 제공하며, 기존 개념과의 연결로 학습 부담 제거. ### 재발명의 실패: PowerPoint *section* vs. Keynote *slide group* 같은 목적(슬라이드 그룹화)을 위한 두 설계 비교: | 측면 | Keynote *slide group* | PowerPoint *section* | |------|----------------------|----------------------| | 기반 개념 | *outline tree* (친숙) | 신규 발명 (생소) | | 중첩 | 6단계까지 가능 | 불가능 | | 생성 방법 | 슬라이드를 오른쪽으로 드래그 | 복잡한 메뉴, 예측 불가 결과 | | 행동 예측성 | 직관적, 예측 가능 | 추가 시 범위 외 슬라이드가 자동 생성되는 등 예측 불가 | Keynote가 더 효과적인 이유: 처음부터 새로 만든 것이 아니라 친숙한 *outline tree* 개념을 재사용했기 때문. ### 확장이 친숙성을 깨뜨린 경우: Lightroom 내보내기 프리셋 *preset* 개념은 반복 명령의 파라미터를 저장하는 친숙한 개념이다. Adobe Lightroom의 내보내기 다이얼로그는 여기에 "여러 프리셋 체크로 복수 내보내기" 기능을 추가했다. 결과: 프리셋 이름 클릭과 체크박스 클릭이 다른 동작을 함 → 사용자 혼란. 해법: *action* 개념처럼 별도의 "명령 시퀀스" 개념을 분리했어야 했다. ### 개념 인스턴스는 표준 동작을 따라야 한다 친숙한 개념의 인스턴스라면, 표준 동작에서 벗어날 때는 명확한 이유가 있어야 하고 그 차이를 사용자에게 분명히 알려야 한다. **Apple Contacts 사례**: 왕세자가 어머니를 "Mummy"로 저장 → 이메일 수신자 주소에 "Mummy"가 포함돼 전달됨. *nickname* 개념처럼 비공개로 동작할 것이라는 기대와 달리, Contacts는 *contact* 개념으로 모든 정보를 공유한다. 개념 인스턴스의 동작이 기대와 다를 때 생기는 혼란. --- ## Ch11 — 개념 무결성(Concept Integrity) ### 원칙 개념들이 조합될 때, **각 개념의 명세(specification)가 위반되지 않아야 한다**. 동기화는 개념의 기존 행동을 제거할 수는 있지만, 개념 명세에 위배되는 새로운 행동을 추가해서는 안 된다. ### 무결성 위반이란 동기화가 아닌 방식으로 개념 간 상호작용이 발생해, 한 개념의 행동이 그 개념의 명세와 불일치하는 현상. ### 명백한 위반: 복수심에 찬 식당 주인 *reservation* + *review* 조합에서: - 식당 주인이 나쁜 리뷰를 남긴 고객의 예약을 cancel 없이 무효화 → *reservation* 개념의 운영 원칙("예약 후 취소 없으면 자리 보장") 위반 → 무결성 위반 반면, 나쁜 리뷰 시 cancel 액션을 자동 실행하도록 동기화하는 것은 비윤리적이지만 무결성 위반은 아니다. *reservation* 명세 안에 있는 cancel 액션을 트리거한 것이기 때문. ### 미묘한 위반: 폰트 서식 초기 *format toggle* + *typeface* 조합은 작동했다: 이탤릭 적용 시 이탤릭 폰트 파일로 전환, 볼드 적용 시 볼드-이탤릭 파일로 전환 (toggle 명세 유지). 전문 폰트 등장 이후 문제: Helvetica Light에 볼드를 두 번 적용해도 Light로 돌아오지 않고 Regular가 됨 → *format toggle*의 "두 번 적용하면 원래 상태로 복귀" 운영 원칙 위반. - **Apple TextEdit**: 위반 그대로 - **Apple Pages**: 숨겨진 매직으로 복귀 동작 구현 → 다른 문제 유발 - **Adobe InDesign**: 문자 스타일이 특정 폰트 패밀리에만 적용되는 비표준 동작 이 문제는 근본적으로 해결되지 않았다. *format toggle* 개념과 더 정교해진 타이포그래피 개념들은 원천적으로 조화가 어렵다. ### 중대한 위반: Google Drive 동기화 *synchronization* 개념의 운영 원칙: "한 컬렉션의 변경이 다른 컬렉션에 전파됨. 두 장소의 아이템 복사본은 동일해야 함." Google Drive는 `.gdoc` 같은 Google 앱 파일을 로컬 디스크에 저장할 때, **실제 파일 데이터가 아닌 클라우드 링크를 저장**한다. 사용자가 로컬 폴더에서 파일을 이동하면: 1. Google Drive 동기화가 클라우드에서도 파일을 삭제 2. 사용자는 로컬 디스크의 파일(사실 링크)을 열려고 하지만 클라우드 파일이 이미 없어서 오류 이것은 *synchronization* 개념과 *cloud app* 개념(문서가 링크로 접근)의 조합이 *synchronization* 명세("복사본이 동일해야 함")를 위반한 무결성 위반이다. > "I lost years of work and personal memories that I saved as Google Docs files because of a poor user interface." (피해 사용자의 증언) 기술적으로 수정 가능한 문제이나 Google이 아직 우선순위를 두지 않고 있다. ### 세 원칙의 그림 요약 (Fig.11.5) - 목적과 개념 사이의 선: 개념이 목적을 충족 - 점선: 다른 개념의 간섭으로 충족 불가 (무결성 위반) - 개념 간 선: 조합(composition) - 점선 박스: 앱 --- ## 핵심 인용 > "The specificity principle says that concepts should be one-to-one with purposes. This simple rule has some profound implications for concept design." > "A good designer knows not only how to invent new concepts, but also when not to invent at all." > "When concepts are composed to form an application, they may be synchronized… This synchronization may eliminate certain behaviors of a concept, but can never add *new* behaviors inconsistent with the concept specification." ## 관련 개념 - [[EOS-ch4-concept-structure]] — 목적(purpose)과 운영 원칙의 정의 - [[EOS-ch5-concept-purposes]] — 좋은 목적의 기준 - [[EOS-ch6-concept-composition]] — 동기화 메커니즘 (무결성 원칙의 전제) - [[EOS-ch7-concept-dependence]] — 의존 다이어그램과 최소 제품 선택 - [[EOS-ch8-concept-mapping]] — 매핑과 친숙성의 관계 - [[EOS-overview]] — 전체 개요