Wiki Log
[2026-05-05] project | aplus-tracker Task 4-3 최종 재검증: 4/5 PASS — 팀 작업 마무리
- 보고서:
wiki/projects/aplus-remediation-task4-result.md - 결과: body_md 5샘플 0%, 이미지 59개, DB 112행 (재INSERT됨, 잔존 손상 0%)
- MC FAIL (단 데이터 한계 — 샘플 PDF에 ①-⑤ 0회), 정답/해설 미적용 확인
- 범위 확정 (team-lead): 14,467개 대규모 배치 미진행. MC 재테스트·정답 통합은 백로그 이관
[2026-05-04] project | aplus-tracker 수정 후 재검증: 1/5 PASS, 신규 회귀 발생
Type: 수정 후 재검증 (qa-engineer)
결과: 5개 성공 기준 중 1개 PASS — Phase 2A 종료 차단
- body_md: 평균 damage 20.07%, 손상 16.1% (목표 <5% 미달)
- DB 저장: 112개 (목표 123개, -11개 회귀)
- 이미지 추출: 0개 (신규 회귀)
- P0-E 신규:
image_extractor.py:105pix.n_componentsAttributeError (PyMuPDF API 오용) - P0-D 미해결: 정답/해설 100% 빈 값 (112/112)
- P1-E 미해결: type=SA 100%, MC=0, difficulty=MID 100%
보고서: aplus-remediation-validation-result
[2026-05-04] project | 샘플 검증 완료: 긴급 이슈 #1 재현, #2 해결, 신규 이슈 3개 발견
Type: 샘플 파이프라인 검증 (3인 팀)
검증 결과 요약 📊
팀 구성:
- parser-engineer: ZIP 분석 → PDF 파싱 → body_md 검증
- db-engineer: unit_id 매핑 → DB 저장 → 제약조건 검증
- qa-analyst: 전체 모니터링 → 추가 이슈 발견 → 최종 보고서
파이프라인 상태:
- ✅ 파싱: 123개 문제, 41개 이미지 추출 (12.1초)
- ✅ DB 저장: 새로운 unit_id로 저장 성공
- ✅ unit_id 매핑: S0111M → E1-1-1 정상 작동 (이미 구현됨)
이슈 재검증:
- 🚨 긴급 이슈 #1 (body_md 손상): 재현됨 ← 한 글자씩 줄바꿈 패턴 확인
예: "서술형문제" → "서\n술\n형\n문\n제" - ✅ 긴급 이슈 #2 (unit_id 제약): 해결됨 ← batch_process_worksheets.py에 convert 함수 존재
신규 이슈 발견 (3개):
- 🆕 이슈 #3: 이미지 추출 색상 형식 오류 (83% 실패, JPEG 색상 모드)
- 🆕 이슈 #4: PDF 파일명 인코딩 (한글이 깨짐)
- 🆕 이슈 #5: 성능 병목 (PDF 파싱 91% 시간 소비)
즉시 필요한 작업
| 우선순위 | 이슈 | 소요 시간 | 담당 |
|---|---|---|---|
| 🔴 P0 | body_md 손상 원인 분석 및 수정 | 2-3일 | BE |
| 🟠 P1 | unit_id convert 함수 호출 추가 | 2h | BE |
| 🟠 P1 | 이미지 색상 모드 변환 | 1-2일 | BE |
상세 보고서
👉 wiki/projects/aplus-sample-validation-report.md
- 파이프라인 상세 분석
- 모든 이슈의 원인, 증상, 영향도
- 우선순위별 해결책
- 성능, 보안, 규정 준수 분석
[2026-05-04] project | Phase 3 검수 대시보드 완성 + 데이터 품질 이슈 발견
Type: Phase 3 구현 완료 + 데이터 검증 (긴급)
Phase 3 구현 현황 ✅
백엔드 API (FastAPI)
- ✅ GET /api/images/{unit_id}/{filename} 구현 완료
- 저장소: app/routers/images.py (171줄)
- 이미지 파일 서빙, 보안 검증 완료
- ✅ PATCH /api/questions/{id} 구현 완료
- 저장소: app/routers/questions.py (+78줄)
- human_reviewed=true로 업데이트, status=‘draft’→‘active’ 전환
- JWT 인증 적용, 409 Conflict 처리
프론트엔드 (Next.js)
- ✅ /admin/questions/review 검수 대시보드 구현 완료
- 저장소: web/src/app/admin/questions/review/page.tsx
- Draft 문제 목록 표시 (12개/페이지)
- 필터 기능 (unit_id, difficulty, type)
- 통계 패널 (분포도)
- 이미지 미리보기
- 승인 버튼 → PATCH 호출
통합 테스트
- ✅ API 엔드포인트 모두 정상 작동
- ✅ 코드 컴파일, 타입 안전성 검증 완료
- ✅ 보안 검증 (인증, 입력 검증) 완료
검수 대시보드 접근 성공 ✅
- URL: http://localhost:3001/admin/questions/review
- Owner 계정으로 로그인 성공
- 14,467개 Draft 문제 표시 확인
- 메타데이터 정상 (코드, 난이도, 유형)
- 이미지 87개 저장됨 (storage/images/)
🚨 데이터 품질 이슈 발견 (긴급)
문제: body_md (문제 텍스트) 완전 손상
발견 사항
원래 저장되어야 할 형태: "서술형문제2수학1–1"
실제 저장된 형태:
서
술
형
문
제
2
수
학
1
–
1
영향 범위
- 14,467개 문제 모두 body_md 손상
- text_length: 11-29 (정상이어야 50+ 정도)
- 글자가 하나씩 \n (줄바꿈)으로 분리됨
손상되지 않은 항목
- ✅ 메타데이터: code, difficulty, type (정상)
- ✅ 이미지: 87개 파일 정상 추출
- ❌ body_md: 모든 14,467개 손상
- ❌ 텍스트 기반 검수 불가능
원인 추정
- Phase 2B PDF 파싱 시 개행 문자 처리 오류
- pdfplumber에서 텍스트 추출 후 한 글자씩 분리됨
- 또는 데이터베이스 저장 시 인코딩 오류
현재 상태 및 다음 단계
현재 검수 대시보드 활용성
✅ 이미지 있는 문제 (87개): 이미지로 정상 검수 가능
❌ 이미지 없는 문제 (14,380개): 텍스트 없어서 검수 불가능
❌ 텍스트 기반 학습지: 생성 불가능
⚠️ 자동 승인도 의미 없음 (손상된 데이터)
필요한 조치
-
즉시: Phase 2B 재파싱 실행
- 원본 ZIP 파일 56개 정상 확인 ✅
- parser.py 개행 문자 처리 수정 필요
- 14,467개 재파싱 (소요 시간: 1-2시간)
-
검증: 재파싱 후 body_md 정상 확인
SELECT LENGTH(body_md) FROM question WHERE source='cafe' LIMIT 5; -- 결과: 50+ 예상 -
재검수: body_md 정상화 후 검수 재진행
기술 스택 & 파일 위치
백엔드
- app/aplus-tracker/api/app/routers/images.py (NEW)
- app/aplus-tracker/api/app/routers/questions.py (MODIFIED)
- app/aplus-tracker/api/app/schemas/question.py (MODIFIED)
프론트엔드
- app/aplus-tracker/web/src/app/admin/questions/review/page.tsx (NEW)
- app/aplus-tracker/web/src/app/admin/components/ (NEW)
파싱 스크립트
- app/aplus-tracker/api/app/scripts/cafe_collector/processor_cli.py
- app/aplus-tracker/api/app/scripts/cafe_collector/parser.py
체크리스트
- ✅ Phase 3 API 구현
- ✅ Phase 3 프론트엔드 구현
- ✅ Agent Team으로 병렬 개발 완료
- ✅ 검수 대시보드 접근 성공
- ❌ 데이터 품질 검증 실패 (body_md 손상)
- ⏳ Phase 2B 재파싱 필요
- ⏳ body_md 재검증 필요
- ⏳ 검수 재진행 필요
[2026-05-04] project | aplus-tracker 수정 후 재검증 완료
검증 결과: 5개 성공 기준 중 1개 PASS (재작업 필요)
- body_md: 평균 20.07