Files
2nd/10_Wiki/Topics/Executable_Documentation.md
T
2026-05-02 23:55:09 +09:00

69 lines
9.1 KiB
Markdown

---
category: Unified
tags: [auto-wikified, technical-documentation]
title: Executable Documentation
description: "Executable Documentation(실행 가능한 문서)은 시스템의 기대 동작을 명시함과 동시에 실제 코드로 실행되어 검증될 수 있는 형태의 문서를 의미합니다 [1]."
last_updated: 2026-05-02
---
# Executable Documentation
## 📌 Brief Summary
Executable Documentation(실행 가능한 문서)은 시스템의 기대 동작을 명시함과 동시에 실제 코드로 실행되어 검증될 수 있는 형태의 문서를 의미합니다 [1]. 소스 코드 생태계에서는 주로 '테스트 코드(Test Code)'가 가장 신뢰할 수 있는 실행 가능한 문서의 역할을 수행합니다 [1]. 이 외에도 기계가 읽을 수 있는 API 명세 기반의 대화형(Interactive) 문서나 코드로 작성되어 버전 관리가 가능한 다이어그램(Diagrams as Code) 등 코드의 변경과 실시간으로 동기화되는 문서 체계도 이에 해당합니다 [2, 3].
## 📖 Core Content
* **테스트 코드를 통한 실행 가능한 문서화:** 대규모 코드베이스에서 테스트 코드는 시스템의 설계 철학과 기대 동작을 명시하는 가장 신뢰할 수 있는 실행 가능한 문서입니다 [1]. 개발자는 단위 테스트(Unit Test)를 통해 개별 컴포넌트의 국소적 논리를 이해하고, 통합 테스트(Integration Test)를 통해 시스템 전반의 상호작용 흐름을 파악할 수 있습니다 [4].
* **동적 동작 관찰과 기술적 통찰:** 새로운 시스템에 온보딩하거나 코드를 분석할 때, 정적인 독해만으로는 시스템의 전체를 파악하기 어렵습니다 [4, 5]. 테스트 코드에서 특정 값을 임의로 변경해 보고 시스템의 반응을 관찰하는 실험적 접근은, 문서 읽기만으로는 얻을 수 없는 깊은 기술적 통찰을 제공합니다 [4].
* **API 명세 기반의 문서 자동화:** API-First 아키텍처 환경에서는 OpenAPI나 AsyncAPI와 같은 명세(Specification)를 통해 서버 스텁, 클라이언트 SDK 및 대화형 문서를 사양 파일에서 직접 자동 생성할 수 있습니다 [2, 6]. 이 과정은 수동 작업의 노력을 줄이고 시스템 변경 시 문서가 낙후되는 것을 방지합니다 [2].
* **다이어그램의 코드화 (Diagrams as Code):** 시스템 아키텍처를 시각적으로 이해하기 위해 Structurizr(C4 모델 기반), Mermaid, PlantUML과 같은 텍스트 및 마크다운 기반 구문을 사용하여 다이어그램을 생성할 수 있습니다 [3, 7]. 이는 버전 관리 시스템을 통해 코드와 함께 관리되므로 항상 최신 상태를 유지하는 문서의 역할을 합니다 [3].
## ⚖️ Trade-offs & Caveats
소스에 "Executable Documentation" 자체에 대한 직접적이고 포괄적인 제약 사항 정보가 부족합니다. 다만, 소스에서 다루는 실행 가능한 문서의 구체적 구현체(테스트 코드, 도구화된 문서 등)와 관련된 부작용 및 제약 사항은 다음과 같습니다:
* **테스트 스위트의 복잡성 및 유지보수 부담:** 테스트 코드를 논리적 구조로 그룹화(Test Suites)하여 실행 가능한 문서로 사용할 때, 과도하게 조직화하면 각각이 하위 테스트 집합을 포함하게 되어 유지보수가 매우 어려워질 수 있습니다 [8].
* **잘못된 경계 설정의 위험성:** 모호하게 코딩되어 경계가 명확하지 않은 테스트 스위트는 테스트를 제대로 격리하지 못하여 실행 가능한 문서로서의 정확성과 신뢰도를 떨어뜨립니다 [8].
* **상호 의존성 문제:** 시스템이 커지면서 상호 의존성을 가진 테스트 스위트가 늘어나면 복잡성이 증가하며, 올바른 순서로 시퀀싱하지 않을 경우 누락이 발생하거나 실패할 수 있습니다 [9].
* **초기 설정 및 지속적 관리 요구:** 도구를 활용해 문서와 코드를 동기화하고 API 목(Mock) 서버를 구성하는 등 실행 가능한 상태를 유지하기 위해서는 팀의 규율과 지속적인 유지보수 작업이 요구됩니다 [2, 8].
## 🔗 Knowledge Connections
### Related Concepts
#### [테스트 및 검증 기반 기술]
- [[단위 테스트 (Unit Testing)]]
- 연결 이유: 개별 컴포넌트의 논리와 예상되는 입출력 데이터를 실행 가능한 형태로 문서화하는 가장 기초적인 수단입니다 [4].
- 이 개념을 통해 더 깊게 이해할 수 있는 부분: 격리된 모듈의 책임(Responsibility)과 정확한 동작 원리.
- [[통합 테스트 (Integration Testing)]]
- 연결 이유: 모듈 간의 결합과 통신 흐름을 검증하여, 분산된 시스템 전반의 상호작용을 파악하는 실행 가능한 문서 역할을 합니다 [4].
- 이 개념을 통해 더 깊게 이해할 수 있는 부분: 아키텍처 내 컴포넌트 간의 인터페이스 및 전체 기능 작동 메커니즘.
#### [설계 및 명세 자동화 도구]
- [[OpenAPI / AsyncAPI]]
- 연결 이유: API-First 설계에서 사용하는 기계 해독 가능(Machine-readable) 명세로, 대화형 문서와 코드를 자동 생성하는 기반입니다 [2].
- 이 개념을 통해 더 깊게 이해할 수 있는 부분: 시스템 외부 및 클라이언트와의 계약(Contract) 기반 통신과 병렬 개발 파이프라인.
- [[Diagrams as Code]]
- 연결 이유: Mermaid나 PlantUML을 사용하여 시스템 구조를 텍스트 구문으로 정의하고, 소스 코드와 함께 버전 컨트롤로 관리하는 시각적 문서 체계입니다 [3, 7].
- 이 개념을 통해 더 깊게 이해할 수 있는 부분: 소스 코드의 변경 사항과 아키텍처 다이어그램 간의 동기화 및 형상 관리 기법.
### Deeper Research Questions
- 실행 가능한 문서(테스트 코드)가 실제 운영 코드의 변경 사항과 동기화되지 않고 방치될 때, 코드베이스 이해도와 기술적 부채에 어떠한 악영향을 미치는가?
- OpenAPI와 같은 명세를 통한 자동 생성 문서가 사람이 직접 작성하는 전통적인 기술 문서에 비해 가지는 인지적, 맥락적 한계점은 무엇인가?
- Diagrams as Code를 적용하여 아키텍처 문서를 버전 관리할 때, 거대한 마이크로서비스 아키텍처에서 발생하는 시각적 복잡성을 어떻게 제어하고 추상화할 수 있는가?
- 낯선 레거시 코드베이스를 탐색할 때, 단위 테스트와 통합 테스트 중 시스템의 초기 멘탈 모델을 형성하는 데 더 효율적인 '실행 가능한 문서'는 무엇이며 그 이유는 무엇인가?
- 강하게 결합되어 테스트가 불가능한 레거시 코드를 실행 가능한 문서(테스트 스위트)가 존재하는 안정적인 구조로 리팩토링하기 위한 가장 안전한 접근법은 무엇인가?
### Practical Application Contexts
- **Implementation:** 백엔드 API 개발 시 OpenAPI 명세를 먼저 작성하고 이를 바탕으로 대화형 문서와 Mock 서버를 자동 생성하여, 프론트엔드 팀이 백엔드 구현 완료를 기다리지 않고 병렬로 개발을 진행할 수 있습니다 [2, 6].
- **System Design:** 소프트웨어 아키텍처를 그릴 때 정적인 이미지 도구가 아닌 Mermaid나 Structurizr를 사용하여 설계하고 Git 저장소에 커밋함으로써, 코드 리뷰 시 설계 변경 사항을 함께 검토하고 문서를 최신 상태로 유지합니다 [3].
- **Operation / Maintenance:** 방대한 시스템을 유지보수할 때 테스트 스위트를 기능과 모듈에 따라 논리적으로 그룹화하여 관리함으로써, 운영 중인 시스템에 변경을 가할 때 발생할 수 있는 부수 효과(Side effect)를 즉시 파악하는 안전망이자 가이드 문서로 활용합니다 [8, 10].
- **Learning Path:** 새로운 코드베이스나 팀에 합류(Onboarding)할 때, 방치된 문서 파일을 읽는 대신 잘 작성된 테스트 코드를 직접 찾아 값을 변경해 보고 디버거로 실행하며 시스템의 런타임 반응을 관찰하는 방식으로 시스템 구조를 학습합니다 [1, 4, 5].
- **My Project Relevance:** 복잡한 시스템이나 레거시 코드의 비즈니스 로직을 파악해야 할 때, 코드를 하향식 혹은 상향식으로 탐색하는 것과 병행하여 해당 도메인을 다루는 테스트 코드(실행 가능한 문서)를 확인하여 코드 작성자의 원래 의도를 가장 신뢰성 있게 도출할 수 있습니다 [1, 4].
### Adjacent Topics
- [[API-First Architecture]]
- 확장 방향: 제품 구현 전 API 명세(실행 가능한 계약)를 우선적으로 설계하여 프론트엔드와 백엔드 간의 결합도를 낮추고 문서화를 자동화하는 접근법으로 이해를 확장합니다 [2, 6, 11].
- [[Version Control Systems (Git)]]
- 확장 방향: 소스 코드 및 Diagrams as Code의 변경 이력을 추적하고, 과거의 PR 설명과 커밋 메시지라는 맥락 데이터를 통해 현재 코드의 의도를 유추하는 방법론으로 학습을 확장합니다 [12, 13].
---
*Last updated: 2026-05-02*