문서 유지보수 전략
코드-문서 동기화, 자동 검증, stale 탐지
문서는 쓰는 것보다 유지하는 것이 훨씬 어렵습니다. AI를 활용하면 문서 유지보수를 대부분 자동화할 수 있습니다.
코드-문서 동기화
코드가 변경되면 관련 문서도 업데이트해야 합니다. 이를 CI 파이프라인으로 자동화합니다.
GitHub Action 예시
name: Docs Sync Check
on:
pull_request:
paths:
- 'src/**'
- 'docs/**'
jobs:
check-docs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Check docs need update
run: |
# src/ 변경 시 관련 docs/ 변경 확인
SRC_CHANGED=$(git diff --name-only origin/main | grep '^src/' || true)
DOCS_CHANGED=$(git diff --name-only origin/main | grep '^docs/' || true)
if [ -n "$SRC_CHANGED" ] && [ -z "$DOCS_CHANGED" ]; then
echo "::warning::소스 코드가 변경되었지만 문서 업데이트가 없습니다."
echo "관련 문서 업데이트가 필요한지 확인하세요."
fiPre-commit Hook
#!/bin/bash
# .husky/pre-commit
# API 라우트 변경 시 API 문서 갱신 확인
CHANGED=$(git diff --cached --name-only | grep 'src/api/')
if [ -n "$CHANGED" ]; then
echo "⚠️ API 라우트가 변경되었습니다. docs/api/ 문서도 업데이트했는지 확인하세요."
fi자동 검증 파이프라인
검증 항목
| 검증 | 도구/방법 | 자동화 |
|---|---|---|
| 내부 링크 유효성 | 빌드 시 확인 (dead link checker) | ✅ CI |
| 외부 링크 유효성 | curl -L 기반 HTTP 상태 확인 | ✅ 주간 크론 |
| 용어 일관성 | 용어집 대비 grep/lint | ✅ CI |
| frontmatter 필수 필드 | 커스텀 lint 규칙 | ✅ CI |
| 코드 블록 문법 | 언어별 parser | ✅ CI |
| 날짜/버전 최신성 | updatedAt 비교 | ⚠️ 반자동 |
| 사실 정확성 | AI 기반 교차검증 | ⚠️ 반자동 |
낡은 문서(Stale) 탐지
시간 기반 경고
# 문서 freshness 정책
freshness:
warn_after_days: 90 # 90일 미갱신 시 경고
critical_after_days: 180 # 180일 미갱신 시 리뷰 필수
exclude:
- docs/adr/ # ADR은 의도적으로 변경하지 않음
- docs/changelog.md # 자동 생성AI 기반 코드-문서 괴리 탐지
다음 문서와 현재 코드를 비교해서 불일치를 찾아줘.
문서: [문서 내용]
코드: [관련 코드 파일들]
확인할 것:
1. 문서의 API 설명이 실제 코드와 일치하는가
2. 문서의 설정 예시가 현재 설정과 일치하는가
3. 문서에서 언급하는 파일/함수가 실제 존재하는가
4. 삭제/이름 변경된 항목이 문서에 남아있는가Docs-as-Code
문서를 코드와 동일한 방식으로 관리합니다.
| 원칙 | 적용 |
|---|---|
| 버전 관리 | Git으로 문서 이력 추적 |
| 코드 리뷰 | PR로 문서 변경 리뷰 |
| CI/CD | 빌드 파이프라인에서 문서 검증 |
| 자동 배포 | main 머지 시 문서 사이트 자동 배포 |
| 이슈 트래킹 | 문서 개선 사항을 이슈로 관리 |
문서 부채 관리
문서가 1000페이지인데 20%가 outdated라면? 전부 한 번에 고치려 하지 마세요.
우선순위 매트릭스
| 우선순위 | 기준 | 조치 |
|---|---|---|
| P0 (즉시) | AI 에이전트가 자주 참조 + outdated | 이번 스프린트에 수정 |
| P1 (다음) | 사용자 대면 문서 + outdated | 다음 스프린트 |
| P2 (계획) | 내부 문서 + outdated | 분기 계획에 포함 |
| P3 (보류) | 거의 안 읽히는 문서 | 아카이빙 검토 |
코드 예시 컴파일 테스트
문서의 코드 블록이 실제로 동작하는지 자동 테스트할 수 있습니다.
# .github/workflows/docs-code-test.yml
name: Test Doc Code Examples
on:
push:
paths: ['docs/**']
jobs:
test-examples:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Extract and test code blocks
run: |
# docs/ 내 ```bash 블록을 추출해 syntax 검증
find docs -name '*.md' -exec grep -l '```bash' {} \; | \
while read f; do
echo "Checking: $f"
# shellcheck으로 bash 문법 검증
sed -n '/```bash/,/```/p' "$f" | \
grep -v '```' | shellcheck -
doneBefore/After
Before — 수동 관리:
- 위키에 누군가 문서를 업데이트하길 바람
- 코드 변경 후 문서는 나중에 (그리고 잊음)
- 연 1회 "문서 정리의 날" 이벤트
After — 자동화된 유지보수:
- PR에 문서 동기화 체크 자동 실행
- 90일 미갱신 문서에 자동 리뷰 요청
- AI가 코드-문서 불일치를 주간 리포트
체크리스트
| 항목 | 확인 |
|---|---|
| 문서가 Git으로 버전 관리되는가 | ☐ |
| CI에서 링크 유효성이 검증되는가 | ☐ |
| 코드 변경 시 문서 동기화 체크가 있는가 | ☐ |
| stale 문서 탐지 정책이 있는가 | ☐ |
| 문서 변경이 PR 리뷰를 거치는가 | ☐ |
| frontmatter 필수 필드 lint가 있는가 | ☐ |