# Cognitive Load & Mental Models (인지 부하 및 멘탈 모델)

## 📌 Brief Summary
인지 부하 이론(Cognitive Load Theory, CLT)과 멘탈 모델(Mental Models)은 소프트웨어 엔지니어가 복잡한 시스템을 파악하고 유지보수할 때 발생하는 내부적 지식 표상과 인지적 제약을 설명하는 핵심 이론입니다 [1, 5]. 인간의 제한된 '작업 기억(Working Memory)' 용량 내에서 소스 코드를 읽고 시스템의 의도를 재구성하는 과정은 본질적 복잡성과 구현상의 불필요한 복잡성 사이의 투쟁입니다 [1]. 성공적인 개발자는 파편화된 코드를 고수준의 기능적 단위로 '청킹(Chunking)'하여 견고한 멘탈 모델을 구축함으로써 대규모 시스템의 복잡도를 관리합니다 [1, 2].

## 📖 Core Content

### 1. 인지 부하의 3대 유형 (Types of Cognitive Load)
소프트웨어 개발 시 발생하는 인지적 노력은 다음 세 가지로 분류됩니다 [1]:
*   **본질적 부하 (Intrinsic Load):** 도메인 로직이나 알고리즘 자체가 가진 고유의 복잡성입니다. (예: 분산 합의 알고리즘 구현)
*   **외부적 부하 (Extraneous Load):** 조잡한 코드 명명, 파편화된 아키텍처, 문서 부재 등 구현 방식 때문에 발생하는 불필요한 인지적 소모입니다.
*   **관련적 부하 (Germane Load):** 시스템의 동작 원리를 내재화하고 지식 스키마(Schema)를 구축하는 데 투입되는 유익한 노력입니다.

### 2. 멘탈 모델의 계층 구조 (Hierarchy of Mental Models)
개발자는 코드를 읽으며 두 가지 핵심 표상을 형성합니다 [1, 2, 5]:
*   **프로그램 모델 (Program Model):** 코드의 구문, 제어 흐름, 데이터 흐름 등 기술적 구현에 집중한 저수준 모델입니다. (상향식 접근법의 결과물)
*   **상황 모델 (Situation Model / Task Model):** 비즈니스 목적, 사용자 요구사항, 도메인 기능을 표현하는 고수준 모델입니다. (하향식 접근법의 결과물)
*   **매핑 계층 (Annotation Layer):** 프로그램 모델(How)과 상황 모델(Why) 사이의 연결 고리로, 이 연결이 명확할수록 코드의 '추적 가능성(Traceability)'이 높아집니다.

### 3. 복잡성 관리 도구 (Chunking & Beacons)
*   **청킹 (Chunking):** 여러 코드 요소를 '정렬 알고리즘', '인증 미들웨어'와 같이 하나의 추상화된 레이블로 묶어 작업 기억의 부하를 줄이는 기술입니다 [1].
*   **비컨 (Beacons):** 특정 기능을 암시하는 강력한 단서(예: `swap` 변수는 정렬을 암시)로, 개발자가 하향식 가설을 세울 때 지름길 역할을 합니다 [16, 17].

## ⚠️ Trade-offs & Caveats
*   **Clean vs. Traceable 코드의 긴장:** 고도로 모듈화된 '클린(Clean)' 코드는 개별 모듈의 본질적 부하를 줄여주지만, 실행 흐름을 파악하기 위해 수많은 파일을 넘나들어야 하므로 **외부적 인지 부하(Extraneous load)**를 급격히 높일 수 있습니다 [3, 4].
*   **비전형적 코드(Unplan-like)의 충격:** 관례를 무시한 코드는 개발자의 기존 스키마와 충돌하여 '인지적 불일치(Cognitive Dissonance)'를 유발하고 멘탈 모델 구축을 방해합니다 [18].
*   **리뷰 파편화:** 인지 부하 관리를 위해 PR을 작게 쪼개는 것은 개별 검토에는 유리하지만, 전체 시스템의 일관성(Big Picture)을 놓치게 만들 위험이 있습니다 [2].

## 🔗 Knowledge Connections

### Related Concepts
- [[Program Comprehension Strategies]]: 멘탈 모델을 구축하기 위한 구체적인 하향식/상향식 탐색 전략을 다룹니다.
- Information Foraging Theory (정보 탐색 이론): 최소한의 인지 노력으로 코드 내 비컨(단서)을 찾아 이동하는 인간의 행동 양식을 설명합니다.
- Clean Architecture vs Traceable Code: 인지 부하 최적화와 아키텍처적 결합도 제거 사이의 트레이드오프를 심층 분석합니다.

### Deeper Research Questions
- AI 기반 자동 완성 도구가 제공하는 코드가 개발자의 '관련적 부하(Germane load)' 형성을 방해하여 장기적인 시스템 이해도를 떨어뜨리는가?
- 가상현실(VR)이나 3D 시각화 도구가 텍스트 기반 코드보다 고수준 상황 모델 구축에 더 효과적인 인지 보조 수단이 될 수 있는가?
- 마이크로서비스 환경에서 파편화된 상황 모델을 하나로 통합하기 위한 가장 효율적인 '비컨' 설계 전략은 무엇인가?

### Practical Application Contexts
- **System Design:** 아키텍처 설계 시 'Clean'함뿐만 아니라 'Traceable'함(추적 용이성)을 동시에 고려하여 외부적 부하를 통제해야 합니다 [20, 32].
- **Code Review:** 리뷰어의 인지 부하를 줄이기 위해 PR 본문에 'Specification(목적)'을 명확히 작성하여 구현부와의 매핑(Annotation)을 도와야 합니다 [5, 10].
- **Documentation:** 문서는 단순히 코드를 설명하는 것이 아니라, 코드에서 읽기 어려운 '상황 모델(Why)'을 집중적으로 보완하는 역할을 해야 합니다.

---
*Last updated: 2026-05-02*
