콘텐츠로 이동

문서 사이트: MkDocs + Cloudflare Pages

맥락

프로젝트 문서(ADR, Runbook, Data Catalog)가 늘어나면서 마크다운 파일만으로는 탐색이 어려워졌다. 문서 사이트를 구축하되, 레포를 private으로 전환할 예정이므로 private repo를 무료로 지원하는 호스팅이 필요하다.

결정

MkDocs (Material 테마) 로 정적 사이트를 생성하고, Cloudflare Pages에 무료로 호스팅한다.

아키텍처

전체 흐름

개발자가 docs/*.md 수정 → main push
GitHub Actions (.github/workflows/docs.yml)
    │  1. actions/checkout — 소스 체크아웃
    │  2. actions/setup-python — Python 3.11 설치
    │  3. pip install mkdocs-material — MkDocs + Material 테마 설치
    │  4. mkdocs build --strict — docs/*.md → site/*.html 변환
    │  5. wrangler pages deploy — site/ 폴더를 Cloudflare에 업로드
Cloudflare Pages (CDN)
    │  정적 HTML/CSS/JS를 전 세계 300+ 엣지 노드에 캐싱
https://trend-collector-docs.pages.dev
    사용자 접속 → 가장 가까운 CDN 노드에서 응답

빌드 과정 상세

docs/                          site/ (빌드 결과물)
├── index.md            ──▶    ├── index.html
├── adr/                       ├── adr/
│   ├── 001-*.md        ──▶    │   ├── 001-*/index.html
│   └── ...                    │   └── ...
├── runbook/                   ├── runbook/
│   ├── operations.md   ──▶    │   ├── operations/index.html
│   └── ...                    │   └── ...
└── data-catalog/              ├── data-catalog/
    ├── sources.md      ──▶    │   ├── sources/index.html
    └── ...                    │   └── ...
                               ├── assets/     (CSS, JS, 폰트)
                               ├── search/     (검색 인덱스)
                               └── sitemap.xml

구성 요소

구성 요소 역할 비용
MkDocs 마크다운 → HTML 변환 (정적 사이트 생성기) 무료 (OSS)
Material for MkDocs 테마 (검색, 다크모드, 코드 하이라이트) 무료 (OSS)
GitHub Actions CI/CD (빌드 + 배포 자동화) 무료 (public repo 무제한, private 2000분/월)
Cloudflare Pages 정적 파일 호스팅 + CDN 무료 (500빌드/월, 대역폭 무제한)
pages.dev 도메인 자동 발급 서브도메인 무료

파일 구성

trend-collector/
├── mkdocs.yml                        # MkDocs 설정 (테마, 네비게이션, 플러그인)
├── docs/                             # 마크다운 소스
│   ├── index.md                      # 홈페이지
│   ├── architecture/overview.md      # 아키텍처 개요
│   ├── adr/                          # Architecture Decision Records
│   ├── runbook/                      # 운영 매뉴얼
│   └── data-catalog/                 # 데이터 명세서
├── .github/workflows/docs.yml       # 자동 빌드 + 배포 워크플로우
└── site/                             # 빌드 결과물 (.gitignore)

GitHub Secrets

Secret 용도
CLOUDFLARE_ACCOUNT_ID Cloudflare 계정 식별자
CLOUDFLARE_API_TOKEN Cloudflare Pages 편집 권한 토큰

워크플로우 트리거 조건

on:
  push:
    branches: [main]
    paths:
      - 'docs/**'       # 문서 내용 변경 시
      - 'mkdocs.yml'    # 설정 변경 시
  workflow_dispatch:     # 수동 실행

docs/ 또는 mkdocs.yml이 변경된 main push에서만 실행. 소스 코드만 변경된 경우 빌드하지 않음.

근거

  • 무료: 정적 파일만 CDN에 올리는 구조라 서버 비용이 없다. Cloudflare는 이를 유료 서비스(Workers, R2) 유입 경로로 활용하여 무료 제공.
  • Private repo 지원: GitHub Pages 무료 플랜은 public repo만 지원. Cloudflare Pages는 제한 없음.
  • 자동 배포: docs 변경 → push → 자동 빌드 + 배포. 수동 작업 불필요.
  • 성능: 전 세계 300+ CDN 노드에서 서빙. 별도 서버 운영보다 빠름.
  • 기존 인프라 활용: Cloudflare에 이미 haotoday.com이 등록되어 있어 커스텀 도메인 연결 용이.

검토한 대안

대안 장점 선택하지 않은 이유
GitHub Pages GitHub 네이티브, 설정 간단 Private repo에서 무료 사용 불가 (Pro $4/월 필요)
Netlify 무료, private repo 지원 Cloudflare에 이미 도메인 있어 통합 관리 유리
Vercel 무료, 빌드 빠름 정적 사이트에 과도한 기능, Cloudflare 통합 불가
자체 서버 (Nginx) 완전 제어 서버 관리 부담, CDN 없음, 비용 발생

결과

  • 문서 사이트: https://trend-collector-docs.pages.dev
  • 문서 변경 시 main push만으로 자동 배포
  • 커스텀 도메인 연결 가능 (예: docs.haotoday.com)
  • 월 500회 빌드 무료 (현재 사용량 대비 충분)