문제
고등학생·학부모가 대학 모집요강 데이터와 AI 분석으로 지원 전형을 판단하도록 도와야 했습니다.
결정
- PDF를 이미지 인식이 아니라 텍스트 레이어로 파싱합니다(pdftotext -layout, 대형 문서는 단어 좌표). 같은 문서 비교에서 완전 레코드 93%, 비용 0.
- 근거 없는 수치를 보이지 않는 2층 구조 — AI 적합도(강·중·약)가 기본이고, 통계 합격 확률(%)은 실제 합격 데이터가 생길 때까지 기능 플래그로 분리했습니다.
- 학년도를 계산식 대신 한 곳의 값 + 3단 폴백으로 바꿨습니다. 계산식이 연초마다 아직 없는 학년도를 조회했고, 테스트도 같은 식을 복제하고 있었습니다.
부서진 곳과 고친 방법
- 라이브에 "표본 27명·확률 22%" 같은 수치가 떴습니다. 시연용 난수 위에서 돌던 기능이었고, 표본 충분성 검사를 모든 화면의 공통 길목 한 곳에 두어 전 화면을 한 번에 막았습니다.
- 한글 학과 ID 페이지 55개가 빈 화면이었습니다. 서버 컴포넌트에 경로 값이 인코딩된 채 전달됐기 때문입니다. ID 정규화 모듈과 회귀 테스트 9건으로 고쳤습니다.
AI 지휘
서브에이전트 자기보고를 믿지 않고 중앙에서 행합·열합을 다시 계산해 집계 오류 22건을 찾았습니다. AI 응답이 등급합을 잘못 인용(계산 "합 7", 본문 "합 5")한 뒤로는, 수치는 결정적 판정기 값만 인용하게 역할을 나눴습니다.
결과
- 테스트 90파일 980개 전부 통과, 같은 커밋 2회 재실행 일치
- 매칭 응답 2,068ms → 1,033ms
- 빈 화면 학과 페이지 55개 복구, 한 대학 기준 커버리지 39% → 98%
- 데이터 정합 오류 22건 사전 차단
- 모집요강 4,173행 적재, AI 적합도 캐시 적중 시 0.78초 · 토큰 0