← 아카이브로 돌아가기 · 함께 보기: 제20대 아카이브 · 제21대 아카이브
전수 디지털화 실행 보고서 — 20대·21대 개표상황표
요약
- 실행 기간: 2026-10-23 22:54 EDT ~ 2026-10-24 19:49 EDT (벽시계 약 21시간; 런타임 중단으로 인한 가동 공백 포함)
- 최종 상태: 양 선거 모두 완료 확인됨. 21대 런처 재실행 시
total todo: 0 / RUN COMPLETE(run21r.log), 20대 런처 재실행 시 동일(run20q.log, skipped done 36,342).
- 처리량: 매니페스트 고유 페이지 36,342쪽 전수 처리 (21대 18,965 + 20대 17,377). 계획 기준 36,326쪽(아카이브 표기 합계)보다 16쪽 많으며, 차이는 아래 매니페스트 대조 항목에서 완전히 설명된다.
- 최종 출력:
out21.csv (21대), out20.csv (20대), 페이지별 JSON (gemini21/, gemini20/, docai21/, docai20/), 실패 큐 (failures/failures.jsonl), 체크포인트 (checkpoint.jsonl).
선거별 처리 결과 (중복 제거 기준, 최종 행 기준)
| 선거 |
매니페스트 고유 페이지 |
CSV 행 (중복 포함) |
상태 ok |
상태 ok_reread |
상태 failed |
| 20대 |
17,377 |
17,405 (+28 중복 행) |
14,209 |
823 |
2,345 |
| 21대 |
18,965 |
22,506 (+3,541 중복 행) |
15,890 |
849 |
2,226 |
| 합계 |
36,342 |
39,911 (+3,569 중복 행) |
30,099 (82.8%) |
1,672 (4.6%) |
4,571 (12.6%) |
중복 행은 쌍둥이 런처(한 선거에 2개 런처)가 같은 큐를 경합하며 같은 쪽을 두 번 처리한 결과이다. 최종 집계는 페이지별 최종 행 기준으로 중복을 제거하였다.
검증 지표 (중복 제거 기준)
| 지표 |
20대 |
21대 |
| 산술 제약 통과율 (최종−분류=재확인 등) |
87.92% (15,278/17,377) |
88.92% (16,863/18,965) |
| 선관위 결과 대조 매칭률 (nec_matched) |
57.6% (10,009) |
58.6% (11,105) |
| 선관위 결과 일치율 (매칭된 행 중 nec_agree) |
92.16% (9,224/10,009) |
94.28% (10,470/11,105) |
| 전사본 일치율 (21대, trans_agree 설정 행 중) |
— |
91.89% (9,597/10,444) |
| DocAI 인쇄 분류열 일치율 (docai_agree_classified) |
56.45% (6,196/10,976) |
80.35% (11,686/14,544) |
주의사항:
- 선관위 매칭률이 ~58%에 그친 것은 정확도 문제가 아니라 매처 커버리지 한계이다. 투표구명 정규화 차이와 특수 투표(관내·관외 사전, 거소·선상 등) 표기 차이로 약 42%의 쪽이 선관위 행과 1:1로 매칭되지 않았다. 매칭된 행 중 일치율은 92–94%이다.
- DocAI 일치율은 Gemini 정확도가 아니라 DocAI의 약함을 보여준다. 파일럿에서도 20대 DocAI 분류 정확도는 44.1%였다. DocAI는 보조 판독기일 뿐이며, 최종 값은 Gemini 값이다.
- 제약 통과율 88% 안팎은 파일럿의 깨끗한 표본(21대 100%)보다 낮다. 전수에는 판독이 어려운 쪽(큰 사전투표 상황표, 흐릿한 손글씨)이 포함되기 때문이다. 통과하지 못한 쪽은 실패 큐로 분리되었고, 값이 삭제된 것이 아니라 플래그와 함께 출력 파일에 남아 있다.
실패 큐 (수동 검토 대상)
- 실패 큐 파일 행 수: 5,059행 / 고유 페이지 4,612쪽 (전체의 12.7%).
- 사유별 (한 쪽에 여러 사유 가능): constraint_fail 2,902 / null_fields 1,847 / nec_mismatch 1,561 / trans_mismatch 957 / null_totals 636 / totals_mismatch 39 / Gemini·재독 호출 오류 11.
- 최우선 수동 검토 1쪽:
e20_jeonnam_x426355_p002 (무안군 2쪽) — 전수에서 유일하게 Gemini JSON 출력이 전혀 없는 쪽이다 (초기 호출과 300DPI 재독 모두 실패). CSV 행은 존재하나 Gemini 값이 비어 있다.
- 그 외 실패 쪽은 Gemini 값이 있으나 제약·대조 중 하나 이상이 실패한 상태이므로, 발행 전 검토가 필요하다.
Document AI 장애 (중요한 품질 주의사항)
- DocAI 출력 파일 28,104개 중 2,582개가 오류 파일이다 (
parsed: {error: IncompleteRead(...)} — API 응답이 전송 중 잘린 형태).
- 시간대별: 10-24 13:00 EDT경부터 오류가 나타나기 시작했고(21대 55건), 15:00 EDT 이후 새로 생성된 DocAI 파일은 사실상 100% 오류이다. 이 때문에 꼬리 구간(약 15:00 이후 처리분)의 플래그 전용 DocAI 2차 판독은 사실상 동작하지 않았다. 해당 구간 플래그 쪽의 검증은 Gemini + 산술 제약 + 선관위 대조에만 의존한다.
- 원인은 미확정이다 (인증·할당량 오류가 아니라 응답 절단 형태이며, 샌드박스 이그레스 프록시 쪽 절단 가능성이 있다).
docai_ok 카운터가 25,519에서 멈춘 것은 모니터 버그가 아니라, 그 이후 유효한 DocAI 파일이 새로 생기지 않았기 때문이다.
- 후속 권장 (미실행, 승인 필요): 프록시·API 상태가 회복된 뒤 오류 DocAI 파일 2,582쪽에 대해 DocAI 재독 패스를 돌리면 플래그 쪽의 2차 판독 커버리지를 복원할 수 있다.
매니페스트 대조 (21대 +16쪽의 완전한 설명)
- 매니페스트21 파일 항목 19,156개 중 고유 페이지 18,965개. 차이 191개는 라벨 중복이다:
- 대전 중구 82쪽이 '중구'와 '대존중구' 두 라벨로 이중 등재 (동일 page_id).
- 전주 완산구 109쪽이 '전주시완산구'와 '전주시완산구 잘 못투입 구분된투표지,' 두 라벨로 이중 등재 (동일 page_id).
- 이 라벨들은 아카이브 사이트 자체의 구역명 표기를 그대로 물려받은 것이다.
- 아카이브 표기 18,949장 대비 매니페스트 고유 18,965장 = +16장, 도 단위로 완전히 분해된다 (나머지 15개 도는 정확히 일치):
- 대전 −12장: 아카이브 대전 페이지가 중구를 '중구' 12장과 '대존중구' 82장으로 나누어 합계 473장을 표기하나, 두 항목이 동일한 82장 뷰어(파일 39101, 1–82장)로 연결된다. 12장은 별도의 공개 세트가 없는 아카이브 측 집계 흔적일 가능성이 가장 크다. 단, 12장이 실제로 별도 세트라면 디지털화에서 누락된 것이 되므로, 이 1건만 불확실 항목으로 남긴다.
- 전북 +28장 = +29장 − 1장: 매니페스트에 있으나 아카이브에 공개되지 않은 순창군 29장 (아카이브 순창군 항목은 0장으로 비어 있음) − 아카이브에만 있는 '전주시완산구 잘 못투입 구분된투표지,' 1장 (매니페스트에 없음).
- 20대 매니페스트 17,377쪽 = 아카이브 표기 17,377장, 정확히 일치한다.
- 부가 관찰: 전북 매니페스트의 일부 구역 라벨이 Mojibake(인코딩 깨짐) 상태이다. 페이지 처리에는 영향이 없으나, 구역명 표시 정리 시 수정 대상이다.
속도·운영 교훈 (최종 보고서용 판정)
- 80 워커 판정: 실패. 80 워커 21대 런처가 4연속 수분 내 무흔적 사망(진행 로그 0줄)하였고, 80 워커 20대 런처도 약 50분 만에 사망하였다. 같은 2CPU/8GB VM에서 40 워커 런처는 양 선거 모두 RUN COMPLETE까지 생존하였다 (21대 최종 런 65.6분, 34.3/분; 20대 최종 런 92.7분, 32.4/분).
- 속도 병목은 워커 수가 아니라 Gemini 지연이다. 전수 구간 Gemini 호출 평균 지연은 약 103–122초(파일럿 3–4초 대비)로, 하루 종일 누적된 API 측 스로틀링·큐잉으로 보인다. 40 워커 sustained 61/분(WAKE18)은 80 워커 sustained 64/분(WAKE10)과 사실상 동등하였다.
- 지속 pace (고유 페이지 기준): 40 워커 전수 초기 약 30–36/분 → 80 워커 플래그 전용 burst 87/분, sustained 64/분 → 사망·공백 반복 구간 약 12–22/분 → 40 워커 안정화 43–61/분 → 꼬리 단일 런처 약 27–37/분.
- 이중 처리: 체크포인트 행 39,908개 중 고유 36,342개 → 약 3,566개 중복 기록. 쌍둥이 런처 경합이 원인이며, 선거당 1개 런처 규칙으로 해결되었다.
- 런타임 불안정: 감독 3명 사망, 런처 5회 이상 사망, 모니터 수회 사망, 감독 슬립 2회 SIGTERM. 체크포인트-재개 설계가 없었다면 전수는 완주하지 못했을 것이다. 모든 재실행은 완료 페이지를 건너뛰므로 이중 청구는 진행 중이던 쪽에만 한정된다.
- Gemini 지연 외에, DocAI 15:00 EDT 이후 전멸과 21대 런처 연쇄 사망이 꼬리 속도를 추가로 떨어뜨렸다.
남은 수동 작업
- 실패 큐 4,612쪽 검토 (최우선: 무안군 2쪽
e20_jeonnam_x426355_p002 — Gemini 출력 없음).
- (선택, 승인 필요) DocAI 오류 2,582쪽에 대한 DocAI 재독 패스.
- (선택) 아카이브 미공개 12장(대전 중구, 별도 세트 존재 시) 및 전북 노트 1장의 매니페스트 편입 여부 결정.
- (선택) 선관위 매처 커버리지(~58%) 개선 — 투표구명 정규화 및 특수 투표 표기 대응.
- (선택) 전북 매니페스트 구역 라벨 Mojibake 정리.
- (21대 교차 검증 잔여, 2026-10-24 재대조 후) 미검증 3,234쪽 중 실질 검토 대상: 구역 단위 특수지 43쪽(일치율 70.92%) 우선, 그 외 모호·무후보 2,500여 쪽은 표지·요약 시트 및 전사본 커버리지 공백이 많아 대조 대상 자체를 먼저 가려야 한다.
21대 교차 검증: 디지털화 vs 검증 전사본 (별도 분석, 최종행 기준)
전사본(k21_precinct_classified_recheck.csv, 검증 완료)은 디지털화와 독립된 정답이다. 대조는 두 단계로 했다.
- 1단계 (구역명+쪽 번호 대조): 구역명이 정상인 16,387쪽 중 14,945쪽이 전사 행과 대조됐다. 대조된 쪽의 필드 일치율은 89.5%였는데, 이는 판독 오류가 아니라 대조 자체의 어긋남이 섞인 수치다.
- 2단계 (투표구명 검증): 대조된 쪽 중 투표구명이 일치하는 12,892쪽(86.3%)으로 한정하면 필드 일치율 98.77%, 쪽 완전일치 91.4%가 나온다. 나머지 13.7%는 쪽 번호 체계가 어긋난 대조(특히 사전투표지의 별도 PDF 쪽 매김)이며, 투표구명 기준 재대조가 잔여 과제다.
- 오류 패턴: 분류(인쇄) 오류 346건に対し 최종 1,118건·재확인 903건으로, 손글씨 열이 오류의 대부분이다. 파일럿의 결론과 일치한다.
- 대조 불가분: 구역명 오염 2,578쪽(13.6%, 파일명 조각·"기타"·선거구명 변형 등)은 (구역명, 쪽) 대조에서 빠졌고, 미대조 1,442쪽도 함께 투표구명 기준 재대조 대상이다.
결론: 검증된 대조 기준 전국 단위 필드 정확도 98.8%는 파일럿의 서울 표본 100%보다 낮지만, 전수·전 지역을 포함한 수치로서는 타당하다. 쪽 완전일치 91.4%는 곧 검토 큐 규모(8.6%의 쪽에 1개 이상 필드 오류)와 같다.
재대조 (투표구명 기준, 2026-10-24 23시 추가 분석)
미검증 6,073쪽에 대해 투표구명 기준 재대조를 실시했다. 구역명은 매니페스트의 파일 경로(구역 코드 폴더)에서 복원했고, 대조는 값과 무관하게 투표구명 일치로만 결정했다(값으로 대조 대상을 고르면 일치율이 부풀려지므로 금지).
- 신규 대조 2,839쪽: 구역+투표구명 1,495쪽(일치율 99.03%) · 지역 내 투표구명 유일 1,301쪽(99.22%) · 구역 단위 특수지 43쪽(70.92%, 별도 검토 필요 — 아래 참조). 신규 대조분의 필드 일치율 98.69%, 쪽 완전일치 91.5%로, 1·2단계 결과와 일치한다. 전 필드 불일치(오대조 징후) 쪽은 10쪽에 불과해, 재대조 자체는 신뢰할 수 있다.
- 최종 검증 커버리지: 15,731쪽 / 18,965쪽 (82.9%), 통합 필드 일치율 98.76%, 쪽 완전일치 91.4%.
- 잔여 미검증 3,234쪽 (17.1%) — 사유별: 구역 내 후보 없음 1,635 · 표지·구역 단위 시트(위원회 등) 691 · 지역 내 모호 391 · 구역 내 모호 291 · 투표구명 비어 있음 123 · 지역 내 후보 없음 71 · 특수지 유일 후보 없음 32. 잔여 중 상당수는 검증 실패가 아니라 대조 대상 자체가 없는 경우다: 위원회 표지·구역 단위 요약 시트, 거소·선상 시트(전사본의 검증 집합에 제외 행으로만 존재), 부산 진구처럼 전사본 검증 집합에 해당 구역 행이 아예 없는 경우 등이다.
- 특수지 주의: 구역 단위 관외사전·재외 시트 43쪽의 일치율이 70.92%로 낮다. 디지털화 쪽이 전사본의 구역 합계 행과 다른 단위(부분 시트 등)일 가능성이 있어, 이 43쪽은 별도 검토 대상이다.
산출물 위치
- 작업 디렉터리:
~/workspace/digitization_full/ — 매니페스트(manifest/), 페이지별 JSON(gemini21/, gemini20/, docai21/, docai20/), 통합 CSV(out21.csv, out20.csv), 체크포인트(checkpoint.jsonl), 실패 큐(failures/failures.jsonl), 런처·모니터 로그(logs/).
- 본 보고서 사본:
~/workspace/your_files/digitization-full-run-report.md.