---
title: "EOS Ch8 — 개념의 매핑"
tags: [source, EOS]
source: "The Essence of Software, Daniel Jackson (2021)"
chapter: "Ch8 Concept Mapping"
updated: 2026-04-30
---

# EOS Ch8 — 개념의 매핑

## 핵심 아이디어

개념은 사용자 인터페이스의 뒤에서 실행된다. UI 설계는 개념의 행동과 상태를 버튼·뷰 등 물질적 형태로 연결하는 **매핑(mapping)** 설계다. 개념 자체가 단순하더라도 매핑이 잘못되면 사용하기 어렵고, 반대로 복잡한 개념도 훌륭한 매핑으로 이해하기 쉬워진다. 또한 의도적 또는 무의도적 매핑 설계 결함이 다크 패턴을 낳는다.

## 매핑이란

UI 설계자는 다음을 결정한다:
- 개념의 **행동(action)** → 사용자의 제스처(버튼 클릭, 드래그 등)
- 개념의 **상태(state)** → 화면에 표시되는 뷰

매핑 설계는 개념 설계와 독립적으로 이루어질 수 있어야 한다. 먼저 개념을 설계하고, 그다음 매핑을 설계한다.

## 단순한 개념도 잘못된 매핑으로 어려워진다

**Oracle Java 설치 다이얼로그 예시**: "Install"과 "Remove" 두 버튼이 있는 다이얼로그. "Remove"가 기본 선택으로 강조돼 있어 업그레이드하러 온 사용자가 혼란에 빠진다. *install* 개념의 두 운영 원칙(설치 vs. 제거)을 별도 워크플로로 분리했다면 명확했을 것이다.

**개선 방향**:
- 설치와 제거를 별도 탭이나 흐름으로 분리
- "Remove"보다 "Uninstall"이 의미를 더 정확히 전달
- 업그레이드 프롬프트 후 실행했으므로 설치가 기본값이어야 함

## 복잡한 개념은 UI에 설명을 내장해야 한다

**Backblaze 백업 메시지**: "You are backed up as of: Today, 1:05 pm"이라는 메시지는 오해를 낳는다. 더 나은 표현: "Last backup: Today, 1:05pm — This backup included all files saved prior to the scan that began at 12:48pm."

Apple의 "Do Not Disturb" 개념도 "repeated calls" 옵션 아래에 작은 글씨로 해설 문장을 붙여 의미를 보완한다.

## 다크 패턴: 의도적 매핑 왜곡

### change.org 사례들

1. **서명 수 조작**: 페이지 로드 시 실제 서명 수보다 낮은 숫자에서 시작해 실제 수까지 실시간으로 올라가는 애니메이션 — 가짜 실시간 활동 인상 조작.
2. **기부 오해 유도**: 서명 후 나타나는 "기부" 요청이 청원 주최자에게 가는 것처럼 보이지만, 실제로는 change.org의 광고 비용. 개념의 운영 원칙을 숨김.

### Amazon Prime 사례

두 버튼("Try Prime FREE" — 노란색, "Continue with FREE One-Day Delivery" — 파란색)이 모두 Prime 가입 액션에 연결됨. 가입 거부 옵션은 훨씬 작은 파란색 링크로 숨겨짐. 두 개의 버튼이 실제로는 하나의 행동을 공유한다는 사실을 매핑이 숨긴다.

## 복잡한 조합 매핑: Gmail 레이블의 수수께끼

Gmail은 *label* 개념과 *conversation* 개념을 조합하면서, **레이블은 메시지에 부착하지만 레이블 표시는 대화(conversation)에 표시**한다.

이 불일치로 인한 이상 현상:
- 대화가 "hacking"과 "meetups" 두 레이블을 갖는 것처럼 보임
- 그러나 각각의 레이블로는 검색 결과에 나타나지만, 두 레이블을 동시에 검색하면 결과 없음 (두 레이블이 서로 다른 메시지에 부착돼 있기 때문)

실무적 문제: *sent* 뷰를 보면 내가 보낸 메시지가 포함된 대화 전체가 보이고, 내가 보내지 않은 메시지들도 포함된다. 설계자들이 이 문제를 인지했지만 아직 완전히 해결되지 않았다.

## 명확하지만 사용하기 어려운 매핑: Backblaze 복원

파일 버전을 복원하는 흐름: 날짜 범위 설정 → 폴더 트리 로딩(~20초) → 파일 선택 → 다운로드. 손상된 파일의 마지막 정상 버전을 찾으려면 날짜를 하루씩 소급해가며 반복해야 하는데, 매번 폴더 트리가 리셋된다.

**개선 방향**: Carbonite나 Crashplan처럼 파일의 모든 버전 목록(수정 날짜 포함)을 한 번에 보여주는 방식.

## 라이브 필터링 딜레마: Apple Mail의 Flag

플래그된 메시지 목록을 보는 중, 한 메시지의 플래그를 해제하면 그 메시지를 즉시 목록에서 제거해야 할까?

**직관적 답변(제거)**: 일관성 있어 보이지만 실용적으로 나쁘다. 실수로 플래그 해제 후 메시지를 찾을 수 없게 됨.

**실제 Apple Mail 동작(유지)**: 플래그가 해제돼도 메시지가 목록에 남아있어, 즉시 재플래그 가능. 뷰를 나갔다 돌아오면 그때 목록이 갱신됨.

**교훈**: 매핑은 단순한 액션-상태 연결이 아니라 **전형적 사용 시나리오와 사용 패턴**을 고려해야 한다.

## 모호한 액션 해소: Adobe Lightroom 컬렉션

*collection* 개념: 아이템이 여러 컬렉션에 동시에 속할 수 있음.

두 컬렉션이 동시에 선택된 상태에서 한 아이템을 제거하려 하면 어느 컬렉션에서 제거할지 모호하다. Lightroom은 처음에 에러 메시지를 표시하다가, 나중에 선택된 모든 컬렉션에서 동시에 제거하도록 변경했다. 이 문제는 UI 위젯 설계의 한계에서 비롯된다.

## 비표준 위젯 필요: "없음" 값 입력

*partial style* 개념: 서식의 일부 속성만 지정하는 스타일. 예: 이탤릭만 지정하고 폰트 크기는 지정 안 함.

문제: 기존에 설정된 속성을 "설정 안 함(none)"으로 되돌리는 UI 요소가 없다. 3상태 체크박스(on/off/not-set), 값 편집 가능한 드롭다운 등 비표준 위젯이 필요하다. 이 요구는 현재 UI 툴킷의 한계를 드러낸다.

## 핵심 인용

> "The design of mappings has been extensively studied by human-computer interaction researchers, and the guidelines that have been developed—mostly at the physical and linguistic levels of design—apply equally well to systems that have been designed with concepts."

> "Attempts to make the user interface simpler than the underlying concepts may backfire."

> "The mapping must take into account typical usage patterns, which… may be more complicated than performing a single action."

## 관련 개념

- [[EOS-ch6-concept-composition]] — 조합된 개념을 매핑할 때의 복잡성
- [[EOS-ch4-concept-structure]] — 개념의 행동·상태가 매핑의 대상
- [[EOS-part3-principles]] — Ch9 특정성: 매핑에서의 목적 명확성
- [[EOS-part1-motivations]] — Ch2: 설계 3수준 (물리·언어·개념)
- [[EOS-overview]] — 전체 개요
