02. 기술 연관성 매핑 — RFP 요구사항 ↔ 보유 기술 (소스코드 증거)

본 문서는 사업계획서 「기술보유현황」의 핵심 근거표다. 각 요구사항에 대해 PPS 모노레포의 실제 구현(파일 경로·심볼명)을 1:1로 제시한다. 경로는 pps-mono-repo/ 루트 기준.

판정 기준 — ✅ 즉시 보유(운영 코드 존재) · 🟡 부분 보유(핵심 기반 존재, 도메인 적용/일부 보강) · 🔴 미보유(기반 기술 보유, 신규 구현)


A. AI 초안 생성 엔진

A-1. 민간 LLM + 오픈소스 LLM 동시 운용 — ✅

RFP는 "민간 LLM API 연계"와 "오픈소스 LLM 구축"을 동시 고려 대상으로 명시. PPS는 단일 모델 팩토리로 양쪽을 추상화해 이미 운용 중.

증거 내용
services/ai_engine/core/engines/factory.py create_engine() — provider별 엔진 인스턴스화
services/ai_engine/core/engines/base.py EngineBase 추상 클래스 — 모든 엔진 공통 인터페이스
.../engines/gemini_engine.py, openrouter_engine.py 민간 API: Gemini, OpenRouter(Groq·Upstage 경유)
.../engines/qwen_engine.py, hyperclovax_engine.py 오픈소스/로컬 vLLM: Qwen, HyperCLOVA X (OpenAI 호환 API)
services/ai_engine/core/model_config.py ModelConfig dataclass — 환경변수 기반 동적 모델 로드(코드 수정 없이 모델 교체)

차별점 — 민간 API ↔ 폐쇄망 내부 vLLM을 설정값만으로 전환. RFP의 "민간 연계 vs 오픈소스 구축" 양자택일 고민을 동일 코드베이스로 모두 충족.

A-2. 자금별 유형 분류체계 — 🟡

RFP: 자금 유형별 신청서 서식 자동 분류. PPS는 문서 유형·카테고리 분류 + 유사도 기반 자동 매칭 기반 보유. 정책자금 자금명(창업기반·혁신성장 등) 분류 라벨만 도메인 적용 필요.

증거 내용
services/knowledge_hub/core/storage/rdb/rfp_db/models.py RFPSourceFile.file_format/source_type, RFPRequirement.category
services/knowledge_hub/core/rfp/rfp_query_service.py search_similar_rfps() — 유사도 기반 유형 자동 매칭

A-3. RAG 파이프라인 (벡터 DB + 검색) — ✅ (강점)

RFP 핵심 기술 = "RAG 파이프라인". PPS는 한국어 특화 임베딩 + Qdrant + 하이브리드 검색을 운영 데이터로 검증 완료.

증거 내용
services/knowledge_hub/core/storage/vector_db/vector_db.py VectorDBClient — Qdrant 클라이언트 래퍼(저장/검색/필터)
services/knowledge_hub/core/rfp/rfp_indexer.py 3-tier 컬렉션: rfp_documents·rfp_sections·rfp_requirements / _chunk_text() 청킹(5000자, overlap 300)
docs/development/embedding_strategy.md 임베딩 모델 KURE-v1 (1024-dim 한국어 모델)
services/knowledge_hub/core/rfp/rfp_query_service.py RFPQueryServiceRRF 랭킹(40%) + cosine 유사도(60%) 하이브리드
docs/development/vector_search_test_report.md 검증 규모: section 18,547 / requirement 186 / document 30 벡터, 문서 검색 정확도 77~79%

차별점 — 영문 임베딩이 아닌 한국어 전용 KURE-v1 채택 → 공고문·서식 등 한글 행정문서에서 검색 품질 우위. RFP의 "답변 퀄리티" 고려사항에 직접 대응.

A-4. 프롬프트 엔지니어링 — ✅ (강점, 정확 대응)

RFP: 유형별 프롬프트 + "서식 개정 시 재학습 없이 프롬프트 수정만으로 즉시 반영". PPS의 PromptRegistry가 이 요구를 정확히 충족.

증거 내용
services/ai_engine/core/prompts/registry.py PromptRegistry.md/.yaml 파일을 frontmatter(YAML)로 로드, 코드 배포 없이 프롬프트 교체
core/prompts/ 디렉토리 구조 도메인별 분리: /rfp/, /chatbot/, /eval_system_analysis/, /document_assistant/
프롬프트 메타데이터 description·requires_json·temperature·estimated_input/output_tokens
예) core/prompts/rfp/structure.md, extract_toc_from_headings.md 유형별 프롬프트 + 단계별 규칙(CoT 흔적)

차별점 — 프롬프트가 소스코드와 분리된 외부 파일. RFP가 명시한 "재학습 없이 프롬프트 수정만으로 서식 개정 즉시 반영" 운영체계를 이미 보유.

A-5. 할루시네이션 최소화 (공고문·서식 기반 생성) — ✅

RFP: 공고문·서식 기반 문구 생성으로 할루시네이션 최소화. PPS는 RAG 컨텍스트 주입 + Few-Shot으로 사실 기반 생성.

증거 내용
services/ai_engine/clients/knowledge_hub_client.py search_proposal_sections()/search_proposal_documents() — 생성 전 근거 컨텍스트 주입
services/data_pipeline/rfp2/requirement_extractor.py RFPRequirementExtractor — 원문 요구사항 추출 → Few-Shot/근거 활용

A-6. 항목별 초안 스트리밍 (첫 응답 5초) — 🔴

RFP: 항목별 초안 스트리밍 생성, 첫 응답 5초 미만. PPS는 현재 "stream": False 일괄 응답. 단, Celery 비동기 작업 분해 기반 보유 → 항목별 부분 결과 SSE 푸시로 단기 구현 가능(→ 04. 갭분석).

증거 내용
services/ai_engine/tasks/rfp_tasks.py structure_rfp_task() — 항목 단위 비동기 처리(부분 결과 푸시 기반)
services/ai_engine/core/celery_app.py task_prerun/task_postrun 시그널 — 진행 상태 이벤트 발행 지점 존재

B. 서식 처리 (입력 파싱 + 출력 생성)

B-1. HWP/HWPX 파싱 — ✅ (강점)

RFP 제공 데이터가 HWP·PDF·DOCX. PPS는 자체 HWP 바이너리 파서 + HWPX XML 파서 보유(외부 SaaS 의존 최소화 → 폐쇄망 적합).

증거 내용
libs/core_utils/hwp_parser/parser/parse.py olefile 기반 HWP(OLE) 바이너리 파서 — parse_doc_info()/parse_section()
libs/core_utils/hwp_parser/parser/section_parser.py SectionParser — 페이지 정의·문단 텍스트 파싱
libs/core_utils/hwp_parser/services/hwpx_service.py HWPX(ZIP/XML) 파서 — 한컴 네임스페이스 처리, HTML 변환
libs/core_utils/hwp_parser/__init__.py convert_hwp_to_html()매직바이트로 HWP/HWPX 자동 감지
libs/core_utils/upstage/document_digitizer.py digitize_file() — Upstage 문서 디지털화(PDF·HWP→HTML), 보조 경로

B-2. HWP·PDF 원본 레이아웃 유지 출력 — ✅ (강점)

RFP: 융자신청서 원본 표·폰트·여백 완전 보존 HWP/PDF 다운로드. PPS는 python-hwpx로 표·셀·스타일을 네이티브 생성.

증거 내용
apps/rfp-gen/backend/app/services/document_builder/hwpx_generator.py python-hwpx(HwpxDocument) 기반 문서 생성 — add_table()/set_cell_text()/_add_cover()
.../document_builder/hwpx_engine/ rfp_compositor·section_builder·table_builder·style_registry·package_builder 모듈
docs/requirements/HWP_EXPORT_REQUIREMENTS.md 출력 요구 명세화: 템플릿(REQ-TMP)·텍스트(REQ-TXT)·표(REQ-TBL)·페이지 분기 규칙(REQ-PG)
apps/eval-system-premium/hwpx/ hwpx-intelligence — HWPX 분석·추출 파이프라인(규격서 처리 실적)

차별점 — RFP는 "원본 레이아웃 유지"를 명시. PPS는 LibreOffice 변환 같은 깨지기 쉬운 방식이 아닌 HWPX 네이티브 조립으로 표·스타일을 보존. 한글 행정서식 출력에 결정적 강점.


C. 데이터 수집·구축 파이프라인

C-1. 공고문·서식 수집 (G2B/나라장터) — ✅

RFP 입력 = 정책 공고문. PPS는 나라장터(G2B) OpenAPI 연동 수집기를 이미 운영.

증거 내용
services/data_pipeline/rfp2/ingest.py RFPIngester — 나라장터 입찰공고 API 수집
services/data_pipeline/rfp2/keyword_search.py RFPKeywordSearcher — 입찰공고·사전규격 키워드 검색
services/data_pipeline/rfp2/parse.py, extract.py 필드 파싱·TOC 평탄화·섹션 추출
services/data_pipeline/app/api/rfp_search.py POST /rfp/search/bids|prespecs|integrated 엔드포인트

D. 인증·인프라·운영

D-1. 공단 포털 SSO 연동 — ✅

RFP: 고객 포털 재인증 없이 접근. PPS는 nginx auth_request 기반 멀티 scope SSO 보유.

증거 내용
infra/portal-nginx/nginx.conf /_auth_verify_{eval,premium,rfp,gateway,dev} — internal subrequest로 scope별 인증
services/knowledge_hub/app/api/portal_auth.py LoginBody/TokenPair, /api/auth/verify?scope= — JWT 검증
services/knowledge_hub/core/storage/rdb/portal_db/jwt.py create_access_token()/create_refresh_token(), scope별 쿠키(portal_at_{scope})

차별점 — 공단 포털 SSO는 scope 1개만 매핑하면 연동 완료. 이미 5개 scope를 운영하는 검증된 패턴.

D-2. CSAP형 외부망 독립(폐쇄망·CPU) 구축 — ✅ (최대 강점)

RFP 인프라 요구 = CSAP 인증 IaaS/PaaS 외부망 독립(CPU 기반). PPS는 air-gapped 온프렘 배포 모드를 이미 보유.

증거 내용
docker-compose.onprem.yml 전 서비스 pull_policy: never·build: !reset null외부 레지스트리 접근 차단
docker-compose.onprem-mock.yml 내부 vLLM 컨테이너(pps-kanana-2-30b, pps-qwen3-vl-8b) overlay
scripts/start.sh pps_resolve_modedocker load < pps-images.tar 오프라인 이미지 로드, 네트워크 브리지
docker-compose.cloud.yml 공공/인터넷 모드(민간 LLM·Infisical) — 동일 코드, 모드만 분리

차별점 — RFP가 요구하는 "외부망 독립·국내 공공 클라우드"를 위한 폐쇄망 운영 아키텍처(이미지 tar 반입·내부 LLM·레지스트리 차단)를 설계·구현 완료 상태로 보유. 통상 가장 난도 높은 항목을 즉시 충족.

D-3. 관리자 대시보드 (작업·비용 모니터링) — 🟡

RFP: 토큰·비용 실시간 조회 + 예산 80%·100% 초과 자동 알림·차단. PPS는 토큰 집계·작업 모니터링 보유, 예산 임계 차단 미구현.

증거 내용
services/ai_dashboard/backend/app/api/workers.py WorkerStats — active/pending/succeeded/failed 집계
services/ai_dashboard/backend/app/api/tasks.py 작업 목록·상세·상태 필터(TaskState)
services/ai_engine/core/engines/mixins/llm_mixin.py _track_usage()/get_usage_stats() — input/output 토큰 누적
services/ai_engine/core/engines/mixins/logging_mixin.py _log_llm_call() — 호출별 토큰·latency 로깅
(미구현) 예산 임계값 80%/100% 알림·차단 로직 → 04. 갭분석

D-4. LLM Fallback (장애 대체 전환) — 🟡

RFP: 주 타임아웃(30초) 시 대체 자동 전환. PPS는 purpose 미일치 시 동종 모델 fallback + Celery retry 보유, 타임아웃 기반 모델간 자동 전환은 보강 필요.

증거 내용
services/ai_engine/core/model_selector.py select_model() — purpose exact match 실패 시 동종 kind fallback
services/ai_engine/tasks/rfp_tasks.py Celery max_retries=3·soft_time_limit=600·default_retry_delay=60

D-5. 동시 50인 / 가용률 99.5% (Queue 처리) — 🟡

RFP: 동시 50인 이상 지연 없이(Queue 방식), 가용률 99.5%. PPS는 Celery + Redis 분산 큐로 동시성 기반 보유. K8s 매니페스트는 템플릿 단계(보강 필요).

증거 내용
services/ai_engine/core/celery_app.py Redis broker/backend 분산 작업 큐
infra/k8s/ base/apps/services 구조 정의(README 템플릿), 실제 매니페스트 작성 필요

E. 개인정보·보안

E-1. 비식별(마스킹)·ZDR·시큐어 삭제 — 🔴

RFP: 식별정보 마스킹·Zero Data Retention·다운로드 후 즉시/7일 영구 삭제·감사 로그 분리. PPS는 시크릿 관리·스캔 기반은 보유, 비식별 처리 모듈은 신규 구현 필요.

증거 내용
.gitleaks.toml 시크릿 스캔 정책(누출 방지)
Infisical(self-hosted, docker-compose.cloud.yml) 머신 아이덴티티 기반 시크릿 관리(4개 프로젝트)
(미구현) LLM 호출 전 식별정보 마스킹·ZDR·secure delete·감사로그 분리 → 04. 갭분석

매핑 요약표

# RFP 요구 판정 핵심 대응 자산
A-1 민간+오픈소스 LLM ai_engine 모델 팩토리
A-2 자금 유형 분류 🟡 rfp_query_service 유사도 매칭
A-3 RAG 파이프라인 knowledge_hub Qdrant+KURE-v1+RRF
A-4 프롬프트(재학습 불요) PromptRegistry 외부 파일
A-5 할루시네이션 최소화 RAG 컨텍스트 주입
A-6 항목별 스트리밍 🔴 Celery 비동기(SSE 신규)
B-1 HWP/HWPX 파싱 core_utils 자체 파서
B-2 HWP/PDF 원본 출력 python-hwpx 네이티브 생성
C-1 공고문 수집 data_pipeline G2B API
D-1 포털 SSO portal-nginx auth_request
D-2 CSAP 외부망 독립 docker-compose.onprem air-gapped
D-3 대시보드(예산 차단) 🟡 ai_dashboard(토큰만)
D-4 LLM Fallback 🟡 model_selector+Celery retry
D-5 동시 50인/99.5% 🟡 Celery+Redis 큐 / K8s 보강
E-1 비식별·ZDR·삭제 🔴 보안 기반 보유(모듈 신규)