LabHub

은행 현장의 언어 · 원장과 복식부기 · 이론

은행은 왜 잔액을 UPDATE 하지 않는가

LabHub 에서 이어서 보기

한 줄 요약

은행 코어는 잔액을 고쳐 쓰는 대신 거래를 쌓고 합산한다 — 잔액만 보관하면 그 숫자가 틀렸을 때 대조할 상대가 세상에 하나도 남지 않기 때문이다.

왜 이게 필요했나

일반적인 서비스에서 잔액을 다루는 방법은 단순합니다. UPDATE users SET balance = balance - 1000 WHERE id = 7. 한 줄이고, 빠르고, 읽기도 편합니다.

이 방식의 문제는 성능이 아니라 되짚을 수 없다는 것입니다. 어느 날 잔액이 이상하다는 문의가 들어왔을 때, 우리 손에 있는 것은 지금의 숫자 하나뿐입니다. 이 숫자가 맞는지 틀린지 판단하려면 다른 곳에서 계산한 값과 비교해야 하는데, 비교할 대상이 없습니다. 로그를 뒤져 보자는 말이 나오지만 로그는 보존 기간이 있고 형식이 제각각이고 무엇보다 장부가 아닙니다.

은행은 이 문제를 수백 년 전에 이미 풀어 두었습니다. 답은 복식부기입니다.

어떻게 동작하나

복식부기의 규칙은 하나입니다. 모든 거래는 두 줄 이상으로 기록되고, 차변 금액의 합과 대변 금액의 합은 반드시 같다.

차변(Debit)   자산이 늘거나, 부채가 줄거나, 비용이 생기는 쪽대변(Credit)  자산이 줄거나, 부채가 늘거나, 수익이 생기는 쪽

고객이 현금 100만 원을 예금하면 이렇게 기록됩니다.

전표 JE-20260825-0001  (입금)  차변  1010 현금          1,000,000  대변  2010 요구불예수금   1,000,000

은행 입장에서 현금이라는 자산이 100만 원 늘었고(차변), 동시에 그 돈을 고객에게 돌려줘야 할 의무인 예수금이라는 부채가 100만 원 늘었습니다(대변). 은행 예금이 은행의 자산이 아니라 부채라는 것 — 이게 처음 은행 시스템을 볼 때 가장 많이 헷갈리는 지점입니다.

전표(journal entry)는 거래 한 건이고, 분개행(journal line)은 그 전표를 이루는 각 줄입니다. 한 전표에 세 줄 이상이 붙는 경우도 흔합니다. 예금 이자를 지급하면서 원천세를 떼면 차변 한 줄에 대변 두 줄이 붙습니다.

이 구조에서 잔액은 저장된 값이 아니라 유도된 값입니다. 어떤 계정의 잔액은 그 계정에 붙은 모든 분개행을 합산해서 나옵니다. 그리고 모든 계정을 합산한 표가 시산표(trial balance) 이고, 시산표의 차변 총계와 대변 총계는 반드시 같아야 합니다.

이 항등식이 은행 시스템이 가진 유일한 자가 검증 장치입니다. 하루에 수백만 건이 들어와도, 그 전부를 한 줄로 요약해 "0 인가" 를 물을 수 있습니다.

현실의 코어는 성능 때문에 계정마다 잔액 컬럼을 함께 들고 있습니다. 조회할 때마다 수억 건을 합산할 수는 없기 때문입니다. 하지만 그 컬럼은 원장의 사본이지 원본이 아닙니다. 둘이 어긋나면 언제나 원장이 이깁니다.

현장에서 만나는 모습

첫째, 정정은 UPDATE 가 아니라 역분개입니다. 틀린 전표를 발견하면 그 전표를 고치는 것이 아니라, 원 전표를 거울처럼 뒤집은 전표(역분개)를 넣어 상쇄하고, 올바른 전표를 새로 기표합니다. 원장에는 세 장이 나란히 남습니다. 이게 번거로워 보이지만, 두 달 뒤 감사에서 "이 전표가 원래 이 금액이었나" 를 묻는 사람에게 답할 수 있는 유일한 방법입니다. 원장에 UPDATE 를 친 흔적이 있는 시스템은 그 자체가 감사 지적 사항이 됩니다.

역분개를 할 때 금액은 기록된 대로 씁니다. 틀린 금액을 그대로 뒤집어야 틀림이 정확히 상쇄됩니다. "어차피 틀렸으니 맞는 금액으로 뒤집자" 고 하면 그 순간 차이가 절반만 지워지고, 남은 절반은 아무 데도 기록되지 않은 채 장부에 남습니다.

둘째, 잔액이 안 맞는다는 문의의 원인은 대개 셋 중 하나입니다. 원장이 틀렸거나, 잔액 사본이 틀렸거나, 둘 다 맞는데 보는 시점이 다른 경우입니다. 이 셋은 대응이 완전히 다릅니다. 원장이 틀렸으면 정정 전표를 넣어야 하고, 사본이 틀렸으면 원장에서 다시 계산해 덮으면 되고, 시점 문제면 아무것도 고치지 않고 설명만 하면 됩니다. 어느 쪽인지 가르지 않고 손대는 것이 이 판에서 가장 비싼 실수입니다.

셋째, 잔액 컬럼만 보는 조사는 반드시 막힙니다. 잔액 하나는 그냥 숫자입니다. 맞는지 틀리는지를 그 숫자 자체로는 알 수 없습니다. 반면 원장을 합산해 낸 값은 잔액 컬럼과 비교할 수 있고, 전표 단위 차대변 합은 그 자체로 검증됩니다. 조사할 때 어느 표를 먼저 여는가가 그날 몇 시에 퇴근하는지를 정합니다.

다음 실습에서 할 것

사흘치 원장 스냅샷을 직접 만들고, 그 안에 숨어 있는 차대변 불일치 1건을 찾아냅니다. 시산표에서 시작해 전표 한 건, 분개행 한 줄까지 좁히고, 잔액 컬럼과 원장 합산을 대사해 두 어긋남의 성질이 왜 다른지 확인합니다. 마지막으로 원 전표를 손대지 않고 역분개와 재기표로 바로잡습니다.