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%)PASS5샘플 평균 0.00%5/5 정상
MC > 0개 (이전 0개)FAIL0개회귀 아닌 데이터 특성 (아래 §3)
파싱 개수 회귀 없음 (>= 100)PASS112개이전 123개 → 112개 (소폭 감소)
이미지 추출 >= 50개PASS59개변동 없음
DB 상태 조회 성공PASS112행재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 이슈 부분 해결부분 PASS7개 중 2개 해결, 1개 미해결, 4개 판단 불가/범위 외

권장 결정

조건부 합격 (Conditional PASS): 본 샘플 ZIP 한정으로는 4/5 PASS. 그러나 MC와 정답/해설은 다른 샘플 또는 코드 검토 없이는 진정한 해결 여부를 판정할 수 없음.


5. 후속 권장 조치 (백로그)

범위 확정 (2026-05-05, team-lead): 본 팀 작업은 Task 4-3 완료로 마무리. 14,467개 대규모 배치 처리는 진행하지 않음. 아래는 향후 별도 사이클에서 다룰 백로그.

백로그 항목

  1. MC 검증용 다른 ZIP 재테스트①②③④⑤ 마커가 포함된 ZIP 1개로 동일 검증 반복. parser-engineer MC 수정의 실효성은 본 샘플로 입증되지 않음. (발견: 다른 ZIP 3개에서 MC 마커 확인됨)
  2. 가로 배치 선택지 미지원 fix — parser.py:241-244의 choice_pattern 로직이 한 라인에 여러 마커(①②③)가 있을 때 일부 선택지만 추출. choice_split_pattern 재구현 필요. (parser-engineer 분석 완료, 수정안 제시됨)
  3. 나머지 33% body_md 손상 케이스 분석 — 짧은 본문이 일부 PDF에서 30%+ 손상되는 패턴 조사.
  4. ZIP 한글 파일명 cp437→cp949 변환 (downloader.py)
  5. 이미지-문제 매핑 bbox y-좌표 기반 재구현
  6. 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%