- OKF Bundle์ OKF concept ๋ฌธ์๋ค์ ๋ด์ ํ๋์ ๋๋ ํฐ๋ฆฌ ํธ๋ฆฌ โ โa directory of markdown documents with YAML frontmatter that catalog tools, downstream agents, and humans can all readโ
- concept ๋ฌธ์ยท
index.md(๋ชฉ์ฐจ)ยทlog.md(์ด๋ ฅ)ยทreferences/(๋ถ์ ๋ฌธ์)๋ก ๊ตฌ์ฑ๋ ํ์ผ ๊ธฐ๋ฐ ํจํค์ง - git repoยทtarballยทzip์ผ๋ก ํต์งธ๋ก ์ฃผ๊ณ ๋ฐ๋ ์ด์ ๊ฐ๋ฅํ ์ง์ ๋ฌถ์ โ OKF (Open Knowledge Format)์ ๋ฐฐํฌ ๋จ์
- ์คํค๋ง ๋ ์ง์คํธ๋ฆฌยท์ค์ ๊ถ์ยทํ์ ํด๋ง์ด ์๋ ์ต์ ๊ท์ฝ(minimally opinionated) ์ ์ ํฌ๋งท
์ฝ๊ฒ ์ดํดํ๊ธฐ
๋ฒ๋ค์ โ์ฃผ์ ๋ณ ๋ฉ๋ชจ ์นด๋(=concept ๋ฌธ์)๋ฅผ ํ ํด๋์ ์ ๋ฆฌํด, ํต์งธ๋ก zip์ด๋ git์ผ๋ก ๊ฑด๋ฌ ์ ์๊ฒ ๋ฌถ์ด๋ ๊ฒโ์ด๋ค. ์นด๋ ํ ์ฅ = ๊ฐ๋
ํ๋(ํ
์ด๋ธยท์งํยท๋ฐ๋ถโฆ)์ด๊ณ , ์นด๋๋ผ๋ฆฌ๋ ๋ณธ๋ฌธ ์์ ๋งํฌ๋ก ์ฐ๊ฒฐ๋๋ค. ํด๋ ๋งจ ์์ ๋ชฉ์ฐจ ์นด๋(index.md), ํ์ชฝ์ ์์ ์ผ์ง(log.md)๊ฐ ์๋ค. ์ด ํด๋๋ฅผ ๊ทธ๋๋ก ์์ถํด ๋ณด๋ด๋ฉด ๋ฐ๋ ์ชฝ โ ์ฌ๋์ด๋ ์์ด์ ํธ๋ โ ์ด ๋ณ๋ ๋๊ตฌ ์์ด ํผ์ณ ์ฝ๋๋ค.
๊ทธ๋ฅ markdown์ ํ๊ณณ์ ๋ชจ์ผ๋ฉด ์ ๋๋? โ OKF๊ฐ ๋ํ๋ ๊ฒ
์ฌ์ค OKF๋ ๊ฑฐ์ฐฝํ ๋ฌด์ธ๊ฐ๊ฐ ์๋๋ค. ํฉ์ด์ง markdown ๋๋ฏธ์ ์ํธ์ด์ฉ์ ๊ผญ ํ์ํ ์ต์ ๊ท์น(๋งจ ์ type, ๋ชฉ์ฐจ index.md, ๋งํฌ ๊ท์ฝ)๋ง ๋ชป ๋ฐ์ ๊ฒ์ด๋ค โ โno schema registry, no central authority, and no required tooling.โ ๊ทธ๋ฐ๋ฐ ์ด ์์ ๊ท์ฝ์ด โ๊ทธ๋ฅ .md ๋ชจ์ผ๊ธฐโ์ ๊ฒฐ์ ์ ์ฐจ์ด๋ฅผ ๋ง๋ ๋ค.
AS-IS โ ๊ท์ฝ ์๋ markdown ๋๋ฏธ
flowchart LR F1[notes1.md] --> A[๋ฐ๋ ์ฌ๋/์์ด์ ํธ] F2[schema.txt] --> A F3[wiki page] --> A A -. ๋ชฉ์ฐจยทํ์ ยท๋งํฌ ๊ท์ฝ ์์ .-> X((์ด๋์๋ถํฐ ์ฝ์ง?))
TO-BE โ OKF Bundle
flowchart LR subgraph B["OKF Bundle (1๊ฐ ๋๋ ํฐ๋ฆฌ)"] IDX[index.md<br/>๋ชฉ์ฐจ] C1["orders.md<br/>type: BigQuery Table"] C2[customers.md] LOG[log.md<br/>๋ณ๊ฒฝ ์ด๋ ฅ] C1 -->|/tables/customers.md| C2 end B -->|git / tarball / zip| H[์ฌ๋: catยทGitHub] B -->|ingest| AG[์์ด์ ํธ: SDK ์์ด ํ์ฑ]
๊ทธ๋ฅ ๋ชจ์๋ ๋๋ฏธ ๋๋น OKF๊ฐ ๋ณด์ฅํ๋ ๊ฒ(๊ณต์ README๊ฐ ์ ๋ฆฌํ ์ด์ ):
- ๋๊ตฌ ์์ด ์ฝํ โ โNo SDK or query language stands between a reader and the content.โ ์ฌ๋์
catยทGitHub๋ก, ์์ด์ ํธ๋ ๋ณ๋ SDK ์์ด ํ์ฑํ๋ค. LLM์๊ฒ ์ข์ ํฌ๋งท์ด ๊ณง ์ฌ๋์๊ฒ๋ ์ข์ ๊ฐ์ ํ ๋ฒ์ด๋ผ, โ์์ด์ ํธ์ฉ ๋ฉํ๋ฐ์ดํฐโ์ โ์ฌ๋์ฉ ์ํคโ๋ฅผ ๋ฐ๋ก ๋ ํ์๊ฐ ์๋ค. - ๋ฒ์ ๊ด๋ฆฌ๊ฐ ๊ทธ๋ฅ ๋จ โ โPull requests, line-by-line diffs, blame, and review workflows just work.โ
- ์ด์์ฑ โ โNo proprietary API stands between you and your metadata.โ git/tarball๋ก ์ด๋๋ก๋ ์ฎ๊ฒจ๋ ์ด์๋จ๋๋ค.
- ๊ตฌ์กฐ + ๋น๊ตฌ์กฐ ๋์ โ frontmatter(๊ตฌ์กฐํ ๋ฉํ๋ฐ์ดํฐ)์ ๋ณธ๋ฌธ(proseยทํยท์์)์ ์๋์ ์ผ๋ก ํจ๊ป ๋ด๋๋ค.
- ๊ธฐ์กด ๋๊ตฌ ํธํ โ NotionยทObsidianยทMkDocsยทHugoยทJekyll์ด ์ด๋ฏธ markdown + YAML frontmatter๋ฅผ ๋งํ๋ค.
- ๊ด๊ณ ํํ โ โGraph-shaped, not just tree-shapedโ โ ํด๋ ๊ณ์ธต(ํธ๋ฆฌ)์ ๋์ด ๋งํฌ๋ก ๊ฐ๋ ๊ฐ ๊ด๊ณ๋ฅผ ํํํ๋ค.
๋ฒ๋ค ๊ตฌ์กฐ์ ๊ฐ ํ์ผ์ ๋ชฉ์ (๊ณต์ ์คํ)
์คํ์ด ์ ์ํ๋ ๋๋ ํฐ๋ฆฌ ๋ ์ด์์์ ๋ค์๊ณผ ๊ฐ๋ค.
path/to/bundle/
โโโ index.md # ์ ํ. progressive disclosure์ฉ ๋๋ ํฐ๋ฆฌ ๋ชฉ์ฐจ
โโโ log.md # ์ ํ. ๋ณ๊ฒฝ ์ด๋ ฅ(์ต์ ์)
โโโ <concept>.md # ๋ฃจํธ์ ๋์ธ concept ํ ๊ฐ
โโโ <subdirectory>/ # ํ์ ๋๋ ํฐ๋ฆฌ๋ก concept๋ค์ ๊ทธ๋ฃนํ
โโโ index.md
โโโ <concept>.md
โโโ <subdirectory>/
โโโ โฆ
๊ฐ ๊ตฌ์ฑ์์๊ฐ ์ ์๋์ง, ๋ฌด์์ ๋งก๋์ง:
- concept ๋ฌธ์ (
<concept>.md) โ โA single unit of knowledge within a bundle. Represented as one markdown document.โ ์ง์์ ์์ ๋จ์ ํ๋ = ํ์ผ ํ๋๋ค. frontmatter์type(ํ์)์ผ๋ก ์ข ๋ฅ๋ฅผ ๋ผ๋ฒจ๋งํ๊ณ , ๋ณธ๋ฌธ์ ์คํค๋งยท์์ยทprose๋ฅผ ๋ด๋๋ค. index.md(์์ฝ) โ ์ด๋ ๋๋ ํฐ๋ฆฌ์๋ ์ฌ ์ ์๋ ๋ชฉ์ฐจ. ๊ทธ ํด๋์ ๋ฌด์์ด ์๋์ง ๋ฌธ์๋ฅผ ์ด์ด๋ณด๊ธฐ ์ ์ ํ๊ฒ ํด์ค๋ค(progressive disclosure). README ํํ์ผ๋ก๋ ๋ฒ๋ค ์ ์ฒด๋ฅผ ํ๊บผ๋ฒ์ context์ ์ฌ๋ฆฌ์ง ์๊ณ โone level at a timeโ ์ผ๋ก ๋ด๋ ค๊ฐ๋ฉฐ ํ์ํ๋ค. ๋ณดํต ์๋ ์์ฑ๋๋ฉฐ, ์์ผ๋ฉด consumer๊ฐ ์ฆ์์์ ํฉ์ฑํ ์ ์๋ค.log.md(์์ฝ) โ ๊ณ์ธต์ ์ด๋ ์์ค์๋ ์ฌ ์ ์๋ ๋ณ๊ฒฝ ์ด๋ ฅ. ๊ทธ scope์ ๋ณํ๋ฅผ ์ต์ ์ยทISO 8601(YYYY-MM-DD)๋ก ๊ธฐ๋กํ๋ค.**Update**ยท**Creation**ยท**Deprecation**๊ฐ์ ๊ตต์ ๋จธ๋ฆฌ๋ง์ ๊ด์ต์ด์ง ํ์๊ฐ ์๋๋ค.references/โ enrichment ๊ณผ์ ์์ ๋ฐ๊ฒฌ๋์ง๋ง ๊ธฐ์กด concept์ ๋ฑ ๋ค์ด๋ง์ง ์๋ ๋ ๋ฆฝ ๋ฌธ์๋ฅผ ๋ชจ์๋๋ ๊ณณ.- ํ์ ๋๋ ํฐ๋ฆฌ โ ๋๋ฉ์ธ์ ๋ง๊ฒ ์์ ๋กญ๊ฒ ๊ตฌ์ฑํ๋ค โ โThe directory structure is independent of the domain โ producers organize concepts however makes sense.โ
frontmatter๋ type ํ๋๋ง ํ์๋ค(routingยทfilteringยทpresentation ์ฉ๋์ด๋ฉฐ ์ค์ ๋ฑ๋ก ์ฒด๊ณ๊ฐ ์๋ค). ๊ถ์ฅ ํ๋๋ ์ฐ์ ์์ ์์ผ๋ก titleยทdescriptionยทresourceยทtagsยทtimestamp.
์ ํ ํ์ผ์ด ์๋๋ผ ์ฌ๋ฌ ํ์ผยท๋๋ ํฐ๋ฆฌ์ธ๊ฐ
โ์ ๋ถ ํ .md์ ์ ์ผ๋ฉด ์ ๋๋?โ์ ๋ํ ๋ต์, ์ด ๊ตฌ์กฐ๊ฐ ๋จ์ผ ํ์ผ๋ก๋ ๋ชป ์ฃผ๋ ๋ค ๊ฐ์ง๋ฅผ ์ฃผ๊ธฐ ๋๋ฌธ์ด๋ค.
- ์์์ diff โ OKF๋ โDiffable in version controlโ. concept๋ง๋ค ํ์ผ์ด ๋๋์ด ์์ด PR์์ ๋ฌด์์ด ๋ฐ๋์๋์ง๊ฐ ์ค ๋จ์๋ก ๋๋ฌ๋๋ค. ๊ฑฐ๋ํ ๋จ์ผ ํ์ผ์ ์์ ์์ ๋ diffยทblame์ด ์ง์ ๋ถํด์ง๋ค.
- progressive disclosure โ ์์ด์ ํธ๋ context window๊ฐ ํ์ ์ ์ด๊ณ ์ฌ๋๋ ์ ๋ถ ์ฝ๊ณ ์ถ์ง ์๋ค.
index.md๋ก ๋ชฉ์ฐจ๋ง ๋ณด๊ณ ํ์ํ concept ํ์ผ๋ง ํผ์น๋ค. ํ ํ์ผ์ด๋ฉด ๋งค๋ฒ ์ ์ฒด๋ฅผ ํต์งธ๋ก ๋ก๋ํด์ผ ํ๋ค. - ๊ทธ๋ํ โ ํธ๋ฆฌ โ concept๊ฐ ํ์ผ๋ก ์ชผ๊ฐ์ ธ ์๋ก๋ฅผ ๋งํฌํ๋ฉด ๋ฐฉํฅ์ฑ ์ฃ์ง์ ๊ทธ๋ํ๊ฐ ๋๋ค. ํ ํ์ผ ์์ ์ต์ปค ๋งํฌ๋ง์ผ๋ก๋ ์ด ๊ด๊ณ๋ง์ ๊น๋ํ ํํํ๊ฑฐ๋ ํ์ํ๊ธฐ ์ด๋ ต๋ค.
- ๋ผ์ฐํ
ยท๊ฒ์ ๋จ์ โ
type์ด ๋ถ์ concept ๋จ์๋ผ, consumer๊ฐ ์ข ๋ฅ๋ณ๋ก ํํฐ๋งํ๊ฑฐ๋ ์์ด์ ํธ๊ฐ ๊ด๋ จ ์นด๋ ํ ์ฅ๋ง ๊ณจ๋ผ ๊ฐ์ ธ์ฌ ์ ์๋ค.
์ง์์ ์๋ ๋ฒ: ๋งํฌ์ references/
concept๋ผ๋ฆฌ๋ ํ๋ฒํ markdown ๋งํฌ๋ก ์๋๋ค. ๋งํฌ์๋ ์ ๋ ๊ฒฝ๋ก(/tables/customers.md โ ๊ถ์ฅ, ๋ฌธ์๋ฅผ ์ฎ๊ฒจ๋ ์์ ์ )์ ์๋ ๊ฒฝ๋ก๊ฐ ์๋ค. โA link from concept A to concept B asserts a relationshipโ ์ด๋, ๊ด๊ณ์ ์ข
๋ฅ(parent/childยทjoins-withยทdepends-onโฆ)๋ ๋งํฌ ์์ฒด๊ฐ ์๋๋ผ ์ฃผ๋ณ prose๊ฐ ๋งํด์ค๋ค. ๋ โConsumers MUST tolerate broken linksโ โ ๋์์ด ์์ง ์๋ ๋งํฌ๋ ๊นจ์ง ๊ฒ ์๋๋ผ ์์ง ์ฐ์ง ์์ ์ง์์ผ ์ ์๋ค.
๊ทธ๋์ ์ด๋ฏธ A๊ฐ ์๊ณ ์ฐ๊ด๋ B๊ฐ ๋ค์ด์ฌ ๋ A์ ํฉ์ณ์ง๋์ง๊ฐ ๊ถ๊ธํ ์ ์๋๋ฐ โ ํฌ๋งท ์์ฒด์๋ ์๋ ๋ณํฉยท์ค๋ณต์ ๊ฑฐ ๊ท์น์ด ์๋ค(๊ฐ concept์ ๊ฐ๋ณ/discrete). ํฉ์น ์ง ๋ง์ง๋ producer์ ํ๋จ์ด๊ณ , ๋ ํผ๋ฐ์ค enrichment agent๋ ํ์ด์ง๋ง๋ค ๋ค์ ์ค ํ๋๋ฅผ ๊ณ ๋ฅธ๋ค.
flowchart TB NEW[์ ์ ๋ณด B] --> Q{๊ธฐ์กด concept A์<br/>์ผ๋ง๋ ์ฐ๊ด?} Q -->|๊ฐํ๊ฒ ์ฐ๊ด| ENRICH["enrich<br/>A ๋ฌธ์์ B๋ฅผ ๋ณด๊ฐ (ํฉ์นจ)"] Q -->|๋ ๋ฆฝ ๊ฐ์น ์์| MINT["mint<br/>references/<slug> ์ ๋ฌธ์ โ A์ ๋งํฌ"] Q -->|๋ถํ์| SKIP[skip]
์ฆ B๋ (a) A ๋ฌธ์์ ๋ณด๊ฐ๋์ด ํฉ์ณ์ง๊ฑฐ๋, (b) references/<slug>๋ก ๋
๋ฆฝ ๋ฌธ์๊ฐ ๋์ด A์ ๋งํฌ๋ก ์ด์ด์ง๋ค. ์ด๋ ์ชฝ์ด๋ ๊ด๊ณ๋ ๊ฒฐ๊ตญ ๋งํฌ ๊ทธ๋ํ๋ก ๋จ๋๋ค. ์๋์ผ๋ก ํฉ์ณ์ง๋ ๊ฒ ์๋๋ผ, ์์ฐ ์ฃผ์ฒด๊ฐ ์ ํ๊ณ ํ์์ ๊ทธ๊ฒ์ ํ์ฉํ ๋ฟ์ด๋ค.
์๋ฌธ์ ๊ทธ๋๋ก ๋ฃ๋, ์ฌ๊ฐ๊ณตํ๋
ํฌ๋งท์ ์ฌ๊ฐ๊ณต์ ๊ฐ์ ํ์ง ์๋๋ค. producer์ consumer๊ฐ ๋ ๋ฆฝ์ด๋ผ โ์ด๋ป๊ฒ ๋ง๋ค์๋์งโ๋ฅผ ๋ฐ์ง์ง ์๋๋ค โ ์ฌ๋์ด ์์ผ๋ก ์จ๋, ์์ด์ ํธ๊ฐ ์์ฑํด๋ ๊ฐ์ ๋ฒ๋ค์ด๋ค. ๋ค๋ง ์คํ์ โProducers SHOULD favor structural markdown โ headings, lists, tables, fenced code blocks โ over freeform prose, since structure aids both human reading and agent retrievalโ ๋ผ๊ณ ๊ถํ๋ค.
๊ทธ๋์ enrichment agent ๊ฐ์ ์์ฐ ์์ด์ ํธ๋ ์๋ฌธ์ ๊ทธ๋๋ก ๋ณต๋ถํ๊ธฐ๋ณด๋ค frontmatter(๊ตฌ์กฐํ ๋ฉํ๋ฐ์ดํฐ) + ๋ณธ๋ฌธ(์คํค๋ง ํยท์์)์ผ๋ก ์ฌ๊ตฌ์กฐํํ๋ค. โ์๋ ํ์ธ์ โ ์๋ โ ๊ฐ์ ์์์ ํ๋ฉด ํ ์คํธ ์ถ์ฝ์ด ๋ชฉ์ ์ด ์๋๋ผ, ๊ฒ์ยท์ดํด์ ์ ๋ฆฌํ ๊ตฌ์กฐ๋ก ์์๋ฏธ๋ฅผ ์ ๋ฆฌํ๋ ๊ฒ์ด๋ค.
๊ท๊ฒฉ์ด์ง ํ๋กํ ์ฝ์ด ์๋๋ค (MCP์์ ์ฐจ์ด)
OKF๋ฅผ โMCP ๊ฐ์ ํ๋์ ๊ท๊ฒฉโ์ผ๋ก ์ดํดํ๋ค๋ฉด ๋ฐฉํฅ์ ๋ง๋ค โ ๋ ๋ค ๋ฒค๋ ์ค๋ฆฝ ๊ฐ๋ฐฉ ํ์ค์ผ๋ก, ๋ชจ๋๊ฐ ๊ฐ์ ๋ณํ๊ธฐ๋ฅผ ๋ง๋ค๋ NรM ํตํฉ ๋ฌธ์ ๋ฅผ ์ค์ด๋ โlingua francaโ๋ค. ์ฐจ์ด๋ ์ธต์์ ์๋ค.
| MCP | OKF | |
|---|---|---|
| ์ ์ฒด | ํ๋กํ ์ฝ (runtime) | ์ ์ ๋ฐ์ดํฐ ํฌ๋งท |
| ํ๋ ์ผ | ์์ด์ ํธ๊ฐ ๋๊ตฌยท๋ฐ์ดํฐ์ ์ค์๊ฐ ๋ํ | ์ง์์ ํ์ผ๋ก ์ ์ด๋ |
| ๋น์ | HTTP / API | Markdown ยท JSON ๊ฐ์ ํ์ผ ํฌ๋งท |
| ์คํ | ์์ฒญ/์๋ตยท์ธ์ ์์ | ์คํยท์ฟผ๋ฆฌยท๋ฐํ์ ์์ |
MCP๋ โ์ค์๊ฐ์ผ๋ก ๋ํํ๋ ๋ฐฉ๋ฒโ, OKF๋ โ์ง์์ ํ์ผ๋ก ์ ์ด๋๋ ๋ฐฉ๋ฒโ์ด๋ค. ๋์ ๊ฒฝ์์ด ์๋๋ผ ๋ณด์ ๊ด๊ณ๋ค โ ์์ด์ ํธ๋ โParseable by agents without bespoke SDKsโ ์ธ OKF ๋ฒ๋ค์ (์: Knowledge Catalog๊ฐ ingestํด) ์ปจํ ์คํธ๋ก ๋ฐ์ ์ด๋ค.