← 목록
공개 범위 안내 — 이 사이트는 도구 설계·기획 문서만 공개합니다. 분석 대상 원문(수행안내서 전문, 제안요청서, 제안서 판독본)과 특정 제안서에 대한 분석 결과는 포함하지 않습니다. 문서에 남은 실명·연락처는 마스킹 처리했습니다.

PIA-Auditor — 개발계획서 (Vertical Slice)

대상 05_분석툴_기능명세서.md v1.0 · 06_기술스택선정_및_개발기획서.md v1.0
문서 버전 v1.0 · 2026-08-04
개발자 1인 기준 · 총 14주 (S7 선택 시 17주)


0. 왜 수직 슬라이스인가

수평 계층(파서 전부 → 지식베이스 전부 → 룰 전부 → 리포트)으로 쌓으면 마지막 계층이 붙을 때까지 아무것도 검증할 수 없다. 이 도구의 핵심 리스크는 "동작하지 않는 것"이 아니라 "그럴듯하지만 틀린 Finding을 낸다" 는 것이고, 그건 끝에서 한 번에 확인할 수 없다.

그래서 모든 슬라이스는 입력 문서 → Finding → 리포트 를 관통한다.

S0 ▓░░░░░░░░  뼈대 관통 (Finding 1건, 하드코딩이라도)
S1 ▓▓░░░░░░  문서위생 6룰      → 골든셋  5/13   ← 여기서 이미 실사용 가능
S2 ▓▓▓░░░░░  요구사항·산출물   → 골든셋  6/13
S3 ▓▓▓▓░░░░  지식베이스·도메인 → 골든셋  9/13
S4 ▓▓▓▓▓░░░  커버리지·인용     → 골든셋 10/13
S5 ▓▓▓▓▓▓░░  방법론 룰 전체    → 골든셋 13/13  ← 기능 완성
S6 ▓▓▓▓▓▓▓░  이미지 판독 자동화
S7 ▓▓▓▓▓▓▓▓  리포팅·배포

0.1 슬라이스 공통 규칙 (예외 없음)

  1. CLI로 실행된다. pia-audit run <docs/> --out report.md 가 매 슬라이스에서 동작한다.
  2. 리포트를 낸다. Finding이 0건이어도 리포트는 나온다.
  3. 골든셋 회귀가 CI에서 돈다. 슬라이스가 끝나면 그 슬라이스가 담당한 Finding은 영구히 재현된다.
  4. 근거 없는 Finding은 생성 거부. S0부터 적용한다. 나중에 붙이면 이미 붙은 룰을 전부 고쳐야 한다.
  5. 토큰·비용 회계를 남긴다. S0부터. 없으면 최적화 판단을 할 수 없다.

0.2 이미지 판독을 뒤로 미루면서도 앞 슬라이스를 막지 않는 방법

골든셋 13건 중 상당수가 제안요약서(이미지 슬라이드 50장) 에서 나온다. 판독(S6)을 뒤에 두면 S1~S5가 막힐 것처럼 보이지만, 그렇지 않다.

이번 세션의 판독 결과 output/03_제안서_발표자료-마사회.md 를 S0에서 픽스처로 동결한다.
S1~S5는 이 픽스처를 입력으로 쓴다. S6은 판독을 자동화하고, S6의 인수 기준은 "동결 픽스처와 동등한 판독 결과를 자동 생성" 이다.

이렇게 하면 판독 품질 문제와 룰 품질 문제가 섞이지 않는다. S1~S5에서 Finding이 틀리면 원인은 무조건 룰이다.


S0 — Walking Skeleton (1주)

목표 파이프라인 전 구간을 가장 얇게 관통한다
포함 프로젝트 골격, PdfBackend 추상화, 콘텐츠 해시 캐시, Finding 스키마, 근거 스키마, 리포트 렌더러, 토큰 회계, 골든셋 픽스처 동결
입력 docs/ 3개 원본
출력 Finding 1건(하드코딩 가능)이 담긴 Markdown 리포트

작업
- uv init, Python 3.12 고정, uv.lock 커밋
- 기존 tools/pdf2md.pypia_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를 그대로 쓴다.


S1 — 문서 위생 검사 (2주) · 골든셋 5/13

목표 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 옵션 제공.


S2 — 요구사항 추출 및 대조 (2주) · 골든셋 6/13

목표 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건으로 파서 일반화 검증.


S3 — 지식베이스와 도메인 추론 (3주) · 골든셋 9/13

목표 안내서를 구조화하고, 가장 가치 있는 룰을 먼저 켠다
왜 세 번째인가 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에 명시.


S4 — 커버리지 매핑과 인용 검증 (3주) · 골든셋 10/13

목표 첫 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은 사람 확인 필수를 리포트에 명시.


S5 — 방법론 정합성 룰 전체 (3주) · 골든셋 13/13 ✅

목표 기능 완성. 이번 세션 분석을 도구가 전부 재현한다
포함 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).


S6 — 이미지 문서 판독 자동화 (2주)

목표 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회로 완주
- [ ] 판독 한계 구간이 명시적으로 표기

리스크 — 자동 판독이 픽스처에 못 미쳐 골든셋이 깨질 수 있다. 그때는 픽스처를 낮추지 말고 판독을 고친다. 픽스처는 사람이 검증한 기준선이다.


S7 — 리포팅 고도화·배포 (2주, 선택)


부록 A. 골든셋 재현 사다리

슬라이스 누적 신규 재현 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 (자동 판독으로 유지)

부록 B. 슬라이스별 데모 시나리오

각 슬라이스 종료 시 이 명령 하나로 가치를 보인다.

슬라이스 데모
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에도 동작

부록 C. 릴리스 기준

릴리스 슬라이스 대상 조건
v0.1 내부 S0~S1 컨설팅사 PM 셀프체크 골든셋 5/13, 오탐 0
v0.2 파일럿 S0~S3 발주기관 검수담당 골든셋 9/13, 사용자 2명 실사용
v1.0 정식 S0~S6 전체 골든셋 13/13, 오탐 ≤1/건, 비용 ≤$10, 문서화 완료

부록 D. 중단 조건

다음 중 하나에 해당하면 다음 슬라이스로 넘어가지 말고 멈춘다.

  1. S5에서 오탐률이 기준을 넘고 룰 조정으로 해결되지 않는다 → 해당 룰 영구 비활성, 범위 축소 재협의
  2. S3에서 지표 121개 추출이 정확해지지 않는다 → 안내서 파싱 대신 수작업 카탈로그 1회 작성 후 유지보수 체계로 전환 (기준문서는 3년 주기 개정이므로 수작업이 비합리적이지 않다)
  3. S6 자동 판독이 픽스처 대비 표 일치율 70% 미만 → 이미지 문서는 반자동(사람 검수 전제) 으로 범위 재정의