본문으로 건너뛰기
0
r/jeffnews HN 약 6분

5만 달러짜리 수작업 포렌식 감사를 결정론적 Python 엔진으로 대체한 사례

backend

요약

이혼 소송에서 공동 계좌 내 별도 재산을 증명하는 포렌식 회계 작업을 자동화한 Exit Protocol. LIBR(최저 중간 잔액 규칙)을 상태 머신으로 구현하고, Spatial-Grid OCR로 은행 PDF를 처리하며, Daubert 기준 충족을 위해 AI를 의도적으로 배제한 결정론적 파이프라인임.

기사 전체 정리

이혼 소송용 포렌식 회계를 자동화한 결정론적 Python 엔진 — AI를 의도적으로 배제한 이유

Show HN에 올라온 Exit Protocol은 이혼 소송에서 공동 계좌 내 별도 재산(separate property)을 수학적으로 증명하는 포렌식 회계 자동화 엔진임.

문제: 5만 달러짜리 수작업 감사

  • 공동 계좌에 혼재된 25만 달러의 별도 재산을 증명하려면, 포렌식 CPA가 시간당 500달러를 받으며 수년치 은행 PDF를 엑셀에 옮겨 추적하는 작업이 필요함
  • 통상 수주가 소요되며 비용이 5만 달러를 넘기는 경우가 허다함
  • 개발자는 법원이 사용하는 LIBR(Lowest Intermediate Balance Rule) 기준을 분석한 결과, 이것이 회계 문제가 아니라 분산 시스템의 상태 머신 문제라는 점을 깨달음

핵심 아키텍처

1. Spatial-Grid OCR 파이프라인

  • 은행 명세서는 병합 셀, 겹치는 차변/대변 컬럼 등으로 "OCR의 최종 보스"로 불림
  • 기존 선형 OCR(Tesseract 등)로는 처리가 불가능함
  • Azure Document Intelligence를 메인으로, Surya OCR을 로컬 폴백으로 사용하는 공간 그리드 OCR 파이프라인을 구축함
  • 페이지의 기하학적 구조를 매핑하여 "지옥에서 온 PDF"에서도 테이블 원장을 완벽히 복원함

2. 결정론적 LIBR 엔진

  • LIBR 알고리즘은 **단방향 래칫(one-way ratchet)**으로 작동함
  • 계좌 잔액이 별도 재산 청구액 아래로 떨어지면, 청구액은 해당 바닥값으로 영구 상한이 설정됨
  • 이후 혼인 기간 입금이 있어도 청구액이 복원되지 않음 ("보충 오류/replenishment fallacy")
  • 수천 건의 거래를 시간순으로 재생하며 다음 공식을 지속 평가함:

S_t = min(S_{t-1}, B_t)

3. 타임스탬프 모호성 해결

  • 은행 PDF는 날짜만 제공하고 타임스탬프는 제공하지 않음
  • 같은 날 1만 달러 입금과 1만 달러 출금이 발생하면 순서에 따라 결과가 달라짐
  • Worst Case(출금 먼저 처리) vs Best Case 시뮬레이션 토글을 구현하여, 수학적으로 반박 불가능한 **"Zone of Truth"**를 합의 협상에 제공함

4. 암호학적 증거 관리 체인 & Sovereign Mode

  • 생성된 모든 PDF 보고서에 기저 데이터 스냅샷의 SHA-256 해시를 봉인하여, 생성 이후 변조되지 않았음을 판사에게 증명함
  • 클라우드 SaaS 유출을 우려하는 법률 사무소를 위해, 전체 모놀리스(Django 5.0 / PostgreSQL / Celery)를 Docker로 컨테이너화한 "Sovereign Mode" 제공
  • 에어갭 환경의 자체 하드웨어에서 독립 실행이 가능함

왜 AI를 쓰지 않았는가

지금 수백 개의 리걸테크 스타트업이 LLM으로 은행 데이터를 요약하려 하고 있지만, 법정에서 GenAI는 치명적 약점임. LLM이 단 하나의 거래를 할루시네이션하면, Daubert 기준에 따라 전체 원장이 증거능력을 상실함.

  • Daubert standard: 미국 연방법원에서 전문가 증언·과학적 증거의 신뢰성을 판단하는 기준
  • 법정 제출 가능한 결과물을 만들기 위해 파이프라인 전체를 **엄격히 결정론적(strictly deterministic)**으로 설계함
  • 같은 입력에 항상 같은 출력이 보장되어야 하므로 확률적 모델을 의도적으로 배제한 것임

ℹ️참고

> AI 만능론이 지배하는 시기에, "왜 AI를 쓰지 않았는가"를 명확히 설명하고 결정론적 접근을 택한 사례로서 주목할 만함. 법적 증거능력이 요구되는 도메인에서는 할루시네이션 리스크가 곧 시스템 전체의 무효화로 이어진다는 점을 잘 보여줌.

핵심 포인트

  • LIBR 알고리즘을 S_t = min(S_{t-1}, B_t) 단방향 래칫 상태 머신으로 구현
  • Azure Document Intelligence + Surya OCR 폴백의 공간 그리드 OCR 파이프라인으로 은행 PDF 처리
  • LLM 할루시네이션이 Daubert 기준에서 전체 원장의 증거능력을 무효화할 수 있어 AI를 의도적으로 배제
  • SHA-256 해시 기반 증거 관리 체인과 에어갭 배포용 Docker 컨테이너화 Sovereign Mode 제공
  • Django 5.0/PostgreSQL/Celery 기반 모놀리스 아키텍처

인사이트

AI 만능론 시대에 법적 증거능력이 요구되는 도메인에서는 결정론적 접근이 필수적이며, 할루시네이션 리스크가 곧 시스템 전체의 신뢰성 붕괴로 이어진다는 점을 보여주는 역설적 사례임.

댓글

댓글

댓글을 불러오는 중...

backend

Redis 8.0 출시 — I/O 스레딩 갈아엎고 처리량 3배, 2.1M ops/sec 달성

Redis 8.0이 I/O 스레딩 모델을 완전히 재설계해서 16코어 기준 2.1M ops/sec를 달성함 (7.4 대비 3배). Hash field expiration, Vector search HNSW, Client-side caching v2, Redis Functions 2.0 async 실행 등 굵직한 기능이 추가되고, jemalloc 통합으로 메모리 fragmentation도 25% 줄어듦.

backend

dial9 — Tokio 런타임의 블랙박스 레코더, 프로덕션에서 5% 미만 오버헤드로 이벤트 타임라인 기록

Tokio 런타임의 개별 이벤트를 타임라인 로그로 기록하는 텔레메트리 도구 dial9이 공개됨. 커널 스케줄링 딜레이, fd_table 컨텐션 등 집계 메트릭으로는 찾을 수 없는 프로덕션 성능 문제를 실제로 해결한 사례를 소개.

backend

dbt를 10년 늦게 시작한 후기 (DuckDB 에디션)

dbt를 10년 늦게 발견한 저자가 DuckDB와 조합해 UK 홍수 모니터링 API 데이터 파이프라인을 구축한 경험기. source 분리, staging 모델, Jinja 매크로, 테스트, 자동 문서화, Dagster 오케스트레이션까지 전체 과정을 다룸.

backend

HN은 왜 이렇게 Rust에 집착하는 걸까?

HN 커뮤니티가 Rust에 열광하는 이유를 분석한 글. 메모리 안전성·동시성·성능·툴체인을 모두 갖춘 유일한 언어라는 점, 그리고 C++의 카오스와 대비되는 Cargo의 통합된 개발 경험이 핵심 요인으로 꼽힘.

backend

LittleHorse 1.0 — 비즈니스 로직을 코드로 표현하는 마이크로서비스 오케스트레이션 엔진

Apache Kafka 기반의 고성능 워크플로우 오케스트레이션 엔진 LittleHorse가 1.0을 출시함. 비즈니스 프로세스를 코드로 직접 표현하는 'Business-as-Code' 방식으로 마이크로서비스 간 조율, 재시도, 타임아웃, 분산 추적 등을 엔진 레벨에서 처리해줌.