배경
Lang2SQL의 핵심 차별점은 "팀마다 같은 용어를 다르게 쓴다"는 현실을 다루는 것입니다.
현재 Semantic Federation이 org/team/user 3계층으로 이를 구현하고 있는데,
장기적으로는 단순 용어 사전을 넘어 비즈니스 지식 그래프로 발전시키는 로드맵을 공유합니다.
장기 비전
DB 스키마
↓ /enrich
컬럼별 설명 자동 생성
↓ /org_setup
org 레이어 용어 초안 시딩 (inferred=True)
↓ 팀 실사용
team 레이어에 정의 축적
↓ 수렴 감지 (/converge_scan)
여러 팀 정의가 유사하면 org 승격 제안
↓ 관리자 승인
org 정의 업데이트
↓ glossary 충분히 쌓이면
관계 그래프 추출 (/build_graph)
↓
SQL 생성 시 용어 체이닝 자동 적용
핵심 설계 원칙:
- bottom-to-top: team 실사용 → 수렴 → org 승격 (top-down 설계 지양)
- 자동 승격 없음: 용어 정의 오류 = SQL 전체 오류이므로 관리자 승인 필수
- glossary first: 데이터 충분히 쌓인 후 그래프 구조화
Phase 1 — Glossary 안정화 (현재)
✅ 구현 완료
| 기능 |
파일 |
/enrich — 컬럼 샘플 기반 LLM 메타데이터 보강 |
tools/enrich_schema.py |
/org_setup — DB 스캔으로 org 레이어 용어 시딩 (inferred=True) |
tools/org_setup.py |
term_custom — org/team/user 3계층 용어 사전 |
tools/semantic_federation.py |
| narrow→wide lookup (user > team > org) |
semantic_federation.py |
/confirm_ingest — 문서에서 추출한 용어 후보 레이어별 등록 |
tools/confirm_ingest.py |
🔄 PR 진행 중
| PR |
내용 |
| #248 |
layer 용어 rename (guild→org, channel→team, member→user), term_custom 기본값 team으로 변경 |
| #252 |
동일 용어의 여러 team 정의를 LLM에 전체 주입 (★이 채널 / ·다른 채널) — LLM 레벨 수렴 인식 |
| #254 |
README 업데이트 (layer rename + 다중 정의 주입 반영) |
⚠️ 보완 필요
/enrich → /org_setup 연결 끊김
현재 org_setup이 enrich 결과(enriched_desc:{table}:{col} KV)를 읽지 않고 DB를 직접 재스캔함.
/enrich 실행 후 /org_setup을 써도 enrich 결과가 활용되지 않는 구조적 gap.
enrich_schema.py → enriched_desc:{table}:{col} 저장
org_setup.py → DB 직접 재스캔 (enrich KV 무시) ← 연결 필요
Phase 2 — 수렴 감지 & org 승격 (중기)
PR #252로 LLM이 여러 팀 정의를 볼 수 있게 됐지만, 명시적 승격 트리거가 없음.
제안: /converge_scan 커맨드
/converge_scan
→ 동일 용어에 team 정의 ≥ 2개인 항목 탐색
→ LLM이 정의 비교 → "본질적으로 같다" 판정
→ 관리자에게 후보 리스트 제시
→ 관리자 선택 → /term_custom layer:org 로 승격
또는 /org_setup action:scan으로 기존 커맨드에 통합.
FedEntry에 derives_from 필드 선제 추가
Phase 3 그래프 구축을 위한 준비. 아직 SQL 생성에 사용하지 않아도,
"월매출은 환불제외 규칙에서 파생됨" 같은 관계를 glossary 단계부터 기록.
@dataclass
class FedEntry:
...
derives_from: list[str] = field(default_factory=list) # 관련 용어명
Phase 3 — 지식 그래프 구축 (장기)
org 레이어 용어가 충분히 축적된 시점에 관계 그래프 추출.
/build_graph 커맨드
전체 glossary를 LLM이 일괄 분석
→ 관계 엣지 추론:
derives_from : 월매출 → 환불제외 규칙 적용
is_subset_of : 활성고객 ⊂ 고객
requires_rule : 활성고객 → 30일 로그인 조건
→ KV 저장: graph_edge:{term_a}:{rel}:{term_b}
SQL 생성에서의 활용
"월매출 기준 TOP 10" 쿼리
→ 그래프 traversal: 월매출 → derives_from → 환불제외
→ WHERE status != 'cancelled' 자동 체이닝
현재 LLM이 매 쿼리마다 이 추론을 새로 해야 하는 것을 그래프로 사전 구조화.
Freshness: glossary 대규모 업데이트 시 /build_graph 재실행으로 관리 (자동 재생성은 비용 과다).
논의 포인트
- Phase 2 수렴 감지:
/converge_scan 별도 커맨드 vs /org_setup 통합 중 어느 쪽이 나을까요?
- 수렴 판정 기준: LLM 유사도 외에 추가할 heuristic이 있을까요?
- Phase 3 그래프 트리거 시점: org 용어 N개 이상? admin 명시 실행?
배경
Lang2SQL의 핵심 차별점은 "팀마다 같은 용어를 다르게 쓴다"는 현실을 다루는 것입니다.
현재 Semantic Federation이 org/team/user 3계층으로 이를 구현하고 있는데,
장기적으로는 단순 용어 사전을 넘어 비즈니스 지식 그래프로 발전시키는 로드맵을 공유합니다.
장기 비전
핵심 설계 원칙:
Phase 1 — Glossary 안정화 (현재)
✅ 구현 완료
/enrich— 컬럼 샘플 기반 LLM 메타데이터 보강tools/enrich_schema.py/org_setup— DB 스캔으로 org 레이어 용어 시딩 (inferred=True)tools/org_setup.pyterm_custom— org/team/user 3계층 용어 사전tools/semantic_federation.pysemantic_federation.py/confirm_ingest— 문서에서 추출한 용어 후보 레이어별 등록tools/confirm_ingest.py🔄 PR 진행 중
term_custom기본값team으로 변경★이 채널 / ·다른 채널) — LLM 레벨 수렴 인식/enrich→/org_setup연결 끊김현재
org_setup이 enrich 결과(enriched_desc:{table}:{col}KV)를 읽지 않고 DB를 직접 재스캔함./enrich실행 후/org_setup을 써도 enrich 결과가 활용되지 않는 구조적 gap.Phase 2 — 수렴 감지 & org 승격 (중기)
PR #252로 LLM이 여러 팀 정의를 볼 수 있게 됐지만, 명시적 승격 트리거가 없음.
제안:
/converge_scan커맨드또는
/org_setup action:scan으로 기존 커맨드에 통합.FedEntry에derives_from필드 선제 추가Phase 3 그래프 구축을 위한 준비. 아직 SQL 생성에 사용하지 않아도,
"월매출은 환불제외 규칙에서 파생됨" 같은 관계를 glossary 단계부터 기록.
Phase 3 — 지식 그래프 구축 (장기)
org 레이어 용어가 충분히 축적된 시점에 관계 그래프 추출.
/build_graph커맨드SQL 생성에서의 활용
현재 LLM이 매 쿼리마다 이 추론을 새로 해야 하는 것을 그래프로 사전 구조화.
Freshness: glossary 대규모 업데이트 시
/build_graph재실행으로 관리 (자동 재생성은 비용 과다).논의 포인트
/converge_scan별도 커맨드 vs/org_setup통합 중 어느 쪽이 나을까요?