대상 05_분석툴_기능명세서.md v1.0 · 06_기술스택선정_및_개발기획서.md v1.0
문서 버전 v1.0 · 2026-08-04
개발자 1인 기준 · 총 14주 (S7 선택 시 17주)
수평 계층(파서 전부 → 지식베이스 전부 → 룰 전부 → 리포트)으로 쌓으면 마지막 계층이 붙을 때까지 아무것도 검증할 수 없다. 이 도구의 핵심 리스크는 "동작하지 않는 것"이 아니라 "그럴듯하지만 틀린 Finding을 낸다" 는 것이고, 그건 끝에서 한 번에 확인할 수 없다.
그래서 모든 슬라이스는 입력 문서 → Finding → 리포트 를 관통한다.
S0 ▓░░░░░░░░ 뼈대 관통 (Finding 1건, 하드코딩이라도)
S1 ▓▓░░░░░░ 문서위생 6룰 → 골든셋 5/13 ← 여기서 이미 실사용 가능
S2 ▓▓▓░░░░░ 요구사항·산출물 → 골든셋 6/13
S3 ▓▓▓▓░░░░ 지식베이스·도메인 → 골든셋 9/13
S4 ▓▓▓▓▓░░░ 커버리지·인용 → 골든셋 10/13
S5 ▓▓▓▓▓▓░░ 방법론 룰 전체 → 골든셋 13/13 ← 기능 완성
S6 ▓▓▓▓▓▓▓░ 이미지 판독 자동화
S7 ▓▓▓▓▓▓▓▓ 리포팅·배포
pia-audit run <docs/> --out report.md 가 매 슬라이스에서 동작한다.골든셋 13건 중 상당수가 제안요약서(이미지 슬라이드 50장) 에서 나온다. 판독(S6)을 뒤에 두면 S1~S5가 막힐 것처럼 보이지만, 그렇지 않다.
이번 세션의 판독 결과
output/03_제안서_발표자료-마사회.md를 S0에서 픽스처로 동결한다.
S1~S5는 이 픽스처를 입력으로 쓴다. S6은 판독을 자동화하고, S6의 인수 기준은 "동결 픽스처와 동등한 판독 결과를 자동 생성" 이다.
이렇게 하면 판독 품질 문제와 룰 품질 문제가 섞이지 않는다. S1~S5에서 Finding이 틀리면 원인은 무조건 룰이다.
| 목표 | 파이프라인 전 구간을 가장 얇게 관통한다 |
| 포함 | 프로젝트 골격, PdfBackend 추상화, 콘텐츠 해시 캐시, Finding 스키마, 근거 스키마, 리포트 렌더러, 토큰 회계, 골든셋 픽스처 동결 |
| 입력 | docs/ 3개 원본 |
| 출력 | Finding 1건(하드코딩 가능)이 담긴 Markdown 리포트 |
작업
- uv init, Python 3.12 고정, uv.lock 커밋
- 기존 tools/pdf2md.py → pia_auditor/convert/ 로 이식, PdfBackend 인터페이스 뒤로 격리 (§06-4.2)
- Pydantic 모델: Finding, Evidence, Document, Page
- @stage 데코레이터 + SQLite 캐시
- Jinja2 리포트 템플릿 (§05 M10-F03 고정 구성)
- 골든셋 픽스처 동결: tests/fixtures/ 에 01~03 마크다운 + 기대 Finding 13건 JSON
DoD
- [ ] pia-audit run docs/ --out r.md 가 리포트를 낸다
- [ ] 두 번째 실행이 캐시로 즉시 끝난다
- [ ] 근거 없는 Finding 생성 시 예외 발생
- [ ] pytest 통과, CI 구성 완료
- [ ] 골든셋 13건 JSON이 리포지터리에 존재 (아직 0/13 재현)
리스크 — 없음(순수 골격). 다만 Finding 스키마를 여기서 잘못 잡으면 전 슬라이스가 영향받는다. §05 M10-F02를 그대로 쓴다.
| 목표 | LLM 없이 즉시 수정 가능한 결함을 잡는다 |
| 왜 첫 번째인가 | 오탐이 거의 없고, 발견 즉시 고칠 수 있으며, API 키 없이 돌아간다. 여기까지만으로도 제안서 제출 전 셀프체크 도구로 쓸 수 있다 |
| 포함 | M8 전체(H-01~H-06), M9-F01/F03 |
| 입력 | 변환된 마크다운 |
| 출력 | 위생 Finding + 근거 추적표 |
룰과 담당 골든셋
| 룰 | 검사 | 골든셋 |
|---|---|---|
| H-01 | 표 동일 열 전체가 플레이스홀더(0년0월, xxx, ○○○) |
✔ 수탁사 18개사 |
| H-02 | 정량 0값 (0회, (협의필요)) |
✔ 교육 0회 |
| H-03 | 문서 작성연도 대비 3년 이상 과거 이행 시한 | ✔ '12년말/'13년말 |
| H-04 | 요구사항 코드 결번 | ✔ CNR-012 |
| H-05 | 목차 장 수 ≠ 본문 간지 수 | ✔ 5 vs 6 챕터 |
| H-06 | 유사 인명(편집거리 ≤1) 간 직급 상충 | ✔ 전○찬/전△찬 |
DoD
- [ ] 골든셋 5/13 재현
- [ ] API 키 없이 전 구간 동작 (--offline 아님, 애초에 LLM 미사용)
- [ ] 오탐 0건 (양호 문서 3건 투입)
- [ ] 모든 Finding이 file:line + 인용문 보유
리스크 — H-03의 "문서 작성연도" 판정. 표지 날짜가 없는 문서 대비 --doc-year 옵션 제공.
| 목표 | RFP를 구조로 읽고, 산출물·인력·일정을 기계적으로 대조한다 |
| 왜 두 번째인가 | 여전히 LLM 불필요. 검수 실무에서 가장 자주 쓰이는 대조표가 여기서 나온다 |
| 포함 | M5 전체, M6-F03(산출물), M6-F04(인력), H-07(일정), H-09(산출물 상호참조) |
작업
- 요구사항 목록 표 파싱 → CNR/PMR/QUR/COR/PSR/SER 42항목
- 요구사항 정의서 표 파싱 → 정의 / 세부내용 / 산출정보
- 산출정보 필드를 산출물 목록으로 정규화
- 3자 대조표: RFP 산출정보 × 제안서 산출물 × (선택) 실납품
- 인력 요건 대조: PM 자격, 상주 요건, M/M 검산, 안내서 추가 요건(PM 평가기관 소속, 프리랜서 50% 미만, 평가수행인력 상주)
- 일정 상충: 절대일정(월) vs 상대일정(M+n)
DoD
- [ ] 골든셋 6/13 (신규: 산출물 3종 누락)
- [ ] §4-7 일정 불일치를 INSUFFICIENT_EVIDENCE가 아닌 정식 Finding으로 검출
- [ ] 요구사항 42항목 100% 추출 (누락 시 실패)
- [ ] 산출물 대조표 XLSX 출력
리스크 — RFP 표 구조는 기관마다 다르다. 마사회 형식에 과적합될 수 있다 → 다른 기관 RFP 2건으로 파서 일반화 검증.
| 목표 | 안내서를 구조화하고, 가장 가치 있는 룰을 먼저 켠다 |
| 왜 세 번째인가 | R-DOMAIN-01은 사람이 가장 놓치기 쉬운 유형이고, 이번 분석에서 가장 강한 지적(위치정보·CCTV)을 만들어냈다. 커버리지 매핑(S4)보다 먼저 나와야 한다 |
| 포함 | M4 전체, R-DOMAIN-01, R-IND-03, R-FLOW-01, R-IMPL-01 |
작업
- 안내서 p.57~59 → 지표 카탈로그 121개 (5영역 / 28분야), 조건부 적용 플래그 포함
- p.78~81 → 품질검토 체크리스트 12항목
- 단계별 필수 산출물 카탈로그 (흐름분석 6종 등)
- 산식 카탈로그 (위험도 = 영향도 + (발생가능성 × 법적준거성) × 2)
- 버전 diff (2025.10 신설 = 5.7 인공지능(AI))
- R-DOMAIN-01 신호 사전 — 기관 속성 → 필수 평가분야 역추론
담당 골든셋
| 룰 | 골든셋 |
|---|---|
| R-DOMAIN-01 | ✔ 위치정보(5.4)·고정형 영상정보처리기기(5.1) 누락 |
| R-IND-03 | ✔ AI(5.7) 미반영 |
| R-FLOW-01 | ✔ 개인정보 흐름표·흐름도 산출물 부재 |
| R-IMPL-01 | ✔ 개인정보 과업 이행점검 미배정 |
DoD
- [ ] 골든셋 9/13
- [ ] 지표 121개 전수 검증 (수·영역·분야 100% 일치)
- [ ] R-DOMAIN-01이 제안서 자신의 실적·수탁사 목록에서 신호를 추출 (§05 핵심)
- [ ] 지식베이스가 프롬프트 캐시 프리픽스로 직렬화 (~20K 토큰 목표, count_tokens 실측)
리스크 — 지표 추출은 표 파싱 정확도에 직결. 121개가 정확히 나오지 않으면 이후 전부 흔들린다 → 전수 대조를 DoD에 명시.
| 목표 | 첫 LLM 판정을 붙이되, 환각을 구조적으로 차단한 상태로 붙인다 |
| 포함 | M6-F01/F02, M9-F02/F04, 임베딩 후보 추출, Citations API, Batch API |
작업
- BGE-M3 임베딩 → 요구사항 ↔ 제안서 섹션 후보 상위 3건
- Citations API로 근거 추출 (자유 텍스트 경로)
- 구조화 출력으로 판정 (COVERED / PARTIAL / MISSING / INSUFFICIENT_EVIDENCE)
- 인용 검증: 인용문이 변환 산출물에 실제 존재하는지 문자열 대조 → 불일치 시 Finding 폐기
- 요약본 입력 시 MISSING → INSUFFICIENT_EVIDENCE 자동 강등
- Batch API로 42건 일괄 처리
- R-IND-01 (평가지표 모수·추가삭제 대조표 제시 여부)
⚠️ 구현 주의 — Citations와 구조화 출력은 동시 사용 시 400. 호출을 2단으로 분리한다 (§06-4.5).
DoD
- [ ] 골든셋 10/13
- [ ] 인용 불일치 0건 (전수 대조)
- [ ] 커버리지 매트릭스 XLSX (요구사항 × 판정 × 근거)
- [ ] 요약본 입력 시 MISSING이 하나도 나오지 않음
- [ ] 1회 실행 비용 로그 출력, ≤$3
리스크 — 의미 동등성(다른 용어로 같은 절차). 후보 3건 제시로 완화하되, MISSING은 사람 확인 필수를 리포트에 명시.
| 목표 | 기능 완성. 이번 세션 분석을 도구가 전부 재현한다 |
| 포함 | M7 룰 카탈로그 16개 완성 |
남은 룰
| 룰 | 골든셋 |
|---|---|
| R-RISK-01 | ✔ 침해요인 도출 단계 부재 |
| R-RISK-02 | ✔ 위험도 산식에 법적 준거성 가중치 없음 |
| R-METH-01 | ✔ C.PIAM 미적용 |
| R-SCOPE-01/02 | 영향평가 의무대상 판단 / 비용 분리·독립성 |
| R-FLOW-02/03, R-RISK-03, R-IND-02, R-IMPL-02, R-HR-01 | (확인필요 계열) |
DoD
- [ ] 골든셋 13/13 ✅
- [ ] 오탐률 검증: 양호 문서 5건 투입, HIGH 이상 오탐 ≤1건/건
- [ ] 심각도 4단계 정확히 부여
- [ ] 권고사항이 우선순위 순으로 정렬
- [ ] §5 강점 섹션이 자동 생성 (결함만 있는 리포트는 의사결정에 못 씀 — §05 M10-F03)
- [ ] 1회 분석 비용 ≤$10, 소요 ≤30분
리스크 — 오탐. 여기서 처음으로 오탐률을 정면으로 측정한다. 기준 미달 시 룰을 끄는 것이 정답이다(신뢰가 커버리지보다 중요, R4).
| 목표 | S0에서 동결한 픽스처를 도구가 스스로 생성한다 |
| 포함 | M3 전체 |
작업
- M1-F02 텍스트 밀도 판정 (임계 50자/쪽) → 자동 분기
- 110 dpi 렌더링, 실패 시 200 dpi 재시도
- 판독 프롬프트 규격 (슬라이드 1장 = MD 섹션 1개, 표는 GFM, 도해는 A → B → C)
- 판독 불확실성 표기 → 해당 구간 Finding 자동 강등
- --offline PaddleOCR 폴백
- 슬라이드 번호 정합성 교차검증
DoD
- [ ] 자동 판독 결과로 골든셋 13/13 유지 (핵심 인수 기준)
- [ ] 동결 픽스처와 자동 판독 결과의 표 셀 일치율 ≥90%
- [ ] --offline 모드가 API 호출 0회로 완주
- [ ] 판독 한계 구간이 명시적으로 표기
리스크 — 자동 판독이 픽스처에 못 미쳐 골든셋이 깨질 수 있다. 그때는 픽스처를 낮추지 말고 판독을 고친다. 픽스처는 사람이 검증한 기준선이다.
build_site.py 승계)| 슬라이스 | 누적 | 신규 재현 Finding |
|---|---|---|
| S0 | 0/13 | (픽스처 동결만) |
| S1 | 5/13 | 수탁사 미기입 · 과거일자 재사용 · 교육 0회 · CNR-012 결번 · 표기 불일치 |
| S2 | 6/13 | 산출물 3종 누락 (+ 일정 상충) |
| S3 | 9/13 | 평가영역5 누락(위치정보·CCTV·AI) · 흐름분석 산출물 부재 · 이행점검 미배정 |
| S4 | 10/13 | 지표 체계 근거 미제시 |
| S5 | 13/13 | 침해요인 도출 부재 · 위험도 산식 부재 · C.PIAM 미적용 |
| S6 | 13/13 | (자동 판독으로 유지) |
각 슬라이스 종료 시 이 명령 하나로 가치를 보인다.
| 슬라이스 | 데모 |
|---|---|
| S1 | pia-audit hygiene 제안서.pdf → "수탁사 18개사 전원 미기입, 교육 0회, CNR-012 결번" |
| S2 | pia-audit outputs --rfp RFP.pdf --proposal 제안서.pdf → 산출물 대조표 XLSX |
| S3 | pia-audit domain --proposal 제안서.pdf → "위치정보사업자 언급 → 5.4 위치정보 점검 없음" |
| S4 | pia-audit coverage --rfp ... --proposal ... → 42×N 커버리지 매트릭스 |
| S5 | pia-audit run docs/ → 이번 세션 분석보고서와 동등한 리포트 |
| S6 | 같은 명령이 이미지 PDF에도 동작 |
| 릴리스 | 슬라이스 | 대상 | 조건 |
|---|---|---|---|
| v0.1 내부 | S0~S1 | 컨설팅사 PM 셀프체크 | 골든셋 5/13, 오탐 0 |
| v0.2 파일럿 | S0~S3 | 발주기관 검수담당 | 골든셋 9/13, 사용자 2명 실사용 |
| v1.0 정식 | S0~S6 | 전체 | 골든셋 13/13, 오탐 ≤1/건, 비용 ≤$10, 문서화 완료 |
다음 중 하나에 해당하면 다음 슬라이스로 넘어가지 말고 멈춘다.