chore: 문서를 작성할 때 한국어의 표현 작성 스킬 추가 및 1인칭 관점의 글 작성 검증 테스트 추가

This commit is contained in:
DongHyeonka
2026-07-29 16:48:03 +09:00
parent c39406bbdd
commit 41501b5d06
520 changed files with 95494 additions and 2231 deletions
+273 -332
View File
@@ -1,385 +1,326 @@
# ClariDoc 설계 근거: 독자가 이해하는 기술 문서의 논리 구조
# ClariDoc 설계 근거: 근거를 숨기지 않되, 글쓰기 과정을 독자에게 노출하지 않는 방법
> 조사 기준일: 2026-07-23
> 적용 대상: 기술 블로그, 튜토리얼, 하우투, 설명, 참조, 트러블슈팅, 설계 문서
ClariDoc은 문장을 매끄럽게 생성하는 프롬프트 모음이 아니다. 기술 블로그와 기술 문서를 만들 때 다음 세 문제를 동시에 다루는 하네스다.
## 1. 이 연구가 답하려는 질문
1. 독자가 문제, 선택, 구현, 검증을 끊기지 않고 따라갈 수 있어야 한다.
2. 프로젝트의 선택 이유와 경계를 실제 근거 문서에서 회수해야 한다.
3. 출처 ID, 저장소 경로, 접근일, 작성 지시문 같은 내부 정보는 독자용 글에 섞이지 않아야 한다.
이 하네스는 “문장을 유창하게 만드는 프롬프트”가 아니라 다음 질문에 답하도록 설계했다.
## 1. 기존 방식에서 드러난 결함
1. 독자는 왜 이 문서를 읽는가?
2. 그 목적에 맞는 문서 유형은 무엇인가?
3. 독자의 머릿속 질문은 어떤 순서로 생기는가?
4. 주장, 예시, 절차, 근거, 한계는 어디에 놓여야 하는가?
5. 모델이 논리적 구조를 빠뜨리거나 그럴듯한 사실을 발명했을 때 어떻게 탐지하는가?
6. 문서가 “좋아 보인다”는 인상 대신 재현 가능한 품질 기준으로 통과했는지 어떻게 남기는가?
결론은 다음과 같다.
> 이해하기 쉬운 기술 문서는 미문보다 **정보 구조**가 먼저다. 독자의 작업 또는 이해 목표를 고정하고, 문서 유형에 맞는 질문 순서를 정하며, 각 섹션을 하나의 질문과 하나의 기능에 대응시키고, 구체적인 예시·검증·근거·한계를 통해 이해를 누적해야 한다.
## 2. 조사 방법
자료를 네 층으로 나누어 검토했다.
### 2.1 편집·콘텐츠 설계 지침
Google, GitHub, Microsoft의 공식 기술 문서 작성 지침을 검토했다. 반복해서 나타난 원칙은 독자와 목적의 선행 정의, 핵심 결론의 조기 제시, 한 문단 한 생각, 의미 있는 제목, 논리적 우선순위, 점진적 상세화, 스캔 가능한 형식이다.
### 2.2 정보 유형과 문서 아키텍처
Diátaxis, OASIS DITA, Kubernetes의 콘텐츠 유형을 비교했다. 서로 용어는 다르지만, 학습·작업 수행·개념 이해·정확한 조회·문제 복구는 서로 다른 독자 상태와 구조를 요구한다는 점이 공통적이다.
### 2.3 학습과 이해에 관한 연구
완성된 해결 과정을 따라가는 worked example 연구와, 제목·요약·인과 연결어 같은 구조 신호가 이해와 전이를 돕는 signaling 연구를 참고했다. 이 결과를 기술 문서에 그대로 일반화한 것이 아니라, “예시는 시작 상태에서 결과까지 끊기지 않아야 한다”와 “구조와 인과관계를 표면에 드러내야 한다”는 설계 가설로 번역했다.
### 2.4 실제 엔지니어링 글 표본
Netflix, Cloudflare, Dropbox, AWS Builders Library의 글을 표본으로 읽었다. 좋은 글에서 반복적으로 관찰된 흐름은 대체로 다음과 같다.
초기 버전은 근거 추적 가능성을 높이기 위해 본문에 source ID를 직접 쓰도록 했다. 그 결과 다음과 같은 문장이 최종 문서에 나타날 수 있었다.
```text
문제와 독자 약속
→ 실제 제약과 실패 양상
→ 선택 기준 또는 멘털 모델
→ 아키텍처·메커니즘
→ 구체적 사례나 데이터
→ 대안과 트레이드오프
→ 운영에서 드러난 한계·교훈
→ 적용 조건과 다음 행동
Retries can increase load on a dependency that is already failing. [S1]
제공된 근거 팩은 다음 사실을 확인 대상으로 제시한다.
예시는 특정 날짜 기준이다.
```
흐름은 보편 법칙이 아니라 표본 관찰에서 도출한 실무 패턴이다. 그래서 ClariDoc은 이를 `technical_blog`의 기본 구조로 사용하되, 브리프와 프로젝트별 스타일이 우선하도록 설계했다.
문장들은 사실 검증 과정에는 유용할 수 있지만 독자에게는 불필요하다. 독자는 source-pack의 형식이나 모델이 받은 지시를 알고 싶은 것이 아니라, 문제가 무엇이고 왜 그 선택을 했으며 어떤 비용을 감수했는지 알고 싶다.
## 3. 핵심 원칙과 하네스 번역
### 원칙 1. 문서의 시작점은 주제가 아니라 독자의 변화다
“재시도에 대해 쓴다”는 주제만으로는 구조가 결정되지 않는다. 독자가 개념을 이해하려는지, 특정 작업을 끝내려는지, 장애를 복구하려는지에 따라 필요한 정보와 순서가 달라진다.
**하네스 적용**
- `Brief.audience.roles`: 누가 읽는가
- `Brief.audience.prior_knowledge`: 무엇을 이미 아는가
- `Brief.audience.needs`: 어떤 판단 또는 행동이 필요한가
- `Brief.reader_goal`: 읽은 뒤 가능한 관측 가능한 변화
- `Brief.core_message`: 문서 전체가 증명해야 할 한 문장
### 원칙 2. 초안을 쓰기 전에 문서 유형을 고정한다
튜토리얼과 하우투는 모두 단계가 있지만 목적이 다르다. 튜토리얼은 안내받는 학습 경험이고, 하우투는 이미 목표가 있는 사용자가 과업을 끝내는 문서다. 설명 문서와 참조 문서도 각각 이해와 조회라는 다른 작업을 지원한다.
**하네스 적용**
`DocumentType`을 다음 일곱 유형으로 제한한다.
- `technical_blog`
- `tutorial`
- `how_to`
- `explanation`
- `reference`
- `troubleshooting`
- `design_doc`
각 유형은 `STRUCTURE_SPECS`에 필수 섹션 intent와 순서를 가진다. planner가 제목과 근거 배치를 개선할 수는 있지만 필수 intent를 삭제하거나 재배열할 수 없다.
### 원칙 3. 범위, 비범위, 선행지식, 버전을 초기에 노출한다
독자가 문서의 적용 가능성을 판단하지 못하면 세부 내용을 읽은 뒤에야 “내 상황과 다르다”는 사실을 알게 된다. 비범위와 버전 맥락은 내용 부족의 변명이 아니라 문서의 정확성 경계다.
**하네스 적용**
- `scope`, `non_scope`, `prerequisites`
- `constraints.version_context`
- 오프닝에서 이 정보가 드러나는지 린트
- 목표와 직접 관련 없는 섹션을 planner가 추가하지 못하도록 구조 병합 검증
### 원칙 4. 핵심 답을 먼저 주고 상세는 점진적으로 공개한다
복잡한 기술 글이 배경부터 길게 시작하면 독자는 무엇을 위해 정보를 유지해야 하는지 모른다. 먼저 결론 또는 독자 약속을 제시하고, 그 뒤에 필요한 맥락·원리·세부 구현을 확장한다.
**하네스 적용**
- `technical_blog`, `explanation`, `design_doc`의 첫 intent를 결론 또는 결정 요청으로 고정
- drafting prompt에서 “answer before detail” 요구
- 오프닝에 `reader_goal``core_message`의 의미가 나타나는지 휴리스틱 검사
### 원칙 5. 한 섹션은 하나의 독자 질문에 답한다
제목은 장식이 아니라 독자가 현재 어디에 있고 다음에 무엇을 알게 되는지 보여 주는 구조 신호다. 섹션마다 질문과 목적이 명시되면, 모델이 관련된 사실을 무작위로 나열하기 어렵다.
**하네스 적용**
모든 `OutlineSection`은 다음 필드를 가진다.
- `intent`: 섹션의 논리 기능
- `reader_question`: 이 섹션이 답할 질문
- `purpose`: 답이 전체 논증에서 수행하는 역할
- `must_include`: 반드시 다룰 정보
- `evidence_ids`: 연결할 근거
- `transition_to_next`: 다음 질문으로 넘어가는 이유
린터는 의미 없는 제목, 중복 제목, heading level 건너뛰기, 유형별 H2 순서 위반을 검사한다.
### 원칙 6. 개념 설명은 정의가 아니라 인과 모델을 만든다
용어를 각각 정의해도 구성요소 사이의 관계가 드러나지 않으면 독자는 새 상황에 적용하지 못한다. 좋은 설명은 입력, 상태, 결정, 변화, 결과, 관측을 연결한다.
**하네스 적용**
설명·기술 블로그·설계 문서의 구조에 다음 요소를 강제한다.
더 큰 결함은 근거가 있어도 **결정의 이유를 회수하지 못하는 것**이었다.
```text
익숙한 기준점
→ 핵심 용어와 경계
→ 구성요소
→ 데이터/제어 흐름
→ 불변조건과 실패 조건
→ 관측 가능한 결과
application-core는 Spring DI를 의도적으로 사용한다.
```
논리 reviewer는 전제 누락, 인과 점프, 순환 설명, 결론과 근거의 불일치를 찾도록 지시받는다.
이 문장은 현재 상태만 말한다. 다음 질문에는 답하지 않는다.
### 원칙 7. 예시는 전체 경로를 따라가야 한다
- 어떤 문제가 있었는가?
- Spring을 완전히 제거하는 대안은 왜 선택하지 않았는가?
- Spring DI를 허용하면서 어떤 비용을 받아들였는가?
- 허용 범위가 transaction, transport, persistence까지 번지지 않도록 무엇을 막았는가?
- 그 경계가 실제로 지켜지는지는 어떻게 확인하는가?
조각난 코드 블록이나 단편적인 명령은 문법을 보여 줄 수 있지만, 입력이 어떤 판단과 상태 변화를 거쳐 결과가 되는지 보여 주지 못한다. 학습 목적의 예시는 시작 상태, 실행, 중간 체크포인트, 결과, 실패 경계가 이어져야 한다.
ClariDoc 0.2.0은 이 두 결함을 각각 **출력 경계**와 **결정 근거 회수** 문제로 다룬다.
**하네스 적용**
## 2. 독자용 글과 내부 provenance를 분리한다
- `worked_example` 또는 대응 intent를 유형 계약에 포함
- 예시 또는 코드 존재 검사
- 튜토리얼에는 중간 checkpoint와 최종 verification 요구
- 명령 블록은 언어 태그, 사전 조건, 예상 결과와 연결하도록 prompt에 명시
작성 과정에는 출처 식별자가 필요하다. source chunk가 어느 문서의 어느 heading과 line range에서 왔는지 남겨야 이후 검토와 재현이 가능하다. 그러나 그 정보가 최종 글에 그대로 나타날 이유는 없다.
### 원칙 8. 절차는 행동뿐 아니라 안전 경계를 포함한다
작업 문서는 “무엇을 입력하라”만 알려 주면 부족하다. 시작 조건, 정상 결과, 중단 조건, 검증, 롤백을 함께 제공해야 실제 시스템에서 사용할 수 있다.
**하네스 적용**
절차형 문서에서 다음을 검사한다.
- 사전 조건
- 번호가 있는 단계
- 관측 가능한 검증
- 롤백 또는 복구
- 파괴적 명령 주변의 경고·백업·복구 경로
### 원칙 9. 참조 문서는 서술보다 조회 계약이 우선이다
참조 문서는 처음부터 끝까지 읽는 글이 아니라 정확한 값을 찾는 인터페이스다. 범위와 버전, 구문, 필드, 기본값, 동작, 오류, 최소 예시가 안정적으로 배치되어야 한다.
**하네스 적용**
`reference` 구조를 다음 순서로 고정한다.
따라서 산출물을 두 층으로 나눈다.
```text
범위/버전 → 구문 → 파라미터/필드 → 동작 → 오류 → 최소 예시 → 관련 항목
reader-facing layer
└─ document.md
문제, 제약, 대안, 선택 이유, 메커니즘, 검증, 한계만 노출
internal audit layer
├─ provenance.md
├─ evidence-map.json
├─ normalized inputs
├─ raw model responses
└─ manifest.json
source ID, relative path, heading, line range, status, hash 보존
```
테이블형 조회 표면이 없는 경우 경고하고, 버전 맥락과 미해결 placeholder를 검사한다.
기술 블로그의 기본 `citation_style``hidden`이다. 이 모드에서 다음 항목은 독자용 문서에 나타나면 오류다.
### 원칙 10. 주장은 출처 단위와 연결되어야 한다
- `[S1]` 같은 내부 source marker
- `raw/branch-notes/...` 같은 repository path
- source access date
- “제공된 근거”, “근거 팩”, “확인 대상으로 제시” 같은 작성 과정 설명
- planner가 만든 section intent나 prompt tag
URL 목록만 주면 모델은 출처가 실제로 무엇을 지지하는지 추정하게 된다. 따라서 출처별로 사용할 수 있는 사실을 분리하고, 본문의 주장에 ID를 붙이는 편이 감사 가능하다.
공개 링크나 각주가 필요한 문서는 `footnote` 또는 `inline_link`를 명시적으로 선택한다. 숨김 정책은 출처를 없애는 것이 아니라 **독자용 표현과 감사용 추적을 분리하는 것**이다.
**하네스 적용**
## 3. 프로젝트 문서를 같은 무게로 취급하지 않는다
`SourcePack`의 각 항목은 `facts``notes`를 가진다. 모델은 `[S1]` 같은 ID를 사용한다. 린터는 다음을 탐지한다.
로컬 저장소에는 현재 상태, 결정 과정, 외부 동작, 선례가 함께 존재할 수 있다. 단어가 겹친다는 이유만으로 모두 같은 근거로 사용하면 현재 구현과 과거 메모가 섞이고, 외부 사례가 프로젝트의 선택 이유로 둔갑한다.
- 존재하지 않는 출처 ID
- 인용이 필수인데 source pack이 비어 있음
- 출처가 있는데 아무 ID도 사용하지 않음
- 숫자·버전형 주장에 표식이 없음
- 사용되지 않은 출처
ClariDoc은 source type을 다음처럼 구분한다.
중요한 한계: 이 버전은 문장이 `facts`의 의미와 실제로 일치하는지 논리적으로 증명하지 않는다. evidence reviewer와 도메인 검토가 여전히 필요하다.
| source type | 답할 수 있는 질문 | 답할 수 없는 질문 |
|---|---|---|
| `canonical-project` | 현재 프로젝트에서 실제로 구현·검증된 것은 무엇인가 | 왜 최초에 그 선택을 했는가가 항상 기록돼 있지는 않다 |
| `canonical-concept` | 재사용 가능한 기술 개념과 일반 동작은 무엇인가 | 특정 프로젝트가 실제 채택했는가 |
| `branch-note` | 어떤 제약, 대안, 이유, 비용으로 결정을 내렸는가 | 최신 canonical과 충돌할 때 현재 상태의 최종 권위가 되지는 않는다 |
| `official-doc` | 프레임워크·프로토콜·제품이 어떻게 동작하는가 | 프로젝트의 의도와 채택 이유 |
| `company-tech-blog` | 다른 조직이 어떤 조건에서 무엇을 시도했는가 | 보편적인 표준 또는 현재 프로젝트의 사실 |
### 원칙 11. 선택은 대안, 기준, 비용, 실패 조건을 함께 설명한다
이 계층은 `llm-wiki-private``raw → canonical → external output` 흐름과 맞물린다. 공개 글은 canonical의 검증된 현재 상태를 중심으로 삼고, branch-note에서 선택 배경을 회수하며, official docs와 company tech blog는 동작 설명과 선례를 보조한다.
“우리는 X를 사용했다”만으로는 독자가 자신의 상황에서 같은 결정을 내려야 하는지 판단할 수 없다. 선택 기준과 제약, 버린 대안, 받아들인 비용, 운영에서 드러난 실패 조건이 있어야 판단이 전이된다.
## 4. 검색의 목표는 관련 문서가 아니라 결정 단위를 찾는 것이다
**하네스 적용**
- 기술 블로그·설명·설계 문서에 alternatives/tradeoffs/limits intent 포함
- `design_doc`에는 목표/비목표, 제약, 대안, 결정, failure mode, rollout, observability, open risks 포함
- trade-off 또는 한계 신호가 없으면 lint error
### 원칙 12. 작성자와 검토자의 관점을 분리한다
하나의 모델이 작성과 자기검토를 모두 수행하면 같은 전제와 누락을 반복할 수 있다. 완전한 독립성을 보장하지는 못해도, 역할과 가능하면 제공자를 분리하면 오류 표면을 넓힐 수 있다.
**하네스 적용**
기본 멀티 에이전트 배치는 다음과 같다.
- planner: Codex
- writer: Claude
- logic reviewer: Codex
- reader reviewer: Claude
- evidence reviewer: Antigravity
- operations reviewer: Antigravity
- reviser: Claude
리뷰는 자유 서술이 아니라 점수, 차원별 점수, severity, 문제, 영향, 수정안이 있는 JSON 계약으로 받는다.
### 원칙 13. 유창성 평가와 결정적 검사를 결합한다
LLM은 문맥과 논리를 평가하는 데 유용하지만 동일 입력에서도 판단이 달라질 수 있다. 반대로 정규식과 구조 검사는 참·거짓을 이해하지 못하지만 재현 가능하다. 두 종류를 결합해야 한다.
**하네스 적용**
일반적인 lexical search는 `application-core`, `Spring`, `DI`가 많이 등장하는 문서를 위로 올린다. 하지만 기술 글에 필요한 것은 이름의 공기(共起)가 아니라 다음 요소를 가진 문단이다.
```text
composite = deterministic_lint × weight + model_review_mean × weight
constraint
→ choice
→ reason
→ alternative
→ accepted cost
→ guardrail
→ verification
```
점수 외에도 blocker와 error 개수 한도를 동시에 적용한다. 점수가 높아도 파괴적 명령 안전 경계나 금지 주장이 blocker이면 통과할 수 없다.
ClariDoc의 local corpus collector는 Markdown heading 단위로 문서를 나누고 BM25 계열 점수에 다음 가중치를 더한다.
### 원칙 14. 결과뿐 아니라 과정도 감사 가능해야 한다
- canonical/project status
- decision, reason, alternative, trade-off, forbidden, verification 같은 용어
- brief의 required topic과 core message
- 한 파일이 결과 전체를 점유하지 않도록 하는 file diversity
좋은 문서가 한 번 생성되었다는 사실보다 어떤 브리프, 근거, 구성, 모델 응답, 리뷰, 수정으로 만들어졌는지 재현 가능한지가 중요하다.
검색 결과는 절대 경로가 아닌 repository-relative path와 line range를 가진다. 선택 이유가 없는 chunk는 기술 이름이 일치해도 decision section의 주요 근거로 사용하지 않는다.
**하네스 적용**
### `application-core` 사례
- 정규화된 입력 저장
- planner/writer/reviewer/reviser 원문 응답 보존
- 라운드별 초안·lint·review·gate 저장
- provider 이벤트와 실행시간 기록
- 최종 산출물의 SHA-256 manifest 생성
- Mock 실행은 합성 평가임을 자동 경고
프로젝트의 branch-note에는 다음 결정이 함께 기록돼 있었다.
## 4. 문서 유형별 질문 사슬
- `@Service`, `@Component`는 DI 등록 목적으로 허용한다.
- Spring DI까지 제거하면 use case마다 `@Configuration`에서 bean을 수동 등록해야 해 조립 코드가 늘어난다.
- 이 편의를 위해 `spring-context`, `spring-beans` 의존 비용은 수용한다.
- 대신 `spring-tx`, Spring Web, JPA annotation은 금지한다.
- transaction 의미는 `TransactionPort`로 표현한다.
- Gradle과 ArchUnit으로 build graph와 source dependency를 각각 검사한다.
### 4.1 기술 블로그
따라서 독자용 설명은 “Spring을 의도적으로 쓴다”에서 멈추지 않고, 수동 조립 비용을 줄이기 위한 제한적 허용과 그 대가를 함께 설명해야 한다.
반대로 SLF4J의 존재만 확인되고 선택 이유가 근거에서 발견되지 않았다면, “의도적으로 사용했다”는 이유를 추정해서는 안 된다. 주장을 제거하거나 확인되지 않은 범위로 남겨야 한다.
## 5. 기술적 선택은 하나의 완결된 설명 단위여야 한다
좋은 기술 문서는 선택을 제품 이름이나 annotation 이름으로 요약하지 않는다. 독자가 자신의 환경에 판단을 옮길 수 있도록 선택이 성립한 조건을 보여 준다.
ClariDoc의 decision unit은 다음 여섯 항목을 최소 계약으로 사용한다.
1. **맥락과 제약**: 무엇이 단순한 해법을 막았는가
2. **선택**: 무엇을 허용하거나 채택했는가
3. **이유**: 어떤 구체적 비용 또는 실패를 줄이려 했는가
4. **대안**: 현실적으로 가능한 다른 선택은 무엇이었는가
5. **수용 비용**: 선택 때문에 새로 생기는 결합·운영·학습 비용은 무엇인가
6. **가드레일**: 비용이 경계 밖으로 번지면 어떤 검사나 규칙이 실패하는가
운영 또는 설계 글에서는 검증과 적용하지 않을 조건까지 추가한다.
```text
무엇을 해결하는가?
→ 왜 어려운가?
→ 어떤 판단 모델이 필요한가?
→ 해결 방식은 어떻게 동작하는가?
→ 구체적 입력이 결과로 어떻게 변하는가?
→ 어떤 근거로 효과와 정확성을 판단하는가?
→ 무엇을 포기했고 언제 쓰지 말아야 하는가?
→ 독자는 다음에 무엇을 해야 하는가?
context → constraint → options → decision → mechanism
→ verification → accepted cost → not-applicable condition
```
### 4.2 튜토리얼
`RAT001`, `RAT002`, `RAT003` lint는 선택 선언 뒤 이유가 없는 문장, 대안·비용·가드레일 누락, 결정 섹션에 rationale evidence가 배치되지 않은 상태를 각각 탐지한다. 휴리스틱이므로 모델 reviewer와 도메인 소유자 검토를 대체하지는 않는다.
## 6. 우아한형제들 기술 블로그 표본에서 가져온 작성 패턴
우아한형제들의 공식 편집 규정을 확보한 것은 아니다. 공개된 기술 글 8편을 표본으로 읽고 반복되는 전개와 문장 형식을 운영 프로필로 추출했다. 표본은 2017~2025년에 공개된 Backend, Frontend, Data, AI, 장애 회고 글을 포함한다. 출처별 관찰과 일반화 경계는 `SOURCE_MATRIX.md`에 기록했다.
조사는 다음 두 층을 분리했다.
- **정보 전개 구조**: 문제, 제약, 대안, 선택 이유, 구현, 검증이 어떤 순서로 이어지는가
- **문장 형식**: 문단을 어떤 문장으로 시작하고, 앞 문장과 어떤 관계를 만들며, 순서·질문·선택 이유를 어떻게 표현하는가
`문제 → 제약 → 대안 → 선택 이유`는 첫 번째 층의 계약이다. 이 구조를 `첫 번째 제약은`, `두 번째 제약은`, `세 번째 제약은` 같은 문장 틀로 출력해야 한다는 뜻은 아니다.
### 6.1 팀과 시스템의 실제 맥락에서 시작한다
Polars 적용기는 팀이 어떤 크기와 형태의 데이터를 처리하는지 먼저 설명하고 예상 독자를 명시한다. B마트 OMS 글은 고객, 라이더, 현장 작업자의 서로 다른 목표와 물리적 제약을 구체적인 주문 장면으로 보여 준다.
하네스 적용:
- 첫 섹션을 추상적인 정의가 아니라 `problem_scene`으로 둔다.
- 팀, 시스템, 요청 흐름, 장애 증상, 반복 비용 중 최소 하나를 구체적으로 제시한다.
- “이 글에서는 무엇을 다룬다”보다 독자가 왜 이 문제를 읽어야 하는지가 먼저 드러나게 한다.
### 6.2 문제를 비용과 관측 가능한 증상으로 표현한다
B마트 OMS 글은 피크 시간대에 주문이 몰릴 때 출고 지연, 라이더 대기, 현장 부하가 어떻게 연결되는지 보여 준다. LLMOps 글은 provider 복잡성, 프롬프트 버전 추적, 장애, 비용, 실험 재현성 같은 운영 문제를 각각 구체적인 실패로 분해한다.
하네스 적용:
- “복잡했다”, “비효율적이었다”만 쓰지 않는다.
- 누가 어떤 작업을 반복했는지, 어떤 상태가 관측됐는지, 어느 경계에서 비용이 커졌는지 적는다.
- 근거가 없는 수치는 만들지 않는다. 숫자가 없다면 qualitative cost를 정확히 제한해 쓴다.
### 6.3 선택지를 보여 준 뒤 선택 이유를 설명한다
LLMOps 글은 Langfuse를 선택하기 전에 여러 후보와 각 후보의 한계를 비교한다. 기술 선택은 “유명해서”가 아니라 현재 조직의 요구와 맞지 않은 지점을 통해 설명된다.
하네스 적용:
- `options``decision_rationale`을 별도 intent로 둔다.
- 대안을 허수아비로 만들지 않는다.
- 비교 기준은 brief와 근거에서 회수한다.
- 선택의 장점과 함께 수용한 비용을 쓴다.
### 6.4 구현은 구성요소 목록이 아니라 흐름으로 설명한다
B마트 OMS 글은 주문, 출고, 배송, 시뮬레이션 시간과 비동기 작업이 어떤 순서로 이어지는지 보여 준다. 독자는 클래스 이름을 외우는 대신 입력이 결과로 변하는 경로를 따라간다.
하네스 적용:
```text
무엇을 완성하는가?
→ 무엇이 필요한가?
→ 전체 여정은 어떤 모습인가?
→ 어떤 순서로 따라가는가?
→ 각 단계가 맞는지 어떻게 확인하는가?
→ 최종 결과를 어떻게 검증하는가?
→ 무엇을 정리하고 다음에 무엇을 배우는가?
input → decision → state change → dependency call
→ observation → success / stop / recovery
```
### 4.3 하우투
- 메커니즘 섹션에 데이터 또는 제어 흐름을 요구한다.
- component 목록만 나열하면 reviewer가 인과 단절로 지적한다.
### 6.5 검증 결과와 한계를 같이 둔다
공개 기술 글은 시뮬레이션, 성능 지표, 파일럿 결과, 장애 회고처럼 선택이 실제로 무엇을 바꿨는지 보여 준다. 장애 회고는 시간 순서와 놓친 조건을 드러내고 이후의 리뷰·협업 개선으로 연결한다.
하네스 적용:
- test, build rule, metric, incident timeline 중 실제로 존재하는 검증만 사용한다.
- local verification을 production verification으로 확대하지 않는다.
- 정적 분석의 reflection 우회처럼 자동 검사가 보장하지 못하는 범위를 함께 쓴다.
### 6.6 개요의 분류명을 문장 머리에 반복하지 않는다
8편에서 `첫 번째 제약은`이라는 문장 형식은 확인되지 않았다. 순서 표현은 존재했지만 용도가 달랐다. 실제 처리 단계, 두 가지 입력 방법, 여러 레이어, 차트처럼 **순서 자체가 내용인 대상**을 구분할 때 사용했다. 반면 문제와 제약은 대체로 구체적인 상태와 그 결과를 바로 서술했다.
예를 들어 표본은 다음과 같은 관계를 문장에 드러낸다.
| 문장 역할 | 표본에서 관찰한 형식 | 적용 경계 |
|---|---|---|
| 문제 전환 | 정상적으로 보이던 상태 뒤에 달라진 조건과 비용을 `하지만`, `문제는`, `다만`으로 연결 | 접속어 자체를 의무화하지 않고 실제 역접 관계가 있을 때만 사용 |
| 인과 연결 | 앞 문장의 상태를 `이 때문에`, `그 결과`, `그래서`, `이에`로 다시 받아 선택이나 결과로 연결 | 지시어가 가리키는 원인이 바로 앞 문맥에 명확해야 함 |
| 선택 이유 | 후보나 기준을 먼저 제시하고, 선택 문장에서 현재 조건과 제외 이유를 함께 설명 | 제품 이름이나 장점 목록만으로 선택을 정당화하지 않음 |
| 질문 | 질문형 heading이나 짧은 전환 질문을 두고 바로 사례·설명·결과로 답함 | 답하지 않는 수사 질문을 장식처럼 반복하지 않음 |
| 순서 표현 | 실제 단계, 방법, 레이어, 도표의 순서를 구분 | 추상적인 section intent를 산문으로 읽어 주는 용도로 사용하지 않음 |
| 프로젝트 목소리 | `팀에서는`, `저희는`, `우리는`으로 판단 주체와 적용 범위를 밝힘 | 모든 문장을 1인칭으로 쓰거나 조직의 선택을 보편 법칙으로 확대하지 않음 |
하네스 적용:
- outline의 `constraints`, `options`, `decision_rationale`은 작성자가 충족해야 할 의미 계약이지 독자에게 그대로 읽어 줄 문장 표지가 아니다.
- 문단은 가능하면 행위자·상태·변화·영향 중 하나를 바로 제시한다.
- 연속된 병렬 항목이 실제로 필요하면 목록이나 의미 있는 소제목을 사용한다.
- `첫 번째/두 번째/세 번째 + 추상 분류명`으로 문단을 반복 시작하면 deterministic lint가 `STYLE001` warning을 낸다.
- editor reviewer는 정보 구조가 문장 템플릿으로 노출됐는지, 질문이 바로 답을 얻는지, 접속어가 실제 논리 관계를 가리키는지 별도로 검사한다.
이 규칙은 우아한형제들의 문장을 복제하기 위한 것이 아니다. 조사 표본에서 확인한 **구체성, 관계가 드러나는 전환, 판단 주체, 순서 표현의 제한된 용도**를 하네스의 작성·검토 기준으로 번역한 것이다.
## 7. 우아한테크코스와 Tecoble에서 가져온 학습형 글 패턴
우아한테크코스 조직은 교육 자료와 학습 기록을 공개하고 있으며, Tecoble에는 팀 프로젝트에서 겪은 문제를 출발점으로 단계적 해결 과정을 설명하는 글이 축적돼 있다. 이를 공식 글쓰기 교과과정 전체로 일반화하지 않고, 학습형 기술 글에서 유용한 다음 패턴만 반영했다.
- 자신이 놓였던 프로젝트 상황과 선행지식을 먼저 밝힌다.
- 작은 재현 사례에서 출발해 개념을 확장한다.
- 처음 시도와 실패 이유를 숨기지 않는다.
- 최종 코드만 보여 주지 않고 판단이 바뀐 과정을 설명한다.
- 독자가 따라 할 수 있도록 입력, 결과, 검증 지점을 제공한다.
이 패턴은 `tutorial`, `explanation`, 입문자 대상 `technical_blog`에 적용한다. 숙련 독자를 위한 reference 문서에는 같은 서사 구조를 강제하지 않는다.
## 8. 일반 기술 문서 원칙과의 결합
우아한형제들 표본의 문제 해결 서사만으로 모든 문서 유형을 설계할 수는 없다. 다음 공식·표준 자료를 함께 사용한다.
- Google Technical Writing: 독자, 범위, 문단 중심점, outline, 점진적 상세화
- GitHub Docs content design: 사용자 목표, 콘텐츠 유형, 결론 우선, 의미 있는 heading
- Diátaxis: tutorial, how-to, explanation, reference의 목적 분리
- OASIS DITA: concept, task, reference, troubleshooting의 정보 구조
- Kubernetes documentation types: task와 tutorial의 선행 조건, 단계, 검증
이를 바탕으로 ClariDoc은 일곱 문서 유형을 분리한다.
| 유형 | 독자가 끝내려는 일 | 핵심 질문 사슬 |
|---|---|---|
| `technical_blog` | 문제와 설계 판단 이해 | 문제 → 제약 → 대안 → 이유 → 구현 → 검증 → 비용 → 판단 |
| `tutorial` | 안내받으며 결과와 개념 학습 | 결과 → 준비 → 전체 경로 → 단계 → 체크포인트 → 검증 → 다음 학습 |
| `how_to` | 특정 작업 완료 | 적용 조건 → 사전 조건 → 절차 → 확인 → 롤백 → 문제 해결 |
| `explanation` | 개념과 인과 모델 이해 | 질문/답 → 기준점 → 모델 → 메커니즘 → 예시 → 대안 → 한계 |
| `reference` | 정확한 사실 조회 | 범위 → 구문 → 필드 → 동작 → 오류 → 최소 예시 → 관련 항목 |
| `troubleshooting` | 증상에서 원인과 복구로 이동 | 증상 → 영향 → 안전 → 진단 → 분기 → 조치 → 복구 → 예방 |
| `design_doc` | 대안을 비교하고 결정 | 요약 → 문제 → 목표 → 제약 → 대안 → 결정 → 구조 → 실패 → 배포 → 관측 → 위험 |
## 9. 모델 역할을 분리한다
하나의 모델이 작성과 자기검토를 모두 수행하면 같은 전제와 누락을 반복하기 쉽다. ClariDoc은 역할을 분리하고 자유 형식 감상이 아니라 JSON 계약으로 리뷰를 받는다.
| 역할 | 기본 provider | 검사 대상 |
|---|---|---|
| planner | Codex | 구조, reader question, evidence allocation |
| writer | Claude | 자연스러운 reader-facing prose |
| logic reviewer | Codex | 전제, 인과, 결론 |
| decision reviewer | Codex | 이유, 대안, 비용, 가드레일 |
| reader reviewer | Claude | 독자 맥락, 인지 부하, 정보 누락 |
| editor reviewer | Claude | 도입, 문단 초점, 전환, 반복, 상투 문구 |
| evidence reviewer | Antigravity | source fit, status, 과장, provenance 누출 |
| operations reviewer | Antigravity | 안전, 검증, 롤백, 실패 경로 |
| reviser | Claude | blocker와 error 수정 |
모델을 다르게 배치해도 진실이 자동으로 보장되는 것은 아니다. 결정적 lint, source hierarchy, manifest, 사람 검토가 함께 필요하다.
## 10. 품질 게이트가 증명하는 것과 증명하지 않는 것
품질 게이트는 다음을 재현 가능하게 확인한다.
- 문서 유형의 필수 섹션이 존재하고 순서를 지키는가
- 작성 과정의 메타 문장이 독자용 글에 누출됐는가
- 선택 선언에 이유, 대안, 비용, 가드레일이 있는가
- 절차에 사전 조건, 검증, 중단, 복구가 있는가
- provider 응답이 계약 형식을 지켰는가
- 산출물과 provenance의 hash가 일치하는가
다음은 증명하지 않는다.
- source 문장이 현실 세계에서 참이라는 것
- 모델 reviewer의 합의가 도메인 정답이라는 것
- 코드와 명령이 대상 시스템에서 안전하게 실행된다는 것
- local test 결과가 production 효과를 보장한다는 것
- 표본에서 추출한 글쓰기 패턴이 우아한형제들의 공식 규정이라는 것
Mock provider PASS는 파이프라인 배선과 검사기의 동작만 검증한다. 실제 문서 품질 점수로 사용하지 않는다.
## 11. 최종 작성 원칙
ClariDoc이 기술 글에 요구하는 핵심은 다음 한 문장으로 정리할 수 있다.
> 독자에게는 문제와 판단의 흐름만 보이고, 검토자에게는 그 판단이 어디에서 왔는지 끝까지 추적되어야 한다.
이를 위해 최종 글은 다음 순서를 지향한다.
```text
이 작업은 언제 적용하는가?
시작 조건은 무엇인가?
최소 절차는 무엇인가?
성공을 어떻게 확인하는가?
실패하면 어떻게 되돌리는가?
대표적인 문제는 어떻게 진단하는가?
실제 문제 장면
단순한 해결을 막은 제약
현실적인 대안과 실패 지점
선택과 선택 이유
받아들인 비용과 지킨 경계
코드·데이터·제어 흐름
→ 검증 결과와 검증하지 못한 범위
→ 다른 환경에 적용할 판단 기준
```
### 4.4 설명
```text
핵심 질문과 답은 무엇인가?
→ 무엇에 빗대어 이해할 수 있는가?
→ 핵심 모델은 무엇인가?
→ 원인과 결과는 어떻게 이어지는가?
→ 구체적인 사례는 무엇인가?
→ 대안과 다른 관점은 무엇인가?
→ 모델의 한계는 무엇인가?
→ 실무 판단에는 어떤 의미가 있는가?
```
### 4.5 참조
```text
어떤 버전과 범위를 다루는가?
→ 정확한 구문은 무엇인가?
→ 필드와 기본값은 무엇인가?
→ 정상 동작과 부작용은 무엇인가?
→ 어떤 오류가 발생하는가?
→ 최소 예시는 무엇인가?
→ 관련 항목은 무엇인가?
```
### 4.6 트러블슈팅
```text
정확한 증상은 무엇인가?
→ 영향 범위는 어디까지인가?
→ 증거와 복구점을 어떻게 보존하는가?
→ 가장 싼 비파괴 진단은 무엇인가?
→ 관측 결과에 따라 원인이 어떻게 갈리는가?
→ 확인된 원인에 어떤 최소 조치를 하는가?
→ 복구를 어떻게 검증하는가?
→ 재발을 어떻게 막고 언제 에스컬레이션하는가?
```
### 4.7 설계 문서
```text
어떤 결정을 요청하는가?
→ 해결할 문제는 무엇인가?
→ 목표와 비목표는 무엇인가?
→ 요구와 제약은 무엇인가?
→ 가능한 대안은 무엇인가?
→ 무엇을 선택하며 왜인가?
→ 아키텍처와 상태 흐름은 무엇인가?
→ 실패·보안·운영 위험은 무엇인가?
→ 어떻게 점진 배포하고 되돌리는가?
→ 성공을 무엇으로 관측하는가?
→ 열린 위험과 가정은 무엇인가?
```
## 5. 모델별 역할을 나눈 이유
모델 이름 자체가 품질을 보장하지는 않는다. 이 하네스는 제공자별 “성격”을 전제로 하지 않고, 역할 계약과 출력 검증으로 책임을 분리한다.
- Codex 어댑터는 반복 가능한 CLI 파이프라인에 적합한 `codex exec` 표면을 사용한다.
- Claude 어댑터는 stdin으로 긴 작업을 넘길 수 있는 `claude -p` print mode를 사용한다.
- Antigravity 어댑터는 Python SDK의 `Agent``LocalAgentConfig`를 사용한다.
- 실제 모델 ID는 구성에 명시할 수 있지만 기본 예제는 계정·조직별 가용성이 달라 빈 값으로 둔다.
- provider가 반환한 JSON은 내부 dataclass 계약으로 다시 파싱하며, 구조가 틀리면 폴백 또는 실패 정책을 적용한다.
## 6. 품질 평가가 의미하는 것
### PASS가 의미하는 것
- 문서 유형별 필수 구조가 존재한다.
- 설정한 lint와 독립 리뷰의 복합 기준을 만족한다.
- blocker/error 한도를 넘지 않았다.
- 실행 과정과 결과가 저장되었다.
### PASS가 의미하지 않는 것
- 모든 사실이 참이라는 보증
- 코드 예제가 실제 환경에서 동작한다는 보증
- 보안, 법률, 규제, 의료, 재무 적합성
- 독자 연구나 사용성 테스트를 대체한다는 의미
- Mock provider 점수가 실제 모델 또는 실제 문서 품질을 증명한다는 의미
## 7. 설계상 의도적인 한계
1. **웹 수집기는 포함하지 않았다.** URL을 자동 방문해 진실로 취급하는 대신, 작성자가 출처별 fact를 명시하게 했다.
2. **자연어 의미 검증은 완전하지 않다.** 인용 ID가 있어도 출처가 그 문장을 지지하는지는 reviewer와 사람이 확인해야 한다.
3. **휴리스틱은 언어별 오차가 있다.** 한국어와 영어의 길이·문장 분리·표현 차이를 완전히 모델링하지 않는다.
4. **다중 모델 합의는 진실의 증명이 아니다.** 서로 다른 모델이 같은 잘못된 전제를 공유할 수 있다.
5. **문서 유형은 시작점이다.** 큰 문서 세트는 여러 유형으로 분리하거나 명시적으로 조합해야 한다.
6. **실제 독자 검증이 최종 기준이다.** 검색 성공률, 과업 완료율, 오류율, 읽기 중 이탈, 지원 문의 감소 같은 운영 지표로 개선해야 한다.
## 8. 결론
ClariDoc의 핵심은 모델에게 “논리적으로 써 달라”고 부탁하는 것이 아니다. 논리의 구성요소를 계약으로 만들고, 독자 질문의 순서를 문서 유형별로 고정하며, 작성·검토·수정·감사의 경계를 코드로 분리하는 것이다.
이 구조는 문체를 획일화하기 위한 것이 아니라, 문체보다 먼저 충족되어야 할 이해 가능성의 최소 골격을 제공한다. 프로젝트별 용어, 브랜드 보이스, 실제 독자 데이터가 있으면 그 정보가 일반 규칙보다 우선한다.
전체 출처와 코드 대응표는 [`SOURCE_MATRIX.md`](SOURCE_MATRIX.md)를 참조한다.
이 구조는 미문을 보장하지 않는다. 대신 독자가 “무엇을 했는가”뿐 아니라 “왜 그랬고, 어디까지 믿어도 되는가”를 판단할 수 있는 최소 조건을 만든다.
+84 -44
View File
@@ -1,52 +1,92 @@
# 조사 출처와 하네스 적용 매트릭스
# 조사 출처와 ClariDoc 적용 매트릭스
> 조사·접근일: 2026-07-23
> 선택 기준: 공식 지침, 표준, 원 논문, 또는 실제 기술 조직이 발행한 엔지니어링 글
이 문서는 조사 자료를 하네스 규칙으로 번역한 기록이다. 특정 조직의 글 몇 편을 공식 편집 규정으로 일반화하지 않는다. 공개 기술 글에서 반복 관찰한 패턴은 `corpus-derived profile`로 표시하고, 공식 문서·표준과 구분한다.
이 표는 출처 내용을 그대로 규칙으로 복제한 것이 아니라, 반복되는 원칙을 ClariDoc의 계약·구조·검사로 번역한 기록이다.
## 1. 프로젝트 내부 근거 구조
| ID | 출처 | 유형 | 핵심 관찰 | ClariDoc 적용 | 주의점 |
| ID | 자료 | 분류 | 관찰 | 하네스 적용 | 경계 |
|---|---|---|---|---|---|
| R01 | [Google developer documentation style guide](https://developers.google.com/style) | 공식 편집 지침 | 기술 독자에게 명확하고 일관되게 쓰되 프로젝트별 스타일을 우선하고, 규칙보다 실제 독자 명확성을 우선한다. | 브리프의 `tone`, 프로젝트 규칙 우선 원칙, 일관성 중심 lint | 스타일 지침은 정보 구조 전체를 대신하지 않는다. |
| R02 | [Google Technical Writing: Documents](https://developers.google.com/tech-writing/one/documents) | 공식 교육 자료 | 범위와 비범위, 대상 독자와 사전지식, 시작부 핵심 요약, 익숙한 것과의 연결, 독자 요구에 따른 조직을 권한다. | `scope`, `non_scope`, `audience`, `prior_knowledge`, `core_message`, `mental_model` | 입문 교육 자료이므로 고위험 운영 문서의 모든 요구를 다루지는 않는다. |
| R03 | [Google Technical Writing One summary](https://developers.google.com/tech-writing/one/summary) | 공식 교육 자료 | 문단 첫 문장에 중심점을 두고 한 문단은 한 주제에 집중하며, 문서 시작에서 범위·독자·핵심점을 제시한다. | 장문 문단/문장 lint, 오프닝 계약, one-question-per-section | 언어별 문장 길이 기준은 휴리스틱으로 조정해야 한다. |
| R04 | [Google Technical Writing: Organizing large documents](https://developers.google.com/tech-writing/two/large-docs) | 공식 교육 자료 | outline과 계층형 heading, 관련 주제의 묶음, 점진적 공개가 긴 문서 탐색과 이해를 돕는다. | outline 선행, heading 계층 검사, progressive disclosure prompt | 짧은 글에는 과도한 계층이 오히려 방해가 될 수 있다. |
| R05 | [GitHub Docs best practices](https://docs.github.com/en/contributing/writing-for-github-docs/best-practices-for-github-docs) | 공식 콘텐츠 설계 지침 | 독자·목적·콘텐츠 유형을 먼저 정하고, 중요도와 사용 순서로 조직하며, 한 문장/문단 한 생각, 결론 우선, 점진적 상세화, 의미 있는 소제목을 사용한다. | `Brief`, `DocumentType`, 구조 계약, 제목·문단 lint, answer-first prompt | GitHub 제품 문맥의 예시는 일반화할 때 조정이 필요하다. |
| R06 | [GitHub Docs content design principles](https://docs.github.com/en/contributing/writing-for-github-docs/content-design-principles) | 공식 콘텐츠 원칙 | 사용자 목표, 고가치 시나리오, “필요한 만큼만”, 명확성·의미·정확성·일관성을 우선한다. | `reader_goal`, scope/non-scope, 불필요 섹션 억제, quality gate | “충분한 문서량”은 조직과 위험도에 따라 달라진다. |
| R07 | [Diátaxis](https://diataxis.fr/) | 문서 아키텍처 프레임워크 | 튜토리얼, 하우투, 참조, 설명은 서로 다른 사용자 요구와 작성 방식을 가진다. | 네 기본 유형을 중심으로 `DocumentType` 설계 | 기술 블로그·트러블슈팅·설계 문서는 별도 실무 패턴을 추가했다. |
| R08 | [OASIS DITA technical content elements](https://docs.oasis-open.org/dita/dita/v1.3/errata02/os/complete/part2-tech-content/langRef/containers/technical-content-elements.html) | 표준 | Concept, Task, Reference, Troubleshooting을 분리한다. Task는 context, prerequisites, steps, expected result, example, next steps 구조를 가진다. | 절차형 구조와 트러블슈팅 유형, prerequisites/verification/next steps | DITA XML 요소를 구현한 것이 아니라 정보 유형만 참고했다. |
| R09 | [Kubernetes page content types](https://kubernetes.io/docs/contribute/style/page-content-types/) | 대규모 오픈소스 공식 지침 | Concept, Task, Tutorial, Reference별로 overview, prerequisites, steps, objectives, cleanup, examples 등의 권장 섹션이 다르다. | tutorial/how-to/reference 섹션 계약, cleanup/rollback, next steps | Kubernetes 사이트 템플릿 자체는 ClariDoc에 복제하지 않았다. |
| R10 | [Microsoft Writing Style Guide](https://learn.microsoft.com/en-us/style-guide/welcome/) | 공식 편집 지침 | 기술 내용을 단순하고 직접적이며 명확한 언어로 전달한다. | 전문적이고 직접적인 기본 tone, 간결성 lint/review | 브랜드 보이스는 프로젝트별로 달라질 수 있다. |
| R11 | [Microsoft: Writing for all abilities](https://learn.microsoft.com/en-us/style-guide/accessibility/writing-all-abilities) | 공식 접근성 지침 | heading level로 계층을 전달하고, 목록·표·제목으로 관계를 강화하며, 위치만 가리키는 표현을 피한다. | heading-level 검사, scan surface, 의미 있는 제목 | 접근성 전체 표준을 구현한 것은 아니다. |
| R12 | [Sweller & Cooper, 1985, worked examples](https://doi.org/10.1207/s1532690xci0201_3) | 원 연구 | 초보 학습에서 완성된 해결 과정을 연구 대상으로 삼아 worked example의 학습 효과를 보였다. | 시작 상태부터 결과까지 이어지는 `worked_example`, checkpoint | 대수 학습 결과를 모든 기술 문서에 직접 일반화하지 않는다. 설계 가설로 사용한다. |
| R13 | [Mautone & Mayer, 2001, signaling](https://doi.org/10.1037/0022-0663.93.2.377) | 원 연구 | 요약, section heading, 인과 연결어 등 구조 신호가 설명의 조직을 드러내고 전이 수행에 영향을 주었다. | reader question, meaningful heading, transition, causal chain | 멀티미디어 학습 실험이며 실제 개발자 문서와 독자군이 다르다. |
| R14 | [Netflix: In-House LLM Serving at Netflix](https://netflixtechblog.com/in-house-llm-serving-at-netflix-a5a8e799ea2c) | 실제 엔지니어링 글 | 글의 초점과 대안을 먼저 밝히고, 아키텍처 개요 뒤에 의존 순서의 설계 결정, 운영에서 드러난 문제를 설명한다. | 기술 블로그의 promise → architecture → decisions → operational evidence → lessons 흐름 | 단일 최신 표본이며 Netflix 전체 글의 대표라고 볼 수 없다. |
| R15 | [Cloudflare: Building Jetflow](https://blog.cloudflare.com/building-jetflow-a-framework-for-flexible-performant-data-pipelines-at-cloudflare/) | 실제 엔지니어링 글 | 문제와 프레임워크 구조, 구체적 데이터베이스 사례, 성능·편의성의 트레이드오프와 교훈을 연결한다. | mechanism, worked example, evidence, tradeoffs | 제품·워크로드 특화 선택을 일반 처방으로 사용하지 않는다. |
| R16 | [Dropbox: Feature store powering real-time AI](https://dropbox.tech/machine-learning/feature-store-powering-realtime-ai-in-dropbox-dash) | 실제 엔지니어링 글 | 왜 기존 해법이 맞지 않았는지, 목표·요구사항, 설계, 속도·규모·신선도, 트레이드오프와 교훈을 예고한다. | context/constraints → goals → mechanism → evidence → lessons | 회사 블로그는 논문식 검증이 아니라 실무 설명이다. |
| R17 | [AWS Builders Library: Making retries safe with idempotent APIs](https://aws.amazon.com/builders-library/making-retries-safe-with-idempotent-APIs/) | 실제 설계 설명 | 단순화된 가정을 먼저 드러내고, timeout으로 상태가 불명확해지는 구체적 시나리오를 통해 부작용과 설계 원리를 설명한다. | 가정·실패 조건·worked scenario·reconciliation을 기술 블로그 구조에 반영 | 특정 AWS 설계 경험이며 모든 API에 동일하게 적용되지 않는다. |
| R18 | [AWS Builders Library: Timeouts, retries, and backoff with jitter](https://aws.amazon.com/builders-library/timeouts-retries-and-backoff-with-jitter/) | 실제 운영 설명 | 재시도·timeout의 위험, 멱등성, backoff/jitter, 부하 증폭과 같은 운영 메커니즘을 실패 관점에서 연결한다. | 예제 source pack, mechanism/failure/tradeoff/verification 구조 | 시점과 서비스 맥락을 본문에 명시해야 한다. |
| P01 | `llm-wiki-private/README.md` | repository operating contract | raw 자료를 canonical로 승급한 뒤 외부 산출물을 만들고, 근거 없는 결정은 표시해야 한다 | local corpus source hierarchy, canonical 우선, status 보존 | raw를 공개 글의 현재 사실로 바로 사용하지 않 |
| P02 | `raw/branch-notes/feature-application-port-usecase-contract.md` | project decision record | Spring DI 허용 이유, 수용 비용, 금지 경계, TransactionPort와 검증 rule이 함께 기록됨 | decision-rationale retrieval fixture, golden example | SLF4J 선택 이유는 이 자료가 뒷받침하지 않음 |
| P03 | `wiki/projects/ca-tmpl/clean-architecture-package-layout.md` | canonical project state | module 경계, Gradle/ArchUnit 이중 검사, reflection 우회 한계, local verification 범위를 기록 | 현재 상태·검증·한계 근거 | branch-note의 과거 명칭보다 canonical 상태를 우선 |
| P04 | `raw/branch-notes/feature-log-management-contract.md` | project decision record | logging 정책은 있으나 application-core의 SLF4J 사용 이유는 명시하지 않음 | unsupported rationale를 추론하지 않는 negative fixture | 단어가 등장하는 것과 선택 이유가 있는 것은 다름 |
## 반복 패턴과 구현 위치
## 2. 우아한형제들 기술 블로그 표본
| 반복 패턴 | 구현 위치 |
|---|---|
| 독자와 과업을 먼저 정의 | `src/claridoc/models.py``Audience`, `Brief` |
| 유형별로 정보 요구를 분리 | `DocumentType`, `src/claridoc/structures.py` |
| 범위·비범위·버전·선행조건 | `Brief`, `Constraints`, opening lint |
| 결론 우선과 점진적 상세화 | `STRUCTURE_SPECS`, `src/claridoc/prompts.py` |
| 섹션별 질문·목적·전환 | `OutlineSection` |
| 예시와 체크포인트 | `worked_example`, `checkpoint`, type-specific lint |
| 절차의 검증·복구 | `verification`, `rollback`, `SAFE001` |
| 출처 단위 추적 | `SourcePack`, `EVD001``EVD006` |
| 대안·트레이드오프·한계 | 유형 계약, `TYPE006` |
| 작성자와 검토자 역할 분리 | `PipelineConfig.reviewers`, provider adapters |
| 결정적 검사 + 모델 판단 | `lint_document`, composite quality gate |
| 재현과 감사 | raw responses, events, rounds, `manifest.json` |
| ID | 출처 | 분류 | 반복 관찰 | ClariDoc 적용 | 일반화 경계 |
|---|---|---|---|---|---|
| W01 | [B마트 OMS의 물류주문관리를 통한 출고 최적화](https://techblog.woowahan.com/22263/) | engineering case study | 고객·라이더·현장 작업자의 목표와 물리적 제약을 구체적인 주문 장면으로 제시하고, 문제/기획/기술/성과 순서로 전개 | `problem_scene`, stakeholder cost, mechanism, evidence verification | 단일 글의 section 명칭을 모든 글에 강제하지 않음 |
| W02 | [Polars로 데이터 처리를 더 빠르고 가볍게 with 실무 적용기](https://techblog.woowahan.com/18632/) | engineering case study | 팀의 데이터 처리 맥락과 예상 독자를 먼저 밝히고, 도구 선택의 조건을 구체화 | audience/prior knowledge, problem context, option criteria | 성능 수치와 도구 결론은 해당 사례에만 적용 |
| W03 | [LLMOps로 확장하는 AI플랫폼 2.0](https://techblog.woowahan.com/22839/) | platform case study | 운영 문제를 구체적인 실패로 분해하고 후보 솔루션의 장단점을 비교한 뒤 선택 이유를 설명 | `options`, `decision_rationale`, accepted cost, problem→solution mapping | 후보 평가를 보편적인 제품 순위로 사용하지 않음 |
| W04 | [배달의민족 안드로이드 7.27.0 장애 회고](https://techblog.woowahan.com/2524/) | incident retrospective | 변경 맥락, 장애 증상, 해결 과정, 놓친 조건, 이후 개선을 시간 흐름으로 공개 | troubleshooting/retrospective chronology, failure condition, prevention | 오래된 사례의 구체 기술 결론은 현재 Android에 일반화하지 않음 |
| W05 | [누구나 할 수 있는 10배 더 빠른 배치 만들기](https://techblog.woowahan.com/13569/) | performance case study | 평소에는 문제가 없던 배치가 배포와 충돌하면서 리스크가 된 장면, 병목 확인, 최적화, 운영 부작용, 완화까지 연결 | state-change opening, contrast transition, measurement→decision→remaining cost | 제목의 배수와 측정 결과는 해당 환경에만 적용 |
| W06 | [셀프서비스, 챗봇에게 물어보세요](https://techblog.woowahan.com/16021/) | product engineering case study | 사용자 불편에서 기능 목적을 도출하고 질문형 heading으로 설계 판단을 전환하며, 선택 이유는 기준 목록과 대안 비교로 설명 | concrete actor/cost, immediate question-answer, criteria-before-choice | 친근한 종결어미와 독자 호명은 모든 글에 의무화하지 않음 |
| W07 | [우아한형제들 디자인 시스템에 시각적 회귀 테스트 적용하기](https://techblog.woowahan.com/17081/) | frontend testing case study | 수동 확인 비용을 구체화한 뒤 도구와 테스트베드를 같은 기준으로 비교하고 제외 이유를 짧게 명시 | problem consequence, criteria list, concise rejection reason, question→answer | 도구 선정 결과는 당시 디자인 시스템 조건에 한정 |
| W08 | [회원시스템 이벤트기반 아키텍처 구축하기](https://techblog.woowahan.com/7835/) | architecture case study | 트래픽 증가와 시스템 분리의 인과를 짧은 문단으로 전개하고, 질문형 heading 뒤 동기 HTTP·별도 스레드·메시징 대안을 차례로 검토 | short causal paragraphs, project voice, alternative mechanism comparison | 이벤트 아키텍처를 모든 시스템의 기본값으로 일반화하지 않음 |
## 해석 원칙
### 문장 형식 관찰
- 여러 출처에 반복되는 원칙은 기본값으로 채택했다.
- 특정 조직에만 해당하는 스타일은 계약이 아니라 예시로 남겼다.
- 인지 연구 결과는 직접적인 제품 품질 보증이 아니라 구조 설계의 근거로 제한했다.
- 실제 엔지니어링 글의 패턴은 관찰적 추론이며, 글의 목적에 따라 순서를 변경할 수 있다.
- 프로젝트별 스타일, 독자 조사, 실제 오류 데이터가 있으면 이 일반 매트릭스보다 우선한다.
8편의 도입, 문제 전환, 선택 이유, 구현 전환, 검증·결론 문단을 수동으로 비교했다. 이는 전체 게시물에 대한 빈도 분석이 아니라 제한된 목적 표본이다.
| ID | 관찰 | 근거 범위 | 하네스 적용 | 일반화 경계 |
|---|---|---|---|---|
| WS01 | 구체적인 팀·사용자·시스템 상태를 먼저 두고, 달라진 조건이 만든 비용으로 문제를 전환 | W01~W08 | writer opening/paragraph guidance, editor review | 모든 글이 같은 도입 길이나 어조를 쓰지는 않음 |
| WS02 | `하지만`, `문제는`, `다만`, `그 결과`, `그래서`, `이에`는 앞 문맥의 실제 역접·인과를 가리킬 때 사용 | W01~W08 | relation-bearing transition guidance | 특정 접속어의 사용 횟수를 품질 지표로 삼지 않음 |
| WS03 | 질문형 heading이나 짧은 질문 뒤에 바로 사례·설명·선택으로 답함 | W01, W02, W05, W06, W07, W08 | editor immediate-answer check | 모든 heading을 질문형으로 만들지 않음 |
| WS04 | 선택은 기준 목록, 후보의 제외 이유, 현재 조건을 거쳐 직접 서술 | W02, W03, W06, W07, W08 | decision sentence guidance | 각 글이 동일한 비교표 형식을 쓰지는 않음 |
| WS05 | 순서 표현은 실제 방법·단계·레이어·도표의 구분에 사용 | W03, W05, W06, W07 | ordinal-use boundary | 순서어 자체를 금지하지 않음 |
| WS06 | `첫 번째 제약은/두 번째 제약은/세 번째 제약은`처럼 추상 분류명을 연속 문단의 머리에 두는 형식은 표본에서 확인되지 않음 | W01~W08 | `STYLE001`, writer/editor/reviser guidance, golden regression | 0/8은 전체 우아한형제들 블로그에서 절대 사용되지 않는다는 뜻이 아님 |
| WS07 | `팀에서는`, `저희는`, `우리는`으로 선택 주체를 밝히되 판단 근거는 구체적인 상태와 비용에 둠 | W01, W02, W03, W05, W06, W07, W08 | project-local voice guidance | 1인칭 사용을 강제하지 않음 |
**적용 상태:** 위 8편에서 도출한 정보 전개와 문장 형식은 `WOOWAHAN_TECH_BLOG_KO`라는 corpus-derived profile이다. 우아한형제들의 공식 house style이라고 표기하지 않는다.
## 3. 우아한테크코스·학습형 개발 글
| ID | 출처 | 분류 | 관찰 | ClariDoc 적용 | 경계 |
|---|---|---|---|---|---|
| T01 | [woowacourse GitHub organization](https://github.com/woowacourse) | public learning corpus | 교육 자료, 미션, 학습 기록이 공개 repository로 축적됨 | 학습형 문서의 재현 가능한 입력과 단계, source corpus 후보 | 공개 repository 존재가 특정 글쓰기 방법론의 공식 증명은 아님 |
| T02 | [Tecoble](https://tecoble.techcourse.co.kr/) | learner-authored technical articles | 팀 프로젝트에서 겪은 문제, 처음 시도, 단계적 해결, 코드 예시를 중심으로 쓴 글이 반복됨 | tutorial/explanation의 problem-first opening, worked example, failed attempt | 개별 글의 품질과 사실성은 별도로 검토해야 함 |
## 4. 일반 기술 문서와 정보 구조
| ID | 출처 | 분류 | 핵심 원칙 | ClariDoc 적용 | 경계 |
|---|---|---|---|---|---|
| G01 | [Google developer documentation style guide](https://developers.google.com/style) | official editorial guidance | 명확성, 일관성, 프로젝트 스타일 우선 | tone/style profile, consistency review | 정보 아키텍처 전체를 대신하지 않음 |
| G02 | [Google Technical Writing: Documents](https://developers.google.com/tech-writing/one/documents) | official training | 독자, 범위, 핵심 메시지, 논리적 조직 | `Brief`, opening contract, reader goal | 고위험 운영 절차의 안전 요구는 별도 보강 |
| G03 | [Google Technical Writing: Organizing large documents](https://developers.google.com/tech-writing/two/large-docs) | official training | outline, heading hierarchy, progressive disclosure | deterministic outline, heading lint | 짧은 글에는 계층을 과도하게 늘리지 않음 |
| G04 | [GitHub Docs best practices](https://docs.github.com/en/contributing/writing-for-github-docs/best-practices-for-github-docs) | official content design | audience/purpose/type 선행, 결론 우선, 의미 있는 heading | one-question-per-section, answer-before-detail | GitHub product-specific 예시는 일반화 시 조정 |
| G05 | [GitHub Docs content design principles](https://docs.github.com/en/contributing/writing-for-github-docs/content-design-principles) | official content design | 사용자 목표, 필요한 만큼의 정보, 정확성·일관성 | reader goal, scope/non-scope, quality dimensions | 필요한 문서량은 위험도에 따라 다름 |
| G06 | [Diátaxis](https://diataxis.fr/) | documentation framework | tutorial, how-to, explanation, reference는 서로 다른 과업 | 네 기본 document type | technical blog, troubleshooting, design doc은 별도 확장 |
| G07 | [OASIS DITA technical content elements](https://docs.oasis-open.org/dita/dita/v1.3/errata02/os/complete/part2-tech-content/langRef/containers/technical-content-elements.html) | standard | concept, task, reference, troubleshooting 분리 | task prerequisites/steps/result, troubleshooting flow | DITA XML 구현이 아니라 정보 유형만 참고 |
| G08 | [Kubernetes page content types](https://kubernetes.io/docs/contribute/style/page-content-types/) | official OSS guidance | concept/task/tutorial/reference의 목적과 page structure 구분 | document type-specific structure | Kubernetes의 기여 규칙을 그대로 복제하지 않음 |
## 5. 학습과 인지 구조
| ID | 출처 | 분류 | 핵심 관찰 | ClariDoc 적용 | 경계 |
|---|---|---|---|---|---|
| C01 | worked-example 연구 | learning science | 초보자는 완성된 해결 경로와 중간 상태를 볼 때 문제 해결 schema를 형성하기 쉽다 | end-to-end worked example, checkpoint, result | 모든 숙련자용 reference에 서사를 강제하지 않음 |
| C02 | signaling 연구 | multimedia/learning science | heading, 요약, 인과 신호가 구조 파악을 돕는다 | reader question, transition, causal connector review | 기술 문서 효과에 대한 직접 실험으로 과장하지 않음 |
## 6. 규칙으로 번역된 핵심 결정
| 하네스 규칙 | 근거 조합 | 구현 위치 |
|---|---|---|
| 독자용 글과 내부 근거 추적 분리 | P01 + G02/G04 + 사용자 피드백 | `prompts.py`, `provenance.py`, `lint.py` |
| source hierarchy와 status 보존 | P01~P04 | `corpus.py`, `models.py` |
| decision unit 강제 | P02/P03 + W02/W03 | `structures.py`, `prompts.py`, `lint.py` |
| problem-scene first 기술 블로그 | W01~W08 + T02 | `structures.py`, `WOOWAHAN_TECH_BLOG_KO` profile |
| 정보 구조를 문장 틀로 노출하지 않음 | WS01~WS07 + 사용자 피드백 | writer/editor/reviser prompt, `STYLE001`, golden regression |
| source ID/path/access date 누출 차단 | 사용자 피드백 + P01 | `META001`, `EVD007`, `META004`, `DATE001/2` |
| 이유가 없는 SLF4J 주장 제거 | P04 negative evidence boundary | golden example, review prompt |
| local vs production verification 분리 | P03 + engineering case-study discipline | evidence/operations reviewer |
| Mock score를 품질 증거로 금지 | test validity boundary | pipeline warning, report, README |
## 7. 미해결 연구 과제
- lexical retrieval이 동의어와 간접 표현을 놓치는 경우를 줄이는 방법
- canonical과 branch-note가 충돌할 때 자동으로 authority를 판정하는 규칙
- 한국어 decision-rationale lint의 precision/recall 측정 corpus
- 실제 Codex/Claude/Antigravity 조합별 writer/reviewer 편향 비교
- 독자 테스트를 통한 `WOOWAHAN_TECH_BLOG_KO` profile의 이해도 검증
현재 프로필은 조사 표본과 프로젝트 요구를 바탕으로 한 설계 가설이다. 이를 공식 스타일이나 보편 법칙으로 주장하지 않는다.