Wiki Quality Standards (위키 품질 기준)

Phase 1-3 Deliverable

DAP 위키의 모든 페이지가 만족해야 할 품질 기준. Frontmatter schema, 메타데이터 검증, 링크 규칙, 컨텐츠 기준을 명시.

/lint 스킬과 월간 Update 프로세스가 이 기준을 자동/수동으로 검증.


품질 기준 4가지 축

┌─────────────────────────────────────┐
│  Frontmatter Schema                 │  (타입별 필수/선택 필드)
│  (구조적 정합성)                     │
├─────────────────────────────────────┤
│  Metadata Validation Rules          │  (필드값 정확성 + 논리성)
│  (데이터 일관성)                     │
├─────────────────────────────────────┤
│  Link Validation Rules              │  (그래프 구조)
│  (참조 무결성)                       │
├─────────────────────────────────────┤
│  Content Quality Standards          │  (텍스트 + 구조)
│  (컨텐츠 충실도)                     │
└─────────────────────────────────────┘

1️⃣ Frontmatter Schema (페이지 타입별)

📄 sources/ 페이지

목적: 원본 source의 정보 + 요약 + 링크

필수 필드 (Required)

source_type: "article" | "document" | "video" | "dataset" | "report" | "book"
url: "https://..." | "internal" (for Mode A)
title: "[원본 제목]"  # 1줄, 최대 100자
author: "[저자명]" | "Unknown"
published: "YYYY-MM-DD" | "unknown"
harvested: "2026-04-27"  # 오늘 날짜 (자동 입력)
tags: ["source", "dap", "domain-category", "content-category"]  # 최소 3개

선택 필드 (Optional)

source_count: 1  # 항상 1 (선택사항, 자동 계산 가능)
valid_as_of: "2026-01-19"  # 수치/통계 있으면 필수
summary: "[한 문장 요약]"  # 선택
keywords: ["keyword1", "keyword2"]  # 검색용

검증 규칙

필드형식규칙Lint Check
source_typeenum7가지 중 하나✅ required
urlstringHTTP(S) 또는 “internal”✅ format check
titlestring1-100자✅ length
authorstring1-50자 또는 “Unknown”✅ length
publisheddateYYYY-MM-DD 또는 “unknown”✅ date format
harvesteddateYYYY-MM-DD (today)✅ = today
tagsarray≥3 항목, 첫 항목은 “source”✅ count + first
valid_as_ofdate없거나 YYYY-MM-DD⚠️ required if has numbers

🧠 concepts/ 페이지

목적: 핵심 개념/방법론 정의 + 출처 + 활용

필수 필드

tags: ["concept", "dap", "domain-category", "topic"]  # 최소 3개
created: "2026-04-27"  # 생성 날짜
updated: "2026-04-27"  # 마지막 수정 날짜
sources: ["", ""]  # wikilink 배열
source_count: 2  # sources 배열 길이와 일치해야 함

선택 필드

valid_as_of: "2026-04-27"  # 수치 있으면 필수
aliases: ["concept-alias"]  # 대체 이름
related_insights: [""]  # 관련 insights

검증 규칙

필드규칙Lint Check
tags첫 항목은 “concept”, 최소 3개✅ required
createdYYYY-MM-DD, ≤ updated✅ format + logic
updatedYYYY-MM-DD, ≥ created✅ format + logic
sourceswikilink 배열, 대상 존재✅ array + broken-link check
source_count= len(sources)✅ consistency
valid_as_of수치 있으면 필수, 6개월 초과 시 ⚠️⚠️ conditional

📋 projects/ 페이지

목적: 프로젝트 허브, 진행 상황, 관련 지식 링크

필수 필드

tags: ["project", "dap", ...]  # 첫 항목은 "project"
created: "2026-04-27"
updated: "2026-04-27"
status: "active" | "paused" | "closed"  # 상태
deadline: "2026-05-31"  # YYYY-MM-DD
started: "2026-04-27"
closed: "" | "2026-05-31"  # status=closed일 때만 필수
priority: 1 | 2 | 3  # 1=High, 2=Medium, 3=Low
effort: "S" | "M" | "L" | "XL"  # 예상 소요 시간/복잡도
related_concepts: [""]

선택 필드

related_sources: [""]
related_insights: [""]
related_entities: [""]
outcome: "[프로젝트 완료 조건]"

검증 규칙

필드규칙Lint Check
statusactive/paused/closed✅ enum
deadlineYYYY-MM-DD, ≥ today⚠️ future check
startedYYYY-MM-DD, ≤ updated✅ logic
closed"" (if active) or YYYY-MM-DD (if closed)✅ conditional
priority1-3✅ range
effortS/M/L/XL✅ enum
related_conceptswikilink 배열✅ array + broken-link

💡 insights/ 페이지

목적: 3개 이상 sources 합성 분석

필수 필드

tags: ["insight", "dap", "synthesis", ...]  # 첫 항목은 "insight"
created: "2026-04-27"
updated: "2026-04-27"
sources: ["", "", ""]  # ≥3
source_count: 3  # ≥3

선택 필드

valid_as_of: "2026-04-27"  # 비교 분석이면 권장
related_concepts: [""]

검증 규칙

필드규칙Lint Check
sources배열 길이 ≥ 3✅ min count
source_count= len(sources), ≥ 3✅ consistency
다른 필드concepts와 동일✅ as above

🏛️ entities/ 페이지

목적: 인물, 도구, 서비스, 조직 카탈로그

필수 필드

tags: ["entity", "dap", "entity-type"]  # 첫 항목은 "entity"
created: "2026-04-27"
updated: "2026-04-27"
entity_type: "person" | "tool" | "service" | "organization"

선택 필드

website: "https://..."
description: "[한 문장 설명]"
sources: [""]  # 언급된 sources
related_concepts: [""]

검증 규칙

필드규칙
entity_type4가지 중 하나
websiteHTTP(S) 형식 또는 공백
description1-200자

Entity 추가 정책 (Phase 1-5 추가)

질문: 언제 entity 페이지를 만들 것인가?

타이밍 기준

다음 경우 entity 페이지 생성 권장:

  1. 3회 이상 언급 (concept/source 여러 페이지에서 같은 도구/서비스 언급)

    • 예: AWS Glue, BigQuery, Databricks가 여러 concepts에 등장
    • 조치: entity 페이지 생성 → 도구별 특징·활용·관계 정리
  2. 링크의 허브 역할 (여러 concepts의 교점)

    • 예: Anthropic, OpenAI (AI 회사 여러 concept에서 참조)
    • 조치: entity 페이지로 중앙집중식 관리 + 관련 concepts 링크
  3. 비즈니스 의사결정에 영향 (우리 DAP 도메인에서 중요)

    • 예: Azure Data Factory (회사의 ETL 인프라)
    • 조치: entity 페이지로 기술 평가·비교 정리

실행 방법

  1. 소스 수집 후 synthesis mapping 시 도구/서비스 식별
  2. 현재 entities/ 확인: 이미 entity 페이지가 있는가?
  3. 없으면 생성:
    entity_type: "tool" | "service" | "organization" | "person"
    website: "https://..."
    description: "[한 문장 설명]"
    sources: [""]
    related_concepts: [""]

주의사항

  • Phase 1: concepts 먼저 (entity는 선택)
  • Phase 2: 3회 이상 언급된 도구만 entity로 진격
  • 중복 체크: entities/ 폴더에서 같은 이름의 페이지 있는지 확인

2️⃣ Metadata Validation Rules (메타데이터 검증)

날짜 논리

규칙: 시간의 흐름에 따라 일관성 있어야 함

created ≤ updated  (생성 후 수정 가능)
published ≤ harvested  (발행 후 수집)
started ≤ updated  (시작 후 수정 가능)
closed ≥ started  (시작 후 종료)
deadline ≥ today  (미래 날짜, 과거면 lint warning)

Lint Check:

  • ✅ 모든 date 필드는 YYYY-MM-DD 형식
  • ⚠️ deadline이 과거인 경우 (아직 진행 중인 프로젝트면 수정 필요)
  • 🔴 date 필드가 논리적 순서 위반

배열 일관성

source_count 규칙: frontmatter 배열 길이와 정확히 일치

sources:
  - "[[sources/data-architecture-basics-heartcount]]"
  - "[[sources/data-management-2026-trends]]"
  - "[[sources/etl-pipeline-design-principles]]"
source_count: 3  # ✅ 정확함

Lint Check:

  • ✅ source_count = len(sources)
  • 🔴 불일치 시 자동 수정 또는 경고

valid_as_of 규칙

조건부 필수:

  • 수치, 통계, 버전, 정책 등 시점 의존적 정보 있으면 필수
  • 정의, 개념 설명 등 시점 무관 정보면 선택

6개월 초과 경고:

today - valid_as_of > 180 days → ⚠️ lint warning
"This page's data is stale. Last verified: 2025-10-01"

Lint Check:

  • ✅ 조건부 검사 (페이지 내용 스캔하여 필요성 판단)
  • ⚠️ 6개월 초과 시 lint flag (자동 갱신 아님)

Tags 규칙

필수 구조:

  1. 첫 항목: 페이지 타입 (source/concept/project/insight/entity)
  2. 두 번째 항목: “dap” (모든 DAP 위키 페이지)
  3. 추가 항목: 도메인/주제 태그 (3-5개)

예시:

tags: [source, dap, etl, design-principles]
tags: [concept, dap, data-architecture, storage, lakehouse]
tags: [project, dap, wiki-operations, phase1]

Lint Check:

  • 🔴 첫 항목 ≠ 페이지 타입
  • 🔴 두 번째 항목 ≠ “dap”
  • 🟡 tags 배열 길이 < 3

Orphan 페이지 (역링크 0개)

정의: 어디서도 언급되지 않는 페이지

원인:

  1. 새로 만든 페이지 (아직 아무도 링크 안 함) → ✅ OK (일시적)
  2. 불필요한 페이지 (더 이상 쓸모없음) → 🔴 아카이브 또는 삭제 검토
  3. 링크 누락 (필요하지만 누군가 링크 깜빡함) → 🟠 링크 추가

Lint Check:

  • ✅ 자동 감지 (Obsidian 그래프 분석)
  • 수동 검토: “이 orphan이 정말 필요한가?”

정의: 대상이 없는 wikilink

예시:

[[concepts/non-existent-page]]  # ❌ 페이지 없음
[[concepts/lakehouse-architecture#wrong-section]]  # ❌ 섹션 없음

Lint Check:

  • ✅ 자동 감지 (파일 존재 확인)
  • 🔴 모든 broken link는 자동 fix 또는 수정 필수

양방향 링크 규칙 (Project ↔ Zettel)

원칙: Project → Zettel은 단방향만 (Zettel에서 Project 역링크 금지)

✅ 올바른 예

프로젝트 페이지:

related_concepts:
  - "[[concepts/lakehouse-architecture]]"
  - "[[concepts/etl-design-framework]]"

Concepts 페이지 (프로젝트 역링크 NO):

## 관련 개념
 
- [[concepts/etl-design-framework]] — 데이터 처리
- [[wiki/concepts/data-quality-and-governance]] — 품질 관리

❌ 잘못된 예

Concepts 페이지 (프로젝트 역링크 있음):

[[wiki/work/projects/dap-wiki-ops-master-plan]]에서 사용됨.
← 이것은 위반! Zettel은 project를 모른다.

Lint Check:

  • 🔴 Zettel 본문에서 [[projects/ 패턴 감지 → 경고

Cross-references (개념 간 연결)

규칙: 관련 concepts는 양방향 링크로 명시

예시:

## 관련 개념
 
- [[concepts/etl-design-framework]] — ETL 파이프라인 설계
- [[wiki/concepts/data-quality-and-governance]] — 품질 관리

Lint Check:

  • 🟡 관련 concepts가 최소 1개는 있어야 함 (고아 개념 방지)

4️⃣ Content Quality Standards (컨텐츠 기준)

최소 길이 기준

페이지 타입최소 길이기준
sources200자핵심 Takeaway + 상세 요약
concepts500자정의 + 특징 + 활용
projects300자목표 + 컨텍스트 + 진행 상황
insights300자합성 분석 (최소 3개 sources)
entities100자기본 설명

Lint Check:

  • ⚠️ 최소 길이 미만 시 경고 (자동 수정 아님)

필수 섹션 구조

Sources 페이지

# [제목]
 
> [!note] Key Insight
> 
> 한 문장 통찰
 
## 핵심 Takeaway
 
## 상세 요약
 
(섹션 2-5개, 논리적 흐름)
 
## 연결되는 위키 페이지
 
 — 한 줄 설명

Concepts 페이지

# [개념명]
 
> [!note] Key Insight
> 
> 한 문장 정의
 
## 정의
 
## 특징 / 구조
 
## DAP 위키에서의 활용
 
## 관련 개념
 
 — 한 줄 설명

Projects 페이지

# [프로젝트명]
 
> [!info] Outcome
> 
> 완료 조건
 
> [!quote] Why This Project
> 
> 배경
 
## Context
 
## Knowledge Pulls
 
## Plan
 
## Progress
 
## Next Actions
 
## Risks
 
## Artifacts
 
## Retrospective (Close 시)

Lint Check:

  • 🟡 필수 섹션 누락 시 경고

출처 인용 규칙

규칙: 구체적인 주장 뒤에는 (출처: ) 필수

✅ 올바른 예

AWS Glue는 서버리스 확장성을 제공한다 (출처: [[sources/etl-future-technology-kyobo]]).
 
데이터 거버넌스는 자동화와 인간 판단의 하이브리드 모델이다 
(출처: [[sources/data-management-2026-trends]]).

❌ 잘못된 예

AWS Glue는 좋은 도구다.  # 출처 없음 → ⚠️ 경고
 
레이크하우스는 ACID 트랜잭션을 지원한다 (출처: Wikipedia).  
# [[wiki/concepts/wikilink]] 아님 → ⚠️ 경고

Lint Check:

  • 🟡 “is”, “provides”, “supports” 등 주장 키워드 후 출처 없으면 경고 (휴리스틱)
  • ⚠️ 외부 링크 (http) 인용 감지 → wikilink로 전환 권장

스타일 가이드

마크다운 포맷

요소규칙
제목# (H1만 사용, 복수 H1 금지)
부제 또는 (최대 3단계)
강조[[wiki/concepts/wikilink]] 또는 bold (마크다운, 색상 코드 아님)
데이터 비교 시 사용 (순수 텍스트 아님)
코드 블록코드/설정/예시만 포함, 마크다운 설명 아님
이미지! (외부 URL 아님)
링크내부: “, 외부: [text](url)

일관성

  • 용어: “데이터 흐름” vs “데이터 파이프라인” → 한 가지 통일
  • 약자: 첫 사용 시 풀어서 쓰고 “(약자)” 명시
  • 시제: 현재형 (“~하다”) 일관되게

Quality Checklist (자동화된 검증)

매 변경 시 (자동)

☐ Frontmatter 필수 필드 존재?
☐ date 필드가 유효한 YYYY-MM-DD 형식?
☐ wikilink가 실제 페이지를 가리킴?
☐ title이 1-100자?
☐ tags 첫 항목 = 페이지 타입?

주 1회 Lint (자동 + 수동)

☐ Orphan 페이지 (역링크 0개) 검토
☐ Broken links 수정
☐ valid_as_of 6개월 초과 페이지 확인
☐ source_count = len(sources) 일치
☐ Project ↔ Zettel 양방향 링크 위반 확인
☐ 필수 섹션 존재 여부

월 1회 Update (수동)

☐ Frontmatter updated 필드 갱신
☐ CLAUDE.md 규칙과 실제 practice 일치 여부
☐ 새로운 스타일/용어 규약 추가

위반 시 조치

심각도위반 사항자동 조치수동 검토
🔴 MajorBroken link경고 + 자동 수정수정 검증
🔴 MajorBroken wikilink in sources경고필수 수정
🔴 Majorsource_count 불일치경고필수 수정
🔴 MajorProject ↔ Zettel 양방향경고필수 수정
🟠 MediumOrphan 페이지경고검토 후 링크 추가 또는 삭제
🟠 Mediumvalid_as_of 6개월 초과경고재검증 또는 갱신
🟡 Info최소 길이 미만경고보완 권장
🟡 Info필수 섹션 누락경고추가 권장
🟡 Info출처 인용 누락경고추가 권장

도구 지원

/lint 스킬

자동 실행:

  • 모든 Frontmatter 검증 (Major)
  • 모든 링크 검증 (Major)
  • 스타일 체크 (Info)

수동 검토:

  • Orphan 페이지 판단 (keep/link/delete)
  • valid_as_of 갱신 필요 여부

Obsidian Graph View

시각화:

  • Orphan 페이지 : 고립된 node
  • Cross-references: 연결된 node
  • Project-Zettel 방향: 화살표 방향

관련 개념


메모

기준 적용 순서:

  1. Phase 1-3 (현재): 기준 정의 (이 문서)
  2. Phase 1-4: CLAUDE.md 규칙 vs 마스터 플랜 정렬 검증
  3. Phase 2: 자동화 규칙 구현 (hooks, scripts)
  4. Phase 3: 스킬 통합 및 검증

향후 개선:

  • Lint 자동화 비율 확대 (현재 80% → 95%)
  • Frontmatter 자동 생성 (Mode B/C 인제스트 시)
  • 스타일 자동 수정 (대소문자, 띄어쓰기 등)

테스트 섹션 (Sprint 4 Week 4 통합 테스트)

  • 2026-04-28: Scenario 2 테스트 - Frontmatter 자동 갱신 검증
  • Hook이 updated 필드를 자동으로 오늘 날짜로 갱신하는지 확인
  • Index.md가 이 변경을 정확히 반영하는지 확인