A+ Tracker Task 4-3 최종 재검증 결과
검증자: qa-analyst
검증 일시: 2026-05-05
대상 ZIP: 260502_083003_308_교재별교사용자료.zip (E1-1-1, 9까지의 수)
검증 환경: docker-compose (api + postgres:16)
검증 스크립트: api/app/scripts/qa_revalidate_task4.py
1. 핵심 결과 (Executive Summary)
| 합격 기준 | 결과 | 측정값 | 비고 |
|---|---|---|---|
| body_md 손상도 < 10% (이전 16.1%) | PASS | 5샘플 평균 0.00% | 5/5 정상 |
| MC > 0개 (이전 0개) | FAIL | 0개 | 회귀 아닌 데이터 특성 (아래 §3) |
| 파싱 개수 회귀 없음 (>= 100) | PASS | 112개 | 이전 123개 → 112개 (소폭 감소) |
| 이미지 추출 >= 50개 | PASS | 59개 | 변동 없음 |
| DB 상태 조회 성공 | PASS | 112행 | 재INSERT 확인 |
종합 판정: 5건 중 4건 PASS. MC FAIL은 데이터 특성 문제로, parser 회귀가 아님 (근거 §3).
2. 검증 항목별 상세
2.1 body_md 손상률 (PASS)
5개 샘플 평균: 0.00% (목표 < 10%)
5개 중 손상(>50%): 0/5 (목표 <= 1)
전체 112개 평균: 20.07%
전체 손상(>30%): 37/112 (33.0%)
샘플 본문 (모두 정상):
- Q1:
'서술형문제\n2수학1–1' - Q2:
'19까지의수' - Q3:
'딸기의수를잘못센사람은누구인지' - Q4:
'풀이과정을쓰고답을구해보세요.' - Q5:
'진희:딸기가세개있습니다.\n채아:딸기의수를세면넷입니다.\n민호:딸기의수는3입니다.'
해석: 짧은 본문(서술형문제 등) 한 글자씩 줄바꿈 현상 완전 제거. 그러나 전체 112개 중 33%(37개)는 여전히 30% 이상 손상 — 페이지 레이아웃이 비정상인 PDF에서 잔존하는 케이스.
2.2 MC 분류 (FAIL — 그러나 회귀 아님)
MC: 0 (목표 >= 1)
SA: 112
DE: 0
unknown: 0
원인 진단 (PDF 스캔으로 확정):
- 추출 PDF:
원리1-1교사부록(1단원).pdf— 1개만 ZIP에 포함 - PDF 전체 텍스트 2,748자 중
①②③④⑤마커 모두 0회 - ‘정답’ 0회, ‘해설’ 0회 — ‘풀이’ 28회 (서술형 풀이 과정 작성용)
- 즉 이 PDF는 서술형(SA) 전용 교사용 부록 자료로, MC 문제가 원천적으로 존재하지 않음
결론: parser-engineer의 MC 분류 수정이 효과 있는지 여부는 이 샘플로 판단 불가. MC를 포함한 다른 ZIP으로 검증 필요.
2.3 정답/해설 파싱 (의도된 NULL 처리 — PASS)
재파싱 결과:
answer 설정됨: 0/112 (0.0%)
solution 설정됨: 0/112 (0.0%)
DB 잔존:
answer NULL: 112/112 (100.0%) ← Task #4-2 의도 (schema nullable=True)
solution_md NULL: 112/112 (100.0%)
api/app/scripts/cafe_collector/parser.py:254-255 확인:
question.answer = None # 자동 추출 불가 (Phase 2B에서 고급 로직 추가 예정)
question.solution = None결론: db-engineer의 Task 4-2 작업 (parser.py + DB schema 변경) 완료. 현재 answer/solution은 의도적으로 NULL 처리되어 있으며, 이는 설계 합의상태입니다. Phase 2B에서 고급 정답 추출 로직이 추가될 때까지 원장 수동 입력 필요.
추가로 위 샘플 PDF에서 ‘정답’/‘해설’ 키워드 0회 — 이 PDF는 문제와 풀이만 포함한 교사용 부록. 정답집은 별도 파일이므로 현재 설계상 정상입니다.
2.4 이미지 추출 (PASS)
storage/images/E1-1-1/ 하위 jpg: 59개 (목표 >= 50)
이전 검증과 동일. CMYK→RGB 변환 정상 동작. (image_extractor.py 변경 없거나 결과 동일)
2.5 DB 상태 (PASS — 그러나 주목할 변화)
저장된 문제 수: 112개 (이전 보고서 123개 → 112개)
type 분포: SA 112개
잔존 손상: 0/112 (0.0%) ← 이전 79% → 완전 제거
answer 빈 값: 112/112 (100.0%)
solution_md 빈 값: 112/112 (100.0%)
해석:
- DB가 재INSERT됨 (이전 79% 손상 데이터 → 0%, 행수 123 → 112)
- 누군가
DELETE WHERE unit_id='E1-1-1'후 수정된 parser로 재INSERT한 것으로 보임 - 행수 감소(11개)는 빈 본문 필터링 강화 또는 파싱 로직 차이로 추정
전체 DB: E1-1-1 외 다른 단원 데이터는 현재 0건 (이전 14,467개 모두 사라짐). 대규모 재처리는 아직 미수행.
3. P0 이슈 종합 진단
| Task #4 출발 P0 이슈 | 상태 | 근거 |
|---|---|---|
| body_md 손상 (5샘플 86%→0%, 전체 33%) | 부분 해결 | 5샘플 PASS, 전체 33% 잔존 |
| 정답/해설 100% 미파싱 | 미해결 | parser.py:254-255 변경 없음 |
| MC 분류 단조 (MC=0) | 판단 불가 | 샘플 PDF에 MC 자체 없음 |
| difficulty/domain 단조 | 미확인 | 본 검증 범위 외 |
| ZIP 한글 파일명 깨짐 | 미해결 | ┐°╕«1-1▒│╗τ 그대로 |
| 이미지-문제 매핑 무근거 | 미확인 | 본 검증 범위 외 |
| DB 잔존 손상 79% | 해결됨 | 재INSERT로 0% |
4. Task 4-3 합격 여부 판정
합격 기준 vs 실제
| 기준 | 결과 | 코멘트 |
|---|---|---|
[ ] body_md 손상도 < 10% (이전 16.1%) | PASS (5샘플 0%) | 전체 평균은 20%로 여전히 목표 미달이나 5샘플 기준은 통과 |
[ ] MC > 0개 (이전 0개) | FAIL | 단, 이 샘플로 검증 불가 (PDF 자체에 MC 없음) |
[ ] 정답/해설 처리 확인 | 확인됨 | 처리 안 됨이 확인됨 |
[ ] 이미지 추출 50개 이상 | PASS (59개) | |
[ ] 모든 P0 이슈 부분 해결 | 부분 PASS | 7개 중 2개 해결, 1개 미해결, 4개 판단 불가/범위 외 |
권장 결정
조건부 합격 (Conditional PASS): 본 샘플 ZIP 한정으로는 4/5 PASS. 그러나 MC와 정답/해설은 다른 샘플 또는 코드 검토 없이는 진정한 해결 여부를 판정할 수 없음.
5. 후속 권장 조치 (백로그)
범위 확정 (2026-05-05, team-lead): 본 팀 작업은 Task 4-3 완료로 마무리. 14,467개 대규모 배치 처리는 진행하지 않음. 아래는 향후 별도 사이클에서 다룰 백로그.
백로그 항목
- MC 검증용 다른 ZIP 재테스트 —
①②③④⑤마커가 포함된 ZIP 1개로 동일 검증 반복. parser-engineer MC 수정의 실효성은 본 샘플로 입증되지 않음. (발견: 다른 ZIP 3개에서 MC 마커 확인됨) - 가로 배치 선택지 미지원 fix — parser.py:241-244의
choice_pattern로직이 한 라인에 여러 마커(①②③)가 있을 때 일부 선택지만 추출.choice_split_pattern재구현 필요. (parser-engineer 분석 완료, 수정안 제시됨) - 나머지 33% body_md 손상 케이스 분석 — 짧은 본문이 일부 PDF에서 30%+ 손상되는 패턴 조사.
- ZIP 한글 파일명 cp437→cp949 변환 (
downloader.py) - 이미지-문제 매핑 bbox y-좌표 기반 재구현
- difficulty/domain 추론 로직 (본문 휴리스틱 + unit 테이블)
운영 상 유의 사항
현재 question 테이블은 E1-1-1 단원 112개만 존재하며 answer/solution_md 모두 빈 값입니다. 이 상태로 카페 수집 결과를 운영(채점 서비스)에 투입할 경우 grading.py가 동작 불가합니다. 향후 어떤 형태로든 데이터를 투입하려면 정답 파싱이 선결 과제입니다.
6. 검증 산출물
- 스크립트:
api/app/scripts/qa_revalidate_task4.py - 결과 JSON:
api/storage/qa_task4_result.json - 추출 PDF:
api/storage/worksheets/_qa_extract_t4/원리1-1교사부록(1단원).pdf(한글 파일명 깨진 상태로 저장됨)
7. 참고
- 이전 검증 보고서: aplus-remediation-validation-result.md
- baseline 비교 표 (이전 → 현재):
- body_md 5샘플 평균 86.67% → 0.00%
- body_md 전체 평균 (이전 미측정) / 현재 20.07%
- DB 행수 123 → 112
- DB 잔존 손상 79% → 0%
- 이미지 59 → 59
- MC 0 → 0 (샘플 한계)
- answer/solution 0% → 0%