콘텐츠로 이동

데이터 파이프라인

세무 법령·판례·상담 등 외부 데이터를 수집(Collect) → JSONL/JSON으로 저장 → Elasticsearch에 임베딩과 함께 적재(Index)하는 오프라인 데이터 파이프라인. 백엔드 RAG 검색이 의존하는 14개 ES 인덱스를 채우는 공급 라인이다. Python(packages/data-pipeline)에서 CLI로 실행되며, 별도의 worker/queue/Docker 인프라 없이 로컬 머신에서 직접 돈다.

클러스터 개요

[외부 데이터 소스]                                  [수집 결과]                  [ES 인덱스]
law.go.kr           ──┐                          data/laws/*.json          tax-laws
국세상담센터         ──┤                          data/counsel/*.json       tax-counsel
조세심판원 tt.go.kr  ──┤                          data/tribunal/*.jsonl     tax-tribunal
대법원 scourt        ──┼─→ Python Collector ───→ data/scourt/*.json   ───→ tax-scourt
국세법령정보(taxlaw) ──┤      (semugpt-collect)   data/written_inquiry/...  tax-written-inquiry
한국회계기준원        ──┤                          data/accounting/*.jsonl  tax-accounting
세림세무법인         ──┘                          data/taxoffice/*.json     tax-taxoffice
                                                  ...                       ... (총 14개)
                                                          Python Indexer  → ES bulk API
                                                          (semugpt-index)    + OpenAI 임베딩 (3072 dim)
                                                                       Backend (Kotlin)
                                                                       RAG 검색 (BM25 + kNN + RRF)

페이지 구성

페이지 다루는 범위
수집기 (Collectors) 외부 데이터 소스 14곳 → JSONL/JSON 저장. BaseCollector 추상 클래스, Selenium vs requests 선택 기준, 재개(resume) 패턴
인덱서 (Indexers) JSONL/JSON → Elasticsearch bulk 적재. create_es_client 공통 패턴, 매핑 정의, 임베딩 통합
Elasticsearch 14개 인덱스 매핑/분석기/벡터 필드. Nori 분석기, content_vector 3072 dims, ES 8.17 운영 환경
임베딩 OpenAIEmbedder (text-embedding-3-large), SQLite 캐시, 백엔드 쿼리 임베딩과의 정합성
CLI 레퍼런스 semugpt-collect / semugpt-index / semugpt-process 명령 및 옵션

데이터 흐름 요약

  1. 수집semugpt-collect {source} 로 외부 사이트/API에서 JSONL 증분 저장 (재개 가능)
  2. (옵션) 변환--convert 또는 semugpt-process merge 로 JSONL → 인덱서 호환 JSON
  3. 인덱스 생성semugpt-index create --index {source} 로 ES 매핑 생성 (1회)
  4. 벌크 인덱싱semugpt-index bulk --index {source} --embed 로 ES 적재 + 임베딩 생성
  5. 검증curl /_cat/indices, 백엔드 검색 결과로 정상성 확인

관련 문서

  • 리포트 생성 — 14개 ES 인덱스를 소비하는 RAG 검색 파이프라인
  • packages/data-pipeline/CLAUDE.md (리포 안 직접 참조) — 새 collector 추가 시 8단계 체크리스트 (백엔드 DTO/Repository까지 포함)
  • packages/data-pipeline/README.md — 패키지 자체 사용자 가이드