PDF 보고서 합계가 안 맞았다 — 원인은 데이터 두 벌
개인별 출석률 10개는 다 맞는데 합계만 틀렸다. 오타인 줄 알았더니 문서를 두 번 적은 탓이었다.
표는 멀쩡해 보였다. 학생 10명의 개인 출석률이 전부 맞았기 때문이다. 틀린 건 표 맨 아래 작은 칸 하나였다.
적혀 있던 값: 출석 88 · 지각 8 · 결석 4
실제로 세면: 출석 84 · 지각 10 · 결석 6
수업 출결·기록 시스템을 만들고 있고, 2026-08-12 에 보고서 시안 두 장을 만들었다. 하나는 회차 보고서 — 그날 출결·기록·기자재. 다른 하나는 10주 요약표 — 학생별 × 주차별 출결에 개인 출석률. 둘 다 HTML 로 한 장씩 뽑고 A4 정확히 1장, 넘침 없음까지 확인했다.
그다음 "둘을 한 PDF 로 묶어달라"는 요청이 왔다. 11장짜리를 만들면서 요약표 하단 합계를 다시 계산해 보다가 걸렸다.
오타가 아니었다
처음엔 오타로 봤다. 숫자 세 개 고치면 끝나는 일이다.
그런데 왜 틀렸는지를 되짚으니 답이 달랐다. 회차 보고서를 만들 때 출결을 한 번 적고, 요약표를 만들 때 또 한 번 적었기 때문이다. 두 벌이 따로 있으니 한쪽이 어긋났다.
그게 정확히 내가 없애겠다고 한 문제였다. 제안서에 이 제품을 파는 문장을 이렇게 적어뒀다.
같은 수업을 두 번 적지 않습니다.
근거도 실물에서 가져왔다. 실제로 쓰이던 활동 보고서 두 건을 나란히 놓으니 같은 반인데 한쪽엔 9명, 다른 쪽엔 10명으로 적혀 있었다. 코치가 쓴 일지를 선생님이 받아 다시 옮겨 적는 구조라서 생긴 어긋남이다. 그걸 문제로 들어놓고, 그 제품의 시안을 같은 방식으로 만들어서 같은 방식으로 틀렸다.
더 나빴던 건 눈으로는 안 걸렸다는 점이다. 개인별 출석률이 다 맞아서 표가 멀쩡해 보였다. 합계는 표 맨 아래 작은 칸이라 시선이 안 가고, 세로로 더해볼 이유도 없다. 묶음을 만들지 않았으면 그대로 나갔을 것이다.
뭘 바꿨나
두 문서를 따로 쓰던 걸 그만두고, 데이터 한 벌에서 11장을 전부 생성하게 했다.
학생 10명 × 10주치 출결·티어를 한 곳에 정의하고, 요약표도 회차 보고서도 거기서 계산해 그린다. 이제 3회차 보고서의 "출석 7·지각 2·결석 1"과 요약표 3주 열은 구조적으로 어긋날 수 없다. 같은 배열을 세로로 읽느냐 가로로 읽느냐의 차이일 뿐이다.
덤으로 생성기에 검사를 하나 걸었다. 지각·결석인데 사유가 비어 있으면 만들면서 알려준다.
🔴 사유가 빈 지각·결석 3건: 4회차 신○○(결석), 5회차 오○○(지각), 6회차 박○○(결석)
세 건이 나왔다. 10장을 눈으로 훑어서는 못 찾았을 것들이다.
시안이니까 손으로 적어도 된다고 본 자리
제품이 없애겠다고 한 문제는 그 제품을 만드는 과정에도 똑같이 생긴다. 시안이니까·임시니까 손으로 적어도 된다고 생각한 자리가 정확히 그 자리였다.
그리고 손으로 적은 것이 틀렸는지는 손으로 검산해서는 잘 안 걸린다. 계산을 코드로 옮겨야 그제야 드러난다.