TRENDSHIFT 딥다이브 · 일간 #22 · 2026-06-18

knowledge-catalog 딥다이브
— AI 에이전트가 '회사 데이터'를 알아듣게 만드는 구글의 메타데이터 도구상자

GoogleCloudPlatform/knowledge-catalog는 구글 클라우드의 데이터 카탈로그(옛 Dataplex, 현 Knowledge Catalog)에 쌓인 데이터에 대해, "이 테이블이 무엇이고 어떤 컬럼이 있고 어디에 쓰이는지"를 사람과 AI가 모두 읽을 수 있는 '설명서'로 자동 생성·검색·관리하는 법을 보여 주는 구글의 샘플·도구 모음이다. 간판 결과물은 OKF(Open Knowledge Format) — 지식을 마크다운 + YAML 파일로 표현하는 개방 규격 — 과, 그 OKF 묶음을 Gemini로 자동 작성하는 참조 에이전트다. (저장소: GoogleCloudPlatform/knowledge-catalog · 언어 Python · TypeScript · 라이선스 Apache-2.0 · "공식 Google 제품 아님" 명시 · 2026 활발히 갱신 · Google ADK + Gemini + BigQuery/Dataplex)
목차
  1. 프로젝트 한줄 요약
  2. 왜 주목받는가
  3. 기술 스택 전체 지도
  4. 아키텍처 심화 분석
  5. 디렉토리 구조 해부
  6. 학습 포인트 (기술별)
  7. 시스템 요구사항
  8. 직접 해볼 수 있는 실습 과제
  9. 관련 기술 심화 학습 로드맵
  10. 핵심 키워드 사전
  11. 참고 링크

1프로젝트 한줄 요약

한 문장으로 이 프로젝트가 뭘 하는지부터.

knowledge-catalog = "회사 데이터 창고에 붙이는, AI도 읽는 설명서를 자동으로 만드는 도구 + 그 설명서의 개방 표준(OKF)." 큰 회사의 데이터는 보통 BigQuery 같은 데이터 창고에 수천 개의 테이블로 쌓여 있다. 그런데 정작 "이 테이블이 무슨 뜻인지", "이 컬럼이 매출인지 환불인지"는 아무 데도 안 적혀 있거나, 누군가의 머릿속에만 있다. 사람도 헤매지만, 요즘 부쩍 늘어난 AI 데이터 분석 에이전트는 더 막막하다 — 설명이 없으면 엉뚱한 테이블을 골라 잘못된 답을 낸다. 이 프로젝트는 그 "설명서(메타데이터)"를 Gemini가 BigQuery 스키마와 사내 문서를 읽어 자동으로 써 주고, 그 결과를 누구나 읽을 수 있는 마크다운 파일로 떨어뜨린다.

📚 한 줄 비유

"라벨 없는 박스가 쌓인 거대한 창고" vs "사서가 카드 색인을 붙여 둔 도서관"

데이터 레이크(데이터 호수)는 라벨 없는 박스가 천장까지 쌓인 창고와 같다. 박스 안에 보물이 있어도, 겉에 뭐가 들었는지 안 적혀 있으면 찾는 사람도 AI도 박스를 하나하나 열어 봐야 한다 — 느리고, 자주 틀린다.

knowledge-catalog가 하는 일은 박스마다 "안에 무엇이, 어떤 형식으로, 어디에 쓰이는지" 카드를 붙이는 사서의 일이다. 다른 점은 그 카드를 사람이 손으로 쓰지 않고 Gemini가 데이터 스키마·사내 문서를 읽어 자동으로 쓴다는 것, 그리고 그 카드가 특정 회사 전용 포맷이 아니라 메모장으로도 열리는 마크다운이라는 것이다.

용어
메타데이터 (Metadata · 데이터에 대한 데이터)
데이터 자체가 아니라 그 데이터를 설명하는 정보. 책으로 치면 본문이 데이터라면, 제목·저자·목차·요약이 메타데이터다. 데이터 창고에선 "이 테이블 이름·컬럼·자료형·설명·누가 어떻게 쓰는지"가 모두 메타데이터다. 이게 잘 정리돼 있어야 사람도 AI도 데이터를 제대로 찾고 쓴다.
용어
Knowledge Catalog (옛 Dataplex · 데이터플렉스)
구글 클라우드의 데이터 카탈로그 서비스 — 흩어진 데이터 자산(테이블·파일·뷰)의 메타데이터를 한곳에 모아 검색·관리하게 해 준다. 도서관의 "통합 검색대"라고 보면 된다. 최근 Knowledge Catalog로 이름을 바꾸며 'AI가 이해하는 카탈로그'를 표방한다. 이 레포는 그 서비스를 더 잘 쓰는 법을 보여 주는 공식 샘플(비공식 제품)이다.
용어
OKF (Open Knowledge Format · 열린 지식 포맷)
이 레포가 제안하는 개방 규격. "AI 에이전트가 쓸 지식은 SDK 없이도 읽히는 마크다운 파일로, 폴더 구조로, git으로 버전 관리되게 표현하자"는 생각이다. 파일 하나 = 개념(concept) 하나, 폴더 트리 = 지식 묶음(bundle) 하나. 각 파일 맨 위 YAML 머리말(frontmatter)type·title 같은 속성을 적는다. 필수는 type 딱 하나라 진입장벽이 낮다.

정리하면 이 레포에는 두 켤레의 이야기가 들어 있다. 하나는 "지식을 어떤 모양으로 적을까"라는 포맷(OKF) 이야기, 다른 하나는 "그 포맷을 누가 자동으로 채울까"라는 에이전트(Gemini + Google ADK) 이야기다. 그리고 같은 아이디어를 Python과 TypeScript 두 언어로 각각 구현한 참조 코드가 여러 벌 들어 있어, "구글식 AI 에이전트를 어떻게 짜는가"의 살아 있는 교본이기도 하다.

2왜 주목받는가

TrendShift 일간 22위 — 구글이 내놓은 '에이전트용 지식 포맷'이라는 점이 핵심.

2025~2026년의 화두는 "AI 에이전트에게 우리 회사 데이터를 어떻게 이해시킬까"다. 모델은 똑똑해졌지만, 정작 우리 데이터가 뭘 뜻하는지는 모델이 알 길이 없다. 그 빈칸을 메우는 게 메타데이터인데, 지금까지 메타데이터는 대개 벤더 전용 카탈로그 안에 갇혀 있었다. knowledge-catalog가 주목받는 이유를 다섯 가지로 정리하면:

① 코드가 아니라 '개방 표준'을 같이 던졌다 (OKF)

대부분의 도구는 "우리 SDK 쓰세요"로 끝난다. 이 레포는 okf/SPEC.md벤더 중립 포맷 OKF v0.1을 문서로 못박았다. 핵심 주장은 "지식은 SDK 없이 읽혀야 하고, git으로 diff·리뷰되어야 하고, Obsidian·Notion·MkDocs 어디로든 옮겨져야 한다"는 것. 그래서 결과물이 평범한 마크다운 폴더다. 특정 회사에 종속되지 않으려는 설계가 개발자들의 공감을 샀다.

② "메타데이터를 코드처럼" — git diff·PR로 관리

TypeScript CLI kcmd가 내세우는 슬로건이 Metadata as Code(메타데이터를 코드처럼)다. 카탈로그의 메타데이터를 로컬에 pull로 끌어와 YAML·마크다운으로 편집하고, git diff로 변경을 확인하고, PR로 리뷰한 뒤 push로 되돌린다. 인프라를 코드로 다루는 IaC(Infrastructure as Code)의 발상을 메타데이터에 옮긴 것이다.

③ '에이전트가 크롤러' — 단, 안전장치를 코드에 박았다

OKF 참조 에이전트는 웹 문서를 직접 돌아다니며 읽는다. 위험해 보이지만, 이 레포의 묘수는 "몇 페이지까지·어떤 도메인만·몇 단계 깊이까지"라는 한계를 LLM에게 맡기지 않고 도구(fetch_url) 안에 강제로 박아 둔 점이다. 모델이 아무리 욕심내도 도구가 거부한다. "AI에게 권한을 주되 고삐는 코드가 쥔다"는 좋은 본보기다.

④ '증강 가드' — LLM이 정보를 깎아 먹지 못하게

LLM이 문서를 다시 쓰다 보면 원래 있던 스키마 항목이나 출처(citation)를 슬쩍 빠뜨리기 쉽다. 이 레포는 write_concept_doc증강 가드(augmentation guard)를 넣어, 스키마 필드 개수가 줄거나 인용 수가 줄어드는 쓰기를 코드가 기계적으로 거부한다. "LLM 출력은 믿지 말고 불변식으로 검사하라"는 교훈의 모범 사례다.

⑤ 구글 ADK + Gemini의 '공식 레퍼런스'

이 레포는 같은 아이디어를 Python(google-adk)과 TypeScript(@google/adk) 두 갈래로 구현해 뒀다. 구글의 에이전트 프레임워크 ADK로 실전 에이전트를 어떻게 짜는지, MCP 서버를 어떻게 붙이는지, 평가(eval)는 어떻게 자동화하는지를 한 레포에서 다 볼 수 있다. "구글식 에이전트 설계"를 배우려는 사람에게 교본 가치가 크다.

접근 방식메타데이터를 어떻게 다루나knowledge-catalog(OKF)와의 차이
독점 카탈로그 SDK벤더 전용 포맷·API로만 읽고 씀벤더 종속. OKF는 마크다운+YAML이라 메모장·git·Obsidian으로도 읽힌다.
손으로 쓴 위키·문서사람이 데이터 설명을 직접 작성금세 낡고 데이터와 따로 논다. 이건 스키마에서 자동 생성·갱신.
순수 RAG(임베딩 검색)문서를 벡터로 잘라 "비슷한 조각" 검색"비슷함"만 안다. OKF는 스키마·인용·링크 구조를 보존하고 사람이 검수 가능.
knowledge-catalogGemini가 BQ·웹을 읽어 마크다운 번들 생성개방 포맷 + 자동 생성 + git 리뷰 + 툴 레벨 안전장치.
강점
"지식을 코드처럼" — 잠금 없는 개방 포맷

OKF 번들은 그냥 폴더와 마크다운이다. 특별한 뷰어가 죽어도, 회사가 다른 도구로 갈아타도, 파일은 그대로 읽힌다. git으로 버전·리뷰가 되고, 사람이 직접 고칠 수도 있다. "AI용 지식"이 블랙박스가 아니라 읽고 고칠 수 있는 텍스트라는 점이 가장 큰 매력이다.

냉정하게 보기
비공식 샘플 + GCP 종속 + 초기(v0.1) 단계

README에 "공식 Google 제품이 아니다"라고 분명히 적혀 있다. OKF는 spec v0.1, 에이전트 패키지도 0.1.0이라 형태가 더 바뀔 수 있다. 게다가 에이전트를 돌리려면 Gemini 접근 권한과 BigQuery/Dataplex가 있는 GCP 프로젝트가 필요하고, BigQuery 조회·Vertex AI 호출은 과금된다. "포맷(OKF)"은 어디서나 쓸 수 있지만 "자동 생성 에이전트"는 구글 생태계를 강하게 전제한다 — 도입 전에 이 경계를 분명히 알아 두자.

3기술 스택 전체 지도

okf/pyproject.toml · agents·toolbox의 package.json · 실제 소스 트리에서 확인한 구성.

마음의 준비부터. 이 레포는 "백엔드+프론트엔드+DB" 웹 스택이 아니라 AI 에이전트 스택이다. 중심엔 Gemini(모델)와 Google ADK(에이전트 프레임워크)가 있고, 그 둘이 BigQuery·Dataplex 같은 구글 클라우드 서비스를 도구로 부른다. 같은 아이디어가 Python과 TypeScript 두 갈래로 구현돼 있어 표도 언어별로 나눠 본다.

ⓐ 에이전트의 두뇌 — 모델 · 프레임워크 (양쪽 공통)

구성요소무엇역할
Gemini구글의 LLM (기본 gemini-flash-latest)실제 "글을 읽고 설명서를 쓰는" 지능. Vertex AI 또는 AI Studio 키로 접근.
Google ADKAgent Development Kit (google-adk>=2.0)에이전트·도구·세션·실행기를 묶는 프레임워크. 이 레포의 뼈대.
Pydantic파이썬 데이터 검증 (pydantic>=2.0)LLM이 뱉는 출력을 정해진 형태로 강제(구조화 출력).
Vertex AI구글 클라우드 ML 플랫폼GOOGLE_GENAI_USE_VERTEXAI=true면 Gemini를 Vertex로 호출.

ⓑ OKF 참조 에이전트 — Python 쪽 (okf/)

구성요소무엇역할
Python ≥ 3.11주 언어OKF 간판 에이전트·여러 샘플이 파이썬.
google-cloud-bigqueryBQ 클라이언트 (>=3.20)테이블 목록·스키마·샘플 행을 읽어 설명서 재료로.
PyYAMLYAML 파서OKF 파일 맨 위 머리말(frontmatter)을 읽고 씀.
markdownifyHTML→마크다운 변환웹 페이지를 긁어 깔끔한 마크다운으로 바꿈(웹 패스).

ⓒ Metadata-as-Code CLI — TypeScript 쪽 (agents/mdcode = kcmd)

구성요소무엇역할
@modelcontextprotocol/sdkMCP 공식 SDK (^1.29)kcmd mcp로 띄우면 에이전트가 카탈로그를 도구로 호출.
cacCLI 프레임워크init·pull·push·reference 같은 하위 명령 구성.
zod · yaml · glob스키마 검증·YAML·파일 매칭로컬 YAML/마크다운 ↔ Dataplex 동기화의 핵심 부품.
BunJS 런타임·번들러bun build --compile로 단일 실행 파일 kcmd 생성.

ⓓ 구글 클라우드 서비스 (도구로 호출)

에이전트가 실제로 부르는 외부 서비스들이다. Dataplex/Knowledge Catalog(dataplex.googleapis.com — Entry·EntryGroup·Glossary 관리, 의미 검색 search_entries), BigQuery(스키마·쿼리 이력 INFORMATION_SCHEMA.JOBS), Vertex AI(Gemini 추론), 그리고 선택적으로 Google Drive/Docs(사내 문서 수집), BigLake/Iceberg(레이크 테이블), GitHub(GitHub MCP로 코드 컨텍스트). "에이전트 = Gemini(두뇌) + 이 서비스들(손발)"이라고 보면 그림이 맞는다.

ⓔ (선택) 시각화 뷰어 — 유일한 프론트엔드

visualize 명령을 쓰면 OKF 번들 전체를 JSON으로 담은 자기완결 HTML 한 장(viz.html)이 나온다. Cytoscape.js(힘-방향 그래프)와 marked.js(브라우저 안 마크다운 렌더)를 CDN으로 불러, 개념들을 점·선 그래프로 띄우고 "이 개념을 인용한 곳(backlink)"까지 보여 준다. 서버가 필요 없는 대신 인터넷이 있어야 열린다(CDN 의존).

4아키텍처 심화 분석

먼저 전체 그림을 한 장으로 본 뒤, 대표 흐름 '데이터셋 → 설명서 번들'을 끝까지 따라간다.

간판인 okf/ 에이전트를 기준으로 보자. 이 에이전트의 일은 "두 번 훑어 설명서를 채우는 것"이다. (1) BQ 패스 — BigQuery 메타데이터만으로 개념마다 설명서 초안을 쓴다. (2) 웹 패스(선택) — 사내·공개 문서를 크롤링해 그 초안을 보강한다. (3) 인덱스 재생성 — 폴더마다 목차(index.md)를 다시 만든다. 부품 이름을 외우기 전에 숲부터 보자.

독수리 시점 — 전체 구조 한 장

사용자 / CLI : enrich · visualize │ EnrichmentRunner (runner.py) ── 컨텍스트 설정(소스 · 번들 경로) │ ┌─────┴── 1단계 · BQ 패스 ─────────┐ ┌─── 2단계 · 웹 패스(선택) ────┐ │ BQ 에이전트 (ADK + Gemini) │ │ 웹 에이전트 (ADK + Gemini) │ │ 도구: 개념목록 / 스키마읽기 / │ │ 도구: 위 + fetch_url │ │ 샘플행 / write_concept_doc │ │ 페이지수·도메인·깊이 제한 강제 │ └───────────────┬──────────────────┘ └───────────┬───────────────────┘ ▼ ▼ Source 인터페이스 (sources/base.py) web/fetcher.py └ BigQuerySource ─ google-cloud-bigquery (urllib + markdownify) · 테이블 목록 / 스키마 / 샘플 행 · 날짜 샤딩(events_20210131…)을 events_* 하나로 묶음 ▼ OKFDocument (bundle/document.py) ── 파싱 · 직렬화 · 검증(frontmatter) ▼ 디스크의 OKF 번들 (마크다운 + YAML 폴더 트리) ▼ regenerate_indexes ── 폴더마다 index.md 재생성 (Gemini 한 줄 요약) ▼ visualize → viewer/generator.py → 자기완결 viz.html (Cytoscape.js 그래프 + marked.js · CDN)
용어
ADK의 3요소 — Agent · FunctionTool · Runner
Agent는 "모델 + 쓸 수 있는 도구 목록 + 지시문(prompt)"의 묶음. FunctionTool은 평범한 파이썬 함수를 에이전트가 부를 수 있는 '도구'로 감싼 것(예: read_concept_raw, write_concept_doc). Runner는 이 에이전트를 실제로 돌리며 모델↔도구 사이의 대화를 진행시키는 실행기다. 이 셋이 ADK 에이전트의 최소 골격이다.

흐름 ① — "이 BigQuery 데이터셋을 설명서로 만들어줘" (BQ 패스, 해피패스)

사용자가 enrich --source bq --dataset ...를 실행하면 EnrichmentRunner가 BQ 에이전트를 돌린다. 핵심 단계만 따라가면:

# okf/src/enrichment_agent — BQ 패스 한 사이클
1. 개념 나열   BigQuerySource.list_concepts() — 데이터셋의 테이블을 '개념'으로
2. 한 개씩 LLM   개념 하나당 Gemini 호출 1회 (한 번에 하나만, 집중)
3. 재료 읽기   read_concept_raw / sample_rows — 스키마·샘플 행을 도구로 조회
4. 초안 작성    Gemini가 # Schema · # Examples · # Citations 본문을 구성
5. 문서 쓰기   write_concept_doc — frontmatter 검증 통과해야 디스크에 저장

이 레포 특유의 관례 하나 — "개념 하나당 LLM 호출 하나"다. 테이블 50개면 호출 50번. 한 번에 다 시키지 않고 잘게 쪼개, 모델이 한 개념에만 집중하게 한다. 또 하나, events_20210131처럼 날짜별로 쪼개진 테이블(date-sharded)은 events_* 한 개념으로 자동으로 합친다 — 안 그러면 같은 설명이 수백 장 생긴다.

흐름 ② — "웹 문서로 보강해줘" (웹 패스 + 증강 가드)

웹 패스에선 에이전트가 스스로 크롤러가 된다. 씨앗 URL(--web-seed)부터 시작해, 페이지를 읽고 권위 있어 보이는 링크를 따라간다. 각 페이지마다 (a) 기존 문서 보강, (b) references/에 새 문서 생성, (c) 그냥 건너뜀 중 하나를 고른다. 여기서 두 가지 안전장치가 빛난다:

도구가 고삐를 쥔다  fetch_url 안에서 직접 검사:
   - 페이지 수 한도(--web-max-pages, 기본 100) 초과 → 거부
   - 허용 도메인·경로 밖, 깊이(--web-max-depth, 기본 2) 초과 → 거부
   (LLM이 "더 읽자" 해도 도구가 그냥 error 를 돌려준다)

② 증강 가드  write_concept_doc 가 보강 결과를 검사:
   - # Schema 의 필드 이름이 줄었으면        → 거부
   - # Citations(출처) 수가 BQ 패스보다 줄었으면 → 거부
   (LLM이 정보를 깎아 먹는 쓰기를 코드가 기계적으로 막는다)

마지막으로 regenerate_indexes()가 모든 폴더의 index.md를 다시 써서 "이 폴더엔 뭐가 있는지" 한 줄 요약(Gemini가 작성)을 붙인다. 이렇게 완성된 번들은 visualize점·선 그래프 viz.html이 된다.

용어
frontmatter (프론트매터 · YAML 머리말)
마크다운 파일 맨 위에 ---로 감싼 YAML 속성 블록. OKF에선 여기에 type(필수)·title·description·resource(원본 URI)·tags·timestamp를 적는다. 본문은 사람이 읽는 설명, 머리말은 기계가 읽는 꼬리표 — 한 파일에 둘 다 담는 흔한 방식이다(Jekyll·Obsidian도 동일).

이 레포에서 배울 핵심 설계 패턴 둘. 첫째, 꽂아 쓸 수 있는 Source 인터페이스(sources/base.py) — 지금은 BigQuery 하나뿐이지만 "개념 나열/읽기/샘플"이라는 똑같은 구멍에 다른 데이터원을 끼울 수 있게 설계됐다. 둘째, "쓰기 전에 검증"bundle/document.py가 frontmatter 필수 키를 확인하고, 빠지면 모델에게 "이걸 채워 다시 호출하라"는 안내 오류를 돌려준다. LLM에게 자유를 주되, 결과는 결정론적 규칙으로 검사하는 일관된 철학이 코드 전반에 흐른다.

5디렉토리 구조 해부

한 레포 안에 같은 아이디어의 구현이 네 벌 — 모노레포다. 큰 덩어리만 보면 된다.

파일이 400개가 넘지만 대부분은 완성된 OKF 샘플 번들(마크다운)평가용 코퍼스다(.md 179개). 실제 코드는 네 개의 독립 하위 프로젝트로 나뉘고, 전부 "카탈로그 메타데이터를 풍부하게 채우고 동기화한다"는 같은 목표를 돈다. 그중 okf/가 간판이다.

knowledge-catalog/ ├── README.md · CONTRIBUTING.md · LICENSE.md (Apache-2.0) │ ├── okf/ ★ 간판: OKF 명세 + 참조 에이전트 (Python) │ ├── SPEC.md OKF v0.1 규격 문서 (이 레포의 핵심 주장) │ ├── pyproject.toml 의존성 · 진입점(enrichment-agent) │ ├── src/enrichment_agent/ │ │ ├── cli.py · runner.py · agent.py 진입점 · 실행기 · 에이전트 정의 │ │ ├── sources/ Source 인터페이스 + BigQuerySource │ │ ├── tools/ web_tools · bundle_tools · context (도구 + 안전장치) │ │ ├── bundle/ document · index · synthesizer (OKF 파싱 · 검증 · 요약) │ │ ├── web/fetcher.py urllib + markdownify 크롤러 │ │ └── viewer/ viz.html 생성기 (Cytoscape) │ ├── bundles/ ★ 완성 샘플: ga4 · stackoverflow · crypto_bitcoin │ └── tests/ pytest 33개 │ ├── agents/ 프로덕션 지향 한 쌍 │ ├── enrichment/ (Python) Drive · BQ · GitHub 읽어 Metadata-as-Code 생성 │ │ └── eval/ dynamic_eval · golden_eval (에이전트 자동 채점) │ └── mdcode/ (TypeScript) kcmd — 카탈로그 ↔ 로컬 YAML 동기화 CLI/MCP │ ├── samples/ 최소 참조 샘플 (Python · ADK) │ ├── discovery/ 카탈로그 검색 에이전트 (SKILL.md 가 곧 시스템 프롬프트) │ └── enrichment/ 문서 생성 에이전트 (FastMCP 서버 fileskb 포함) │ └── toolbox/ 위의 TypeScript 짝 ├── enrichment/ kcagent — ADK-for-JS 포팅 └── mdcode/ kcmd 의 경량 형제
위치한 줄 역할
okf/SPEC.mdOKF 규격 문서. "지식을 마크다운+YAML로" 주장의 본체. 먼저 읽을 한 장.
okf/src/.../tools/에이전트가 쓰는 도구들 + 웹 크롤 한도·증강 가드 같은 안전장치.
okf/src/.../bundle/OKF 문서 파싱·검증·직렬화, 폴더 index.md 재생성, Gemini 요약.
okf/bundles/바로 열어 볼 수 있는 완성 샘플 번들(GA4·StackOverflow·Bitcoin)과 viz.html.
agents/mdcode/TypeScript kcmd — "메타데이터를 코드처럼" 동기화하는 CLI·라이브러리·MCP 서버.
agents/enrichment/eval/에이전트 출력을 자동 채점하는 평가 하니스(정답 없는/있는 두 방식).
samples/discovery/카탈로그를 의미 검색하는 작은 에이전트. SKILL.md가 그대로 시스템 프롬프트.
toolbox/위 파이썬 구현들의 TypeScript 짝(kcagent·kcmd).

6학습 포인트 (기술별)

이 레포 한 채로 배울 수 있는 기술과, 각각의 실습 아이디어.

이 레포는 "요즘 에이전트 개발에서 중요한 것"이 골고루 들어 있어 공부 소재로 훌륭하다. 기술별로 무엇을 건질지 짚어 본다.

① Google ADK로 에이전트 만들기

모델 + 도구 + 지시문 = 에이전트

agent.py를 보면 ADK 에이전트가 "Gemini 모델 + FunctionTool 목록 + 지시문(prompt)" 세 줄로 정의된다. 평범한 파이썬 함수에 FunctionTool을 씌우면 곧 에이전트의 손발이 된다. "에이전트 = 똑똑한 모델에 도구를 쥐여 준 것"이라는 본질을 가장 깔끔하게 보여 준다.

실습: ADK로 도구 1개(예: "현재 시각 반환")짜리 최소 에이전트를 띄워 보기. samples/discovery의 단일 도구 에이전트를 읽고 구조를 따라 그리기.

② OKF — 지식을 마크다운+YAML로

SDK 없이 읽히는 '지식 파일' 설계

OKF 개념 파일은 이렇게 생겼다. 머리말(기계용 꼬리표)과 본문(사람용 설명)이 한 파일에 있다:

# okf/bundles/.../tables/orders.md
---
type: table
title: orders
description: 전자상거래 주문 원장 테이블
resource: bigquery://proj.dataset.orders
tags: [sales, ecommerce]
---
# Schema
- `order_id` (STRING) — 주문 고유 ID
- `total` (NUMERIC) — 주문 총액
# Citations
- https://internal.docs/orders

실습: SPEC.md를 읽고 내 데이터(예: 가계부 테이블)를 OKF 개념 파일 2~3장으로 손수 써 보기. 필수는 type 하나뿐임을 체감.

③ LLM에 고삐 채우기 (툴 레벨 안전장치)

권한은 주되 한계는 코드가 쥔다

웹 크롤 한도·도메인·깊이를 프롬프트로 부탁하지 않고 fetch_url 도구 안에서 강제로 검사해 거부한다. 또 증강 가드는 LLM이 스키마 필드나 출처를 깎아 먹는 쓰기를 기계적으로 막는다. "LLM 출력은 믿지 말고 결정론적 불변식으로 검증하라"의 모범.

실습: 내 도구 함수에 "호출 횟수 상한"을 넣어, 모델이 더 부르려 해도 도구가 거부하게 만들어 보기. 거부 시 error를 돌려주는 패턴 익히기.

④ MCP 서버 설계

FastMCP·kcmd로 '도구를 노출'하는 법

samples/enrichmentfileskbFastMCP로 문서 폴더에 list/read를 노출하는 작은 서버다(경로 탈출 방어 _safe_path 포함). TypeScript kcmd mcp는 카탈로그에 list-entries·lookup-entry·modify-entry 3종을 연다. "에이전트에게 내 도구를 어떻게 표준 방식으로 줄까"의 두 언어 예시.

실습: Python FastMCP로 "메모 읽기" 서버를 만들어 Claude Code·Cursor에 붙여 보기. 도구 1개부터.

⑤ Metadata as Code (kcmd)

pull → 편집 → diff → push 워크플로우

kcmd는 Dataplex 메타데이터를 로컬 YAML로 pull, 사람이 편집, git diff로 리뷰, push로 되돌린다. 읽기 전용 시스템 스키마는 .ref.yaml로 따로 받아 '근거 층'으로 둔다. 인프라를 코드로 다루는 발상(IaC)을 메타데이터에 옮긴 실전 예.

실습: 작은 BigQuery 데이터셋에 kcmd init → pull을 돌려, 카탈로그가 어떤 YAML로 떨어지는지 구조를 관찰하기(쓰기 push는 안 해도 됨).

⑥ 에이전트 자동 평가 (eval)

'정답 없는' 채점과 '정답 있는' 채점

agents/enrichment/eval은 두 방식을 보여 준다. dynamic_eval(정답 불필요 — 구조 유효성·토큰 예산·환각 없음·중복/모순 같은 규칙으로 채점), golden_eval(정답 대비 개념 재현율·사실 재현율 등). 채점관은 Vertex Gemini. "에이전트를 어떻게 객관적으로 측정하나"의 좋은 출발점.

실습: dynamic_eval이 쓰는 항목(구조 유효성·환각 여부 등)을 표로 정리하고, 내 에이전트에 적용할 '정답 없는 채점' 항목 3개를 설계해 보기.

7시스템 요구사항

"포맷(OKF)만 쓸 때"와 "에이전트를 돌릴 때"는 요구사항이 크게 다르다.

OKF 포맷 자체는 그냥 마크다운이라 아무 데서나 읽고 쓸 수 있다 — 요구사항이 없다. 하지만 자동 생성 에이전트를 돌리려면 구글 클라우드 환경이 필요하다. GPU나 로컬 모델은 필요 없다(추론은 전부 호스팅 Gemini).

항목요구사항
구글 클라우드 프로젝트과금 가능한 GCP 프로젝트 1개. gcloud auth application-default login + gcloud config set project <id>로 인증.
Gemini 접근GEMINI_API_KEY(AI Studio) 또는 Vertex AI(GOOGLE_GENAI_USE_VERTEXAI=true + 프로젝트·리전 환경변수).
활성화할 APIDataplex/Knowledge Catalog · BigQuery · Vertex AI. 선택: Drive/Docs · BigLake · GitHub(MCP).
Python 런타임Python ≥ 3.11(okf README는 3.13 가상환경 권장). pip install -e .[dev]로 설치.
TypeScript 도구Node + Bun(bun build --compilekcmd 단일 실행 파일 생성·테스트).
과금 주의BigQuery 조회는 스캔한 바이트만큼, Vertex AI는 토큰만큼 과금. 공개 데이터셋도 조회 비용은 호출자 프로젝트가 부담.
GPU불필요. 모든 추론은 클라우드의 Gemini가 수행.

가장 빠른 출발점은 okf/다. 루트 README의 "Open in Cloud Shell" 버튼을 쓰면 브라우저 안 셸에서 인증·설치가 거의 끝나, 로컬 환경 구성 없이 바로 enrich를 돌려 볼 수 있다.

8직접 해볼 수 있는 실습 과제

"OKF 읽기"는 공짜, "에이전트 돌리기"는 GCP 필요. 난이도 순으로.

실습 1 난이도 ★☆☆ 입문

완성 샘플 번들을 그래프로 열어 보기

GCP 없이도 된다. 레포를 클론해 okf/bundles/ga4/ 폴더의 마크다운 파일들을 그냥 읽어 보고, 같은 폴더의 viz.html을 브라우저로 연다. 개념들이 점·선 그래프로 뜨고, "이 개념을 인용한 곳" 백링크가 어떻게 연결되는지 관찰한다.

목표: OKF 번들이 "폴더 + 마크다운 + 링크"라는 걸 눈으로 확인. 특별한 도구 없이 열린다는 점을 체감.
실습 2 난이도 ★☆☆ 입문

OKF 개념 파일을 손으로 써 보기

okf/SPEC.md를 읽고, 내가 아는 데이터(가계부·운동 기록 등)를 OKF 개념 파일 2~3장으로 직접 작성한다. type만 필수임을 확인하고, # Schema·# Citations 본문 관례를 따라 써 본다.

목표: 머리말(frontmatter)과 본문의 역할 분담을 손에 익히기. "지식을 코드처럼" 쓰는 감 잡기.
실습 3 난이도 ★★☆ 중급

공개 BigQuery 데이터셋을 자동으로 설명서화

GCP 인증 후 okf/에서 BQ 패스만 돌려 본다(--no-web). 공개 GA4 전자상거래 데이터셋을 대상으로 enrich --source bq --dataset ... --out ./bundles/ga4를 실행하고, Gemini가 생성한 마크다운을 직접 읽어 품질을 평가한다.

목표: "스키마 → 설명서" 자동 생성을 1회 사이클 돌려 보기. 비용(조회 바이트·토큰)도 같이 확인.
실습 4 난이도 ★★☆ 중급

웹 패스로 보강하고 '증강 가드' 관찰하기

실습 3 번들에 --web-seed로 관련 문서 URL을 한두 개 물려 웹 패스를 켠다. 보강 전/후 마크다운을 git diff로 비교하고, 일부러 빈약한 시드를 줘서 증강 가드가 "정보가 줄어드는 쓰기"를 거부하는 로그를 확인한다.

목표: 도구 레벨 안전장치가 실제로 LLM을 막는 순간을 눈으로 보기. 페이지/깊이 한도도 바꿔 실험.
실습 5 난이도 ★★★ 고급

새로운 Source 만들기 (BigQuery 말고 다른 데이터원)

sources/base.pySource 인터페이스(list_concepts/read_concept/sample_rows)를 구현해, 예를 들어 CSV 폴더SQLite를 데이터원으로 끼워 본다. 같은 에이전트가 그대로 동작하는지 확인한다.

목표: "인터페이스로 갈아끼우기(plug-in)" 설계의 위력 체감. 추상화가 잘 된 코드는 새 구현만 더하면 된다.
실습 6 난이도 ★★★ 고급

에이전트 평가 하니스 돌리기

agents/enrichment/eval에서 python -m eval로 dynamic_eval(정답 없는 채점)을 돌려, 내 에이전트 출력이 구조 유효성·환각 없음·중복 같은 항목에서 어떤 점수를 받는지 본다. 기본 임계값(0.7)을 넘는지 확인한다.

목표: "느낌"이 아니라 수치로 에이전트를 평가하는 습관. 채점 항목을 내 프로젝트에 옮겨 적용해 보기.

9관련 기술 심화 학습 로드맵

이 레포를 100% 소화하기 위한 6주 코스(주당 5~7시간 가정).

주차주제학습 자료 / 할 일
1주차데이터 카탈로그·메타데이터 기초"메타데이터가 왜 중요한가" + Dataplex/Knowledge Catalog 개요 읽기. 실습 1.
2주차Google ADK 에이전트 기초ADK 문서 + samples/discovery 정독. 도구 1개짜리 에이전트 직접 띄우기.
3주차OKF 규격 정독okf/SPEC.md를 끝까지 읽고 내 데이터로 번들 손수 작성. 실습 2.
4주차BigQuery 메타데이터 + 자동 생성BQ 스키마·INFORMATION_SCHEMA 이해 + BQ 패스 실행. 실습 3~4.
5주차MCP 서버 설계MCP 명세 + fileskb(FastMCP)·kcmd 읽기. 내 MCP 서버 만들기. 실습 5.
6주차에이전트 평가 + Metadata as Codeeval 하니스 돌리기 + kcmd pull/diff/push 워크플로우. 실습 6.

10핵심 키워드 사전

이 문서와 레포에 등장한 용어를 한자리에.

용어의미
메타데이터데이터를 설명하는 데이터. 테이블 이름·컬럼·자료형·설명·용도 등. 사람·AI가 데이터를 찾고 쓰는 열쇠.
Knowledge Catalog / Dataplex구글 클라우드의 데이터 카탈로그 서비스(옛 Dataplex). 데이터 자산 메타데이터를 모아 검색·관리.
OKFOpen Knowledge Format. 지식을 마크다운+YAML 파일·폴더로 표현하는 개방 규격(이 레포 제안).
concept / bundleOKF의 단위. 개념(concept)=파일 1장, 번들(bundle)=개념들의 폴더 트리.
frontmatter마크다운 맨 위 ---로 감싼 YAML 머리말. OKF는 type만 필수.
Google ADKAgent Development Kit. 에이전트·도구·세션·실행기를 묶는 구글의 에이전트 프레임워크.
FunctionTool평범한 함수를 에이전트가 호출할 수 있는 '도구'로 감싼 것(ADK).
Gemini구글의 LLM. 이 레포에서 실제로 글을 읽고 설명서를 쓰는 지능.
Vertex AI구글 클라우드의 ML 플랫폼. Gemini를 기업 환경에서 호출하는 경로.
BigQuery구글의 대규모 데이터 창고(서버리스 DW). 메타데이터의 주요 출처.
date-sharded tableevents_20210131처럼 날짜별로 쪼갠 테이블. OKF 에이전트는 events_* 하나로 묶음.
MCPModel Context Protocol. AI 에이전트와 외부 도구를 잇는 표준 규격.
FastMCP파이썬으로 MCP 서버를 빠르게 만드는 라이브러리. fileskb가 사용.
Metadata as Code카탈로그 메타데이터를 코드처럼 pull·편집·diff·push로 관리하는 방식(kcmd).
augmentation guard증강 가드. LLM이 스키마·출처를 깎아 먹는 쓰기를 코드가 거부하는 불변식 검사.
citation출처. OKF 본문 # Citations에 적는 근거 링크. 증강 가드가 수를 지킨다.
semantic search의미 검색. Dataplex search_entries(semantic_search=True)로 뜻이 가까운 자산 찾기.
Source 인터페이스데이터원을 갈아끼우는 추상 계층(list_concepts/read_concept/sample_rows).
eval (dynamic/golden)에이전트 자동 채점. 정답 없는(dynamic)·정답 있는(golden) 두 방식.
Cytoscape.js브라우저용 그래프 시각화 라이브러리. viz.html이 개념 그래프를 그릴 때 사용.

11참고 링크

원문·명세·관련 기술 더 파기.