교회 재정 시스템에 지출 데이터를 넣는 과정을 자동화했다. 회계 프로그램에서 뽑은 Excel 파일 하나로 131건의 지출 내역을 DB에 일괄 입력하는 기능이다.
문제
매주 쌓이는 지출 전표를 하나씩 CLI로 입력하는 건 비현실적이다. 1월부터 2월 중순까지 131건, 49개 계정, 8개 날짜에 걸친 데이터를 빠르게 넣어야 했다.
접근
기존 expense import 명령은 JSON stdin으로 날짜 1개 단위 입력만 지원했다. Excel을 직접 읽는 expense import-xlsx를 새로 만들었다.
핵심 결정은 매칭 전략이었다. Excel에는 계정명(D열)과 계정번호(J열) 두 가지가 있다.
- 계정번호(코드)는 불변이므로 1차 매칭에 사용
- 계정명은 표기가 바뀔 수 있어 폴백으로만 사용
- 실제로 어린이부 2건이 수입 코드(
103)로 잘못 기재되어 있었는데, 계정명 폴백 덕에 자동 해결됨
배운 것
1. 검토 먼저, 구현은 그 다음
바로 코드를 짜지 않고 Excel 구조 분석 → DB 계정 매칭률 확인 → 컬럼 매핑 설계 순으로 진행했다. 49개 계정이 100% 매칭되는 걸 확인한 후에야 구현을 시작했다. 이 과정에서 계정번호 vs 계정명 중 무엇으로 매칭할지 자연스럽게 결정됐다.
2. 첫 실행이 곧 테스트
dry-run으로 먼저 돌려서 131건 파싱이 정상인지 확인하고, 실행 후 실패한 2건을 즉시 분석했다. 이 경험이 폴백 로직의 필요성을 증명했다.
3. 개선은 실패에서 나온다
구현 후 개선점 3가지를 바로 도출:
- 계정코드 폴백 (2건 실패에서)
- 중복 방지 (같은 파일 두 번 실행하면?)
- 테스트 (새 기능에 테스트 없음)
이 3가지를 한 세션에서 모두 처리해서 12개 테스트까지 완성했다.
결과
총 131건, 58,325,045원
2026-01-04 28건 17,149,400원
2026-01-11 17건 4,419,929원
...
✓ 131건 저장 완료
수입(헌금)은 이미 OCR → Excel → DB 파이프라인이 있었고, 이번에 지출까지 커버하면서 재정 데이터 전체가 DB에 들어갔다. 예산 대비 실적 리포트가 비로소 완전해졌다.