경험 기반 솔직한 접근
개인 프로젝트에서 간단한 정산 기능을 기획할 때 원장 구조를 처음 고민했습니다. 처음에는 거래 내역을 단일 테이블에 모두 넣으려 했는데, 취소와 환불이 발생하면 어느 시점의 잔액이 정확한 잔액인지 추적이 어려워졌습니다. 찾아보니 이중 기입 원칙처럼 차변·대변 구조로 분리하면 모든 시점의 잔액을 재현할 수 있다는 점을 알게 됐습니다. 이 구조로 바꾸면서 취소 건도 새로운 거래 행으로 기록해 원본을 수정하지 않는 방식을 택했고, 정합성이 크게 개선됐습니다. 결제 원장 설계에서 중요하게 생각하는 것은 불변성(immutability)과 조회 성능 두 가지입니다. 원장은 한 번 기록된 행을 수정하지 않는 구조가 감사(audit) 추적에 유리하고, 인덱스 전략은 정산 주기와 조회 패턴에 맞게 설계되어야 한다는 점을 배웠습니다.