# Documentation Guide ## 1. 목적 이 가이드는 이 저장소의 기술 문서를 일관된 방식으로 작성하기 위한 기준입니다. 핵심 목표는 문서를 읽는 사람이 다음 질문에 답할 수 있게 만드는 것입니다. - 왜 이 결정을 했는가? - 대안은 무엇이었는가? - 실제로 어떻게 동작하는가? - 운영과 유지보수에 어떤 영향이 있는가? ## 2. 핵심 원칙 ### 2.1 기본 서술 순서 모든 기술 문서는 가능하면 다음 순서를 따릅니다. 1. `Why`: 어떤 문제를 해결하려는가 2. `What`: 구조와 핵심 컴포넌트가 무엇인가 3. `How`: 내부 동작과 적용 방법이 무엇인가 4. `Result`: 결과, 트레이드오프, 남은 리스크가 무엇인가 ### 2.2 좋은 문서의 기준 - 사용법보다 의사결정 근거가 더 중요합니다. - 대안 비교가 있어야 합니다. - 실제 겪은 문제와 해결 과정이 있어야 합니다. - 코드와 설명이 분리되지 않아야 합니다. - 운영 관점의 영향이 있으면 반드시 적습니다. ## 3. 문서 유형별 기준 이 repo 는 **ADR** + **트러블슈팅 / 런북** 두 축만 다룹니다. 일반 학습 노트나 인터뷰 준비, postmortem 같은 형식은 두지 않습니다 (개인 프로젝트 규모에 맞춤). | 유형 | 목적 | 권장 스타일 | 반드시 포함할 것 | |------|------|-------------|------------------| | ADR | 기술 선택 근거 기록 | ThoughtWorks Lightweight ADR | Context, Options, Decision, Consequences | | Architecture Doc | 구조와 동작 설명 | Google Design Doc | Scope, Goals, Diagram, Alternatives | | Runbook | 운영 절차 문서 | Docs-as-Code | Preconditions, Steps, Verification, Rollback | | Troubleshooting | 문제 해결 기록 | 기술블로그 스타일 | Symptom, Cause, Fix, Lesson | ## 4. 폴더 구조 원칙 ### 4.1 상위 구조 `docs/` 아래를 목적별로 나눕니다. - `docs/architecture/`: 시스템 구조와 설계 의도 - `docs/topics/`: 토픽별 ADR + 트러블슈팅 / 런북 - `docs/development/`: 로컬 개발 환경 / 실험 자료 - `docs/standards/`: 코딩 가이드 (언어 / 스프링 / DB / 웹 / 테스트 표준) - `docs/examples/`: 위 standards 의 적용 예시 - `docs/templates/`: 재사용 템플릿 (ADR / 런북 / 트러블슈팅) 같은 기술이 두 영역에 동시에 나타날 수 있습니다. 이때 기준은 *주제* 가 아니라 *문서 목적* 입니다. - `docs/topics/03-keycloak/`: Keycloak 아키텍처 ADR + 트러블슈팅 - `docs/development/keycloak/`: 로컬 실행 방법, realm import 파일 ### 4.2 토픽 폴더 구조 특정 기술을 깊이 정리할 때는 `docs/topics/` 아래에 번호형 폴더를 사용합니다. ```text docs/topics/ ├── 02-clean-architecture/ │ ├── README.md │ ├── 02-error-handling.md │ ├── 02a-validation-deep-dive.md │ └── 03-adr-boundary-refactoring.md ├── 03-keycloak/ │ ├── README.md │ ├── 01-architecture.md │ ├── 02-adr-keycloak-resource-server.md │ ├── 03-claim-role-design.md │ └── 04-adr-token-ownership-cleanup.md └── 04-logging/ ├── README.md ├── 01-architecture.md └── 02-runbook-log-correlation-and-dev-actuator.md ``` ### 4.3 파일명 규칙 - 순서를 표현하는 문서는 번호를 붙입니다. 예: `01-architecture.md` - ADR 은 `-adr-.md` 또는 `adr-why-.md` 형태를 사용합니다. - Troubleshooting / Runbook 은 제목만 봐도 목적이 드러나야 합니다. 예: `-runbook-log-correlation.md` - 각 토픽 폴더에는 반드시 `README.md` 를 둡니다. - 다이어그램 산출물은 `docs/architecture/diagrams/` 폴더에 모읍니다 (PNG / `.drawio` / `.excalidraw`). ## 5. 문서 작성 체크리스트 문서를 마무리하기 전에 아래 항목을 확인합니다. - 이 문서가 해결하려는 질문이 첫 화면에 드러나는가? - 선택 근거와 대안 비교가 있는가? - 다이어그램이나 흐름 설명이 있는가? - 실제 코드나 설정 예시가 있는가? - 실제 문제 사례 또는 운영 관점이 포함되었는가? - 결과와 남은 리스크가 정리되었는가? - 관련 README 에 링크를 추가했는가? ## 6. 문서별 최소 섹션 가이드 ### 6.1 ADR ```markdown # [선택한 결정] ## Context — 어떤 문제 / 제약이 있었는가 ## Options — 어떤 대안들이 있었는가 ## Decision — 무엇을 골랐는가 ## Consequences — 결과 / 트레이드오프 / 남은 리스크 ``` ### 6.2 아키텍처 문서 - Context & Scope - Goals / Non-Goals - Architecture Overview (다이어그램 필수) - Detailed Design - Alternatives Considered - Cross-cutting Concerns - Result / Enforcement ### 6.3 트러블슈팅 문서 - 한 줄 요약 - 배경 - 증상 - 원인 분석 - 해결 - 교훈 ### 6.4 Runbook - Preconditions (시작 전 상태) - Steps (실제 명령) - Verification (완료 확인) - Rollback (실패 시 복구) ## 7. 이 저장소에서의 권장 적용 방식 - 시스템 전체 구조는 `docs/architecture/` 에 둡니다. - 토픽 ADR + 트러블슈팅 / 런북은 `docs/topics/` 에 누적합니다. - 로컬 실행, 배포 보조 절차는 `docs/development/` 에 Runbook 템플릿으로 작성합니다. - 신규 문서를 추가할 때는 템플릿을 복사해 시작하고, 해당 토픽의 `README.md` 를 함께 갱신합니다. - 인프라 운영 문서 (k8s / vault / argocd / cert-manager 등) 는 이 repo 가 아니라 [Project-Infra](https://github.com/donghyeon-ka/Project-Infra) 에 둡니다. ## 8. 가장 중요한 원칙 가장 가치 있는 문서는 *"삽질 기록"* 입니다. 깔끔한 이론 요약만 있는 문서보다, 실제 문제를 어떻게 관찰하고 가설을 세우고 원인을 찾고 해결했는지를 남긴 문서가 더 오래 쓰입니다.