🏦

은행 계좌 잔액에는 상한이 있을까?

Date
2022/03/26
Tags
Dev
Miscellaneous
Created by
문득 궁금해졌다. “은행 계좌 잔액은 어떤 언어의 어떤 자료형으로 관리될까? 엄청나게 많은 돈을 예치하면 오버플로우가 일어나서 잔액이 마이너스가 되거나 0이 되는 일이 일어날까?”
Table of Contents

각 프로그래밍 언어의 정수 자료형들

Python 3은 표현할 수 있는 정수의 크기 제한이 없다. #
Microsoft C++에서 가장 큰 정수형은 8바이트를 가지는 long long으로, 263-2^{63}부터 26312^{63} − 1의 수까지 저장할 수 있다. #
unsigned 자료형도 있지만, 애초에 마이너스 통장이라는 개념이 있는 한국 금융권에서 unsigned 자료형을 쓸까? 이것도 의문이다...
COBOLDECIMALMONEY라는 numeric type이 존재하는데, 각각 31~32자리의 수를 저장할 수 있다. #
Java의 primitive integer type 중 가장 큰 정수형은 8바이트짜리 long으로, 표현할 수 있는 범위는 C++의 long long과 동일하다.
JavaBigInteger 클래스가 나오면 이야기가 조금 다르다. Primitive types와는 달리, 이 클래스는 표현할 수 있는 정수의 크기 제한이 없다. #
특히 한국 은행권은 COBOL을 사용하다가 Java로 이전하는 추세라고 알고 있는데, 이쯤 되면 ‘죽어도 오버플로우 날 일은 없겠구나' 싶었다.

각 데이터베이스의 정수 자료형들

MySQL은 바이트 수에 따라 총 5개의 정수형을 지원하며, 그 중 가장 큰 정수형은 8바이트짜리 BIGINT이다. #
PostgreSQL 또한 가장 큰 정수형은 8바이트짜리 bigint이다. #
은행권 DBMS의 주류Oracle Database의 경우 동일하게 8바이트짜리 LONGINTEGER를 지원하지만, 10진수 38자리로 10125-{10}^{125}부터 10125{10}^{125}까지의 범위를 표현할 수 있는 NUMBER 자료형을 지원한다.
오라클이 저 정도 크기의 정수형을 지원하는 시점에서 이미 말 다 했다. 하지만 더 찾아보고 싶었다.

직접 물어보자

정말 순수한 궁금증에서부터 시작해서, 나름대로 답을 찾아보려 노력했다. 그리고 가장 간단하고 확실한 방법은 은행에 직접 물어보는 것이라고 생각했다.
2021년 9월 기준 총자산 1위인 KB국민은행의 채팅상담을 이용해 관련 내용을 문의해 보았다.
예상했던 대로 기술적인 답변을 얻지는 못했지만(당연하다. 기술 부서가 아닌 단순 콜센터이기 때문에), “별도로 잔액의 제한이 있는 것은 아니다”라고 명시해 주셨다. 이로써 잔액 오버플로우가 날 확률은 거의 0에 수렴한다고 봐도 되겠다.
또 하나, 직접 물어본 것은 아니지만 일본 은행 쪽에서 하나 건진 것은, 라쿠텐 은행의 FAQ 중 “보통 예금의 잔액 상한이 있는가?”에 대해 “제한 없음"으로 답변한 것이 하나 있었다. https://help.rakuten-bank.net/faq/show/4956?site_domain=individual

Future works

여기서 끝내기는 아쉽기도 하고, 조금만 더 기술적으로 파 보고 싶어서 구글 스콜라도 뒤져보고, 은행 전산에 대한 특허/실용신안을 찾아보는 등 별 짓을 다 해봤지만 “계좌 잔액의 상한"에 대해 제대로 명시해놓은 곳은 없었다.
정말로 예전부터 계좌 잔액이 오버플로우되는 일은 한 번도 없었단 말인가? 네이버 뉴스에서 오래된 기사 순으로 찾아봐도 계좌에 잔액이 너무 많아서 오버플로우된 고객 사례는 없었던 것 같다.
설령 은행 기술부서에 직접 연락이 닿는다 하더라도 보안 문제로 쉽게 답변을 얻을 수는 없을 것 같고, 은행 전산업무를 처리하는 친한 친구에게 슬쩍 물어보지 않는 이상 미스터리로 남게 될 것 같다.
...뭔가 글이 애매하게 끝나 버렸다. 결론은 “오버플로우는 나지 않는다"이지만, 오버플로우 날 만큼 돈이 많았으면 좋겠다.